Content originally posted in LPCWare by DiligentMinds.com on Thu Sep 20 11:40:19 MST 2012
I'm pretty sure ARM supplies the CMSIS file for the core, and the device manufacturer supplies the CMSIS file for the peripherals. This is because each manufacturer has a different set of peripherals and they usually work differently. ARM has some peripheral IP that can be used, and if you build a part with their peripherals, then you can use the CMSIS files from ARM for those.
What really kills me is that some of the manufacturers did not wisely choose a naming convention for peripheral register and/or bit names-- and so (sometimes) the register and/or bit names in the CMSIS file will be at variance with the programmer's reference manual for the part (which makes it hard to search for help, or to search the code if starting with the manual)-- and even worse, the register and/or bit names in the CMSIS file can vary from part to part, even though they have the exact same function. It can be a bit confusing at times, especially if you are new to the part. It's just something we have to live with-- once you create the CMSIS file for the part, it's really hard to change things because you can end up breaking end-user's already working code. This problem is contrary to the whole idea of CMSIS-- which was to be able to change from one manufacturer to another (for the core functions)-- and not have to change your source (and this part of CMSIS is working)-- but also, when changing from part to part from one manufacturer, we should not have to change our source (and that part is not working as well as it could). I "get it" though-- sometimes a manufacturer wants to upgrade a peripheral on a new part, and so the CMSIS file *can* have changes that are impossible to reconcile without end-user code changes.
Just one of life's little problems that we have to deal with... Oh well...