Content originally posted in LPCWare by piperazine on Wed Mar 16 14:40:27 MST 2011
Hello,
First off I'm no expert, but here's my take on CMSIS:
core_cm3.c
core_cm3.h
These file contain the names, definitions, and helper functions to access the CORE registers, and CORE peripherals of the Cortex M3 chips, like functions for setting up the NVIC (Nested Vector Interrupt controller), Systick etc. These files are provided by ARM and I believe these are the same for any Cortex M3 chip. The documentation in the "docs" folder covers much of whats goin on in here.
Then you have the device specific files which are supplied by the silicon vendor (in this case NXP).
LPC17xx.h
This file contains the data structures, register memory addresses, and defines for the LPC17xx (peripherals like UART, GPIO, TIMERS, etc are all in here). All the registers from the LPC17XX user manual are in here somewhere.
system_LPC17xx.h
This file contains the prototypes for the SystemInit(), and SystemCoreClockUpdate(). CMSIS requires these two functions to be provided by the silicon vendor, as on chip peripherals (Clock setup, PLL setup, etc) will differ from chip to chip. SystemInit() is called from the startup code to setup the clock settings.
system_LPC17xx.c
This file contains the implementaion for SystemInit(), and SystemCoreClockUpdate(). Which again is device specific and supplied by the silcon vendor. It also contains a bunch of defines which allow you to easily change the clock speed settings.
As far as I know there isnt any supplementary documentation for the vendor supplied files (except the comments in the code). The way I tackled getting my head round this (from a beginners perspective) was to cross refernce the LCP1769 user manual with the LPC17xx.h file to get my bearings on the register locations, and how they are accessed. Then to study the Clocking and power control section (Chapter 4), and compare that to the defines set up in system_LPC17xx.c to get a grasp on clock settings.
Does that help?