原文鏈接:freescale 16位單片機(jī)的地址映射--(1)前言
freescale 16位單片機(jī)的地址映射--(2)飛思卡爾16位單片機(jī)的資源配置
freescale16位單片機(jī)的地址映射--(3)codewarrior中的prm文件
前言:
原來一直不太明白單片機(jī)的地址映射,也沒有仔細(xì)的研究過,我想這就是我不是牛人的原因吧。通常開始學(xué)單片機(jī),都是寫一些比較小的程序,如果不做項目開發(fā)之類的,以飛思卡爾16位單片機(jī)的資源配置來說也足夠了。但是前一陣子遇到了一個問題,需要在RAM中存一個比較大的常數(shù)數(shù)組,但是單單存在RAM中的話,肯定是存不下,考慮到數(shù)組是常數(shù),所以只能存在ROM里,但是當(dāng)時時間較短,沒有研究明白,還得到了非常慘痛的教訓(xùn),覺得不甘心,打算再花時間研究了一下。在以后的文章中我會把我的研究心得記錄下來,希望大家提出意見。
飛思卡爾16位單片機(jī)的資源配置
以MC9S12XS128MAL為例,其實DG128之類的類似。如圖一,128代表的是單片機(jī)中的FLASH大小為128KByte,同理64代表的是單片機(jī)中的FLASH大小為64 K Byte,256代表的是單片機(jī)中的FLASH大小為256 KByte。但是S12(X)所使用的內(nèi)核CPU12(X)的地址總線為16位,尋址范圍最大為2^16 =64K Byte,而這64KByte的尋址空間還包括寄存器、EEPROM(利用Data Flash模擬)、RAM等,因此不是所有的64KByte都是用來尋址FLASH。所以在S12(X)系列單片機(jī)中,很多資源是以分頁的形式出現(xiàn)的,其中包括EEPROM、RAM、FLASH。EEPROM的每頁大小為1KByte,RAM的每頁大小為4K Byte,F(xiàn)LASH的每頁大小為16K Byte。因此XS128中EEPROM的頁數(shù)為8K/1K =8頁,RAM的頁數(shù)為8K/4K = 2頁,F(xiàn)lash的頁數(shù)為128K/16K = 8頁。
圖一
圖二
在單片普通模式中,復(fù)位后,所有內(nèi)存資源的映射如圖二所示,其中從0x0000-0x07FF的2K范圍內(nèi)映射為寄存器區(qū),如I/O端口寄存器等,當(dāng)然寄存器沒有那么多,后面的一部分其實沒有使用;
從0x0800-0x0BFF,共1K的空間,映射為EEPROM區(qū),由上面的分析,XS128中共有8頁的共8K的EEPROM,所以這8頁的EEPROM都是以分頁的形式出現(xiàn)的,可以通過設(shè)置寄存器EPAGE選擇不同的頁并進(jìn)行訪問;
從0x0C00到0x0FFF的1K空間為保留區(qū)(其實這里面也有學(xué)問,以后探討);
從0x1000到0x3FFF的12K空間為RAM區(qū),分為三頁,但是和前面所說的EEPROM不同,這三頁中有2頁(對于XS128和XS256)或一頁(對于XS64)為固定頁,位于12K空間的后一部分,以XS128為例,其內(nèi)部的RAM資源為8K,所以其三頁中的最后兩頁(0x2000-0x3FFF)為固定頁,第一頁(0x1000-0x1FFF)為窗口區(qū),通過設(shè)置寄存器RPAGE來映射其他分頁的RAM,當(dāng)然在單片普通模式下,XS128內(nèi)部已經(jīng)沒有其他的RAM了,所以這一頁其實也沒有用。但是對于XS256,這一頁是有用的,因為它總共有12K的RAM。但是,在單片普通模式下,即沒有外擴(kuò)RAM的情況下,用戶是不用刻意的去配置RPAGE的,因為復(fù)位的時候,已經(jīng)默認(rèn)指向那一頁的RAM。
從0x4000-0xFFFF的總共48K的空間為Flash區(qū),分為三頁。其中第一頁和第三頁為固定的Flash頁,中間的一頁(0x8000-0xBFFF)為窗口區(qū),通過設(shè)置PPAGE寄存器,可以映射到其他的分頁Flash。
在最后的一頁固定的Flash區(qū)域中的最后256字節(jié)中,保存的是中斷向量。
對于RAM和Flash來說,其實固定頁和其他的分頁資源是統(tǒng)一編址的,不同的是固定頁不可以通過寄存器(RPAGE、PPAGE)改變映射,而其他的頁必須通過寄存器的設(shè)置來選擇映射不同的頁。
codewarrior中的prm文件
網(wǎng)上廣泛流傳的一篇文章講述的是8位飛思卡爾單片機(jī)的內(nèi)存映射,這幾天,研究了一下Codewarrior 5.0prm文件,基于16位單片機(jī)MC9S12XS128,一點心得,和大家分享。有什么錯誤請指正。
正文:
關(guān)于Codewarrior 中的.prm 文件
要討論單片機(jī)的地址映射,就必須要接觸.prm文件,本篇的討論基于Codewarrior 5.0 編譯器,單片機(jī)采用MC9S12XS128。
評論
查看更多