LPC17XX系統(tǒng)初始化文件
一直很不愿意寫這種技術(shù)性的文章,部分原因是自己太菜了LPC17XX系統(tǒng)初始化文件,還夠不上這個檔次,但這對一些缺乏相關(guān)信息的人還是很有用的,或者說是為了自己的記憶更深些吧!
LPC17XX里還有一個系統(tǒng)初始化文件其中包括:3個頭文件,2個C文件,1個.S文件。分別是:
LPC17xx.h、core_cm3.h、system_LPC17xx.h;
core_cm3.c、system_LPC17xx.c;startup_LPC17xx.s;
startup_LPC17xx.s是系統(tǒng)自動加載的ARM啟動匯編代碼。
LPC17XX.h是芯片的頭文件,定義的是芯片寄存器的結(jié)構(gòu)體,keil在頭文件里關(guān)于寄存器的定義都是以結(jié)構(gòu)體的方式定義的,所以我們在寫程序的時候訪問寄存器也要以寄存器方式訪問,比如在GPIO的操作的時候由一個名“FIODIR”的方向寄存器,是一個32位的寄存器,對應(yīng)一個IO口的32位,如果某位為1則對應(yīng)的管腳為輸出模式,因此在訪問的時候?qū)懛ㄈ缦?
LPC_GPIO1->FIODIR=0x000000ff;
GPIO1表示P1口,GPIO2表示P2口,上面這行代碼表示P1口的低8位為輸出模式。由于keil版本的原因可能有些版本定義結(jié)構(gòu)體的時候沒有LPC_這個部分使得訪問GPIO1的寫法如下:
GPIO1->FIODIR=0x000000ff;
關(guān)于這個的確認可以打開LPC17XX.h看一下就知道了。還有一點需要注意的是在keil的頭文件里定義寄存器是以32位的方式定義的,所以不能使用手冊中說明的字,半字的訪問方式只能使用32位的訪問方式
core_cm3.c、core_cm3.h分別是ARM M3外圍驅(qū)動源代碼和頭文件,在使用的過程中不需要修改什么system_LPC17xx.h、system_LPC17xx.c這兩個文件是與編程有非常密切關(guān)系的文件。從名字上就可以知道是關(guān)于系統(tǒng)的文件,這兩個文件為我們提供了一個系統(tǒng)初始化函數(shù),SystemInit();默認使用外部振,外部晶振是12MHz,使用PLL0倍頻,LPC1700的系統(tǒng)初始化包括時鐘配置、電源管理、功耗管理等。其中比較復(fù)雜的是時鐘配置,由于有2個PLL,一個是主PLL0,可以為系統(tǒng)和USB提供時鐘,一個是PLL1專門為USB提供48M鐘,可以不使用。由于LPC1700的時鐘靈活性較大,也使得配置時鐘的過程稍微復(fù)雜一些。但是我們的系統(tǒng)文件都將這些做好了,
LPC17xx.h里有core_cm3.h和system_LPC17xx.h的調(diào)用,因此我改時鐘頻率或者其他參數(shù)只需要修改對應(yīng)的宏定義即可