昨天調(diào)了一天的FLASH擦寫,到最后依舊沒有調(diào)通,但是對(duì)FLASH的結(jié)構(gòu)還總算有一定的了解了。我調(diào)的程序是北航出版社的《使用HCS12微控制器的設(shè)計(jì)與應(yīng)用》這本書附帶光盤上的例子,程序似乎沒有問題,但是FLASH確實(shí)是擦不掉,串口返回的數(shù)據(jù),每一頁都相同,令人費(fèi)解,并且如果我要讀FLASH上的數(shù)據(jù),就會(huì)靈程序報(bào)錯(cuò)停止,不知道是跑飛了還是什么。也希望如果有同樣問題的朋友能夠一起討論討論。 下來羅列一些FLASH的基本概念,也算是復(fù)習(xí)一下。
本文引用地址:http://butianyuan.cn/article/201611/321076.htm這是HCS12內(nèi)部地址的基本結(jié)構(gòu)圖,我們可以看到第一部分是寄存器,第二部分是EEPROM,第三部分是RAM,第四部分就是FLASH了,這部分是不分頁時(shí)我們可以訪問到的FLASH,第五部分是擴(kuò)展的FLASH,這部分需要分頁訪問,DG128中有38,39,3a,3b,3c,3d,3e,3f這幾個(gè)部分,而DP256中還包括了30~37這些頁都有效,第六部分是另外的固定FLASH地址。
這么來說,$4000–$FFFF間的存儲(chǔ)數(shù)據(jù)是可以訪問的。
•由于Flash 模塊的地址范圍超出了 HCS12 的64K (16-bit)地址空間,所以從 $8000–$BFFF被映射到若干16K字節(jié)大小的頁框中。 由PPAGE寄存器決定在當(dāng)前訪問的是哪一頁。
•$8000 - $BFFF間共有64個(gè)可訪問的頁。使用PPAGE寄存器可以訪問到地址在$8000–$BFFF間的所有共16頁的16K字節(jié)。
•Flash模塊中每個(gè)塊包含許多行控制和狀態(tài)寄存器,它們都位于的相同地址空間 INITRG + $100 - INITRG + $10F。通過Flash 配置寄存器選擇有效的某行寄存器。
•MC9S12DP256 有7個(gè)引腳端口, 端口K,用來仿真或者作為通用 I/O。其余六個(gè)端口用來決定哪一個(gè)Flash頁正在被訪問。 其余的地址位放在 PPAGE 寄存器中。
所有的256K的FLASH可以通過16K的PPAGE窗口來訪問,其中兩個(gè)16K的頁也可以通過固定地址($4000-7FFF, $C000-FFFF)來訪問。$4000-$7FFF與$3E相對(duì)應(yīng),$C000-$FFFF與$3F相對(duì)應(yīng)。這兩個(gè)固定頁克服了內(nèi)存分頁機(jī)制的一些缺點(diǎn)。采用分頁機(jī)制,在某一頁中的函數(shù)無法直接訪問訪問另一頁中的數(shù)據(jù)。需要被其它頁的函數(shù)訪問的數(shù)據(jù)應(yīng)該放在固定頁中,或只有固定頁的函數(shù)才能訪問其他頁的數(shù)據(jù)。因?yàn)閺?fù)位和中斷向量表只有16位,所以所有的中斷服務(wù)程序和復(fù)位初始化程序必須從固定頁中開始執(zhí)行。大部分中斷服務(wù)程序可以放在非固定頁中,部分的中斷服務(wù)程序尤其起始部分要放在固定頁中。通過CALL來調(diào)用非固定頁中的函數(shù),最后用RTI指令返回。
評(píng)論