原文地址:http://goo.gl/E5Ei5
這要還是要從FLASH分頁和非分頁的區別說起。
下面詳細說一說,FLASH裏非分頁和分頁的使用。 要明白一點,分頁是不可見的,要用的時候PPAGE參與尋
址。
FLASH裏非分頁工作機制
FLASH一共爲128K,一頁是16K,那麼應該有8頁纔是,但是實際只有6個分頁。有2個非分頁放在4000-7FFF
,和C000-FFFF兩個邏輯地址窗裏。那麼,當程序的尋址在64K之內(2^16=64K,16位機的尋址能力是64K)時,
就不用分頁了,直接使用那兩個非分頁的數據。實際上,3E頁 3F頁是可見的,其實他們就是那2個非分頁的映
射。因此,使用非分頁FLASH,就不須設置PPAGE寄存器,直接使用邏輯地址即可。
這點我們可以從以下看出:
/* non-paged FLASHs */
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;
PLACEMENT
NON_BANKED, INTO ROM_C000/*, ROM_4000*/;
很直觀地看出,把這兩個可以直接使用邏輯地址的頁面設爲NON_BANKED, 那麼中斷函數放在NON_BANKED裏
,就可以把函數放在64K的尋址程序段中。這麼一來,進中斷就方便多了,效率也高很多。