浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » 單 片 機(jī)

C8051F12X中多bank的分區(qū)跳轉(zhuǎn)處理

發(fā)布時(shí)間:2007/4/23 0:00:00 訪問次數(shù):563

在8051核單片機(jī)龐大的家族中,C8051F系列作為其中的后起之秀,是目前功能最全、速度最快的8051衍生單片機(jī)之一,正得到越來越廣泛的應(yīng)用。它集成了嵌入式系統(tǒng)的許多先進(jìn)技術(shù),有豐富的模擬和數(shù)字資源.是一個(gè)完全意義上的SoC產(chǎn)品。

C805IFl2X作為該系列中的高端部分,具有最快100MIPS的峰值速度,集成了最多的片上資源。其128 KB的片上Flash和8 KB的片上RAM足以滿足絕大多數(shù)應(yīng)用的需求。使用C8051F12X,只需外加為數(shù)不多的驅(qū)動(dòng)和接口,就可構(gòu)成較大型的完整系統(tǒng)。只是其中128 KB的Flash存儲(chǔ)器不可避免地要處理bank分區(qū)問題。

幸運(yùn)的是Keil C51開發(fā)環(huán)境對(duì)C8051F系列有良好的支持,包括一般的跨bank分區(qū)的程序跳轉(zhuǎn)和調(diào)用。作為數(shù)據(jù)存儲(chǔ)器使用時(shí),F(xiàn)lash的分區(qū)讀寫完全是編程者要考慮的事情,與開發(fā)環(huán)境無關(guān)。本文只針對(duì)特殊的強(qiáng)制轉(zhuǎn)移和μC/OS—II在多bank分區(qū)中的移植問題展開討論。


1 C8051F12X在Keil C51中的多bank分區(qū)轉(zhuǎn)移機(jī)制
Keil C51的連接定位器支持分組連接,允許生成代碼長(zhǎng)度大于64 KB的8051目標(biāo)程序_1_。一般的8051系統(tǒng)只提供16根地址線,需要附加地址線來實(shí)現(xiàn)代碼分組切換,而編譯器產(chǎn)生bank切換代碼時(shí)受到配置文件L51_BANK.A51的支持,所以用戶必須根據(jù)自己的硬件結(jié)構(gòu)來修改這個(gè)配置文件。

C8051F12X系列不用考慮硬件部分,也不存在地址線的擴(kuò)展問題,因?yàn)?28 KB的4個(gè)bank區(qū)全部都在CPU內(nèi)部,所以作為常規(guī)跨bank的跳轉(zhuǎn)和調(diào)用,不需要處理1.5l_BANK.A51配置文件。但在特殊情況下就必須考慮該問題,否則程序?qū)o法工作。下面以C8051F120為例先討論代碼的透明分組切換過程。

C805IFl20在Keil C51的項(xiàng)目配置中被劃分為4個(gè)bank,每個(gè)32 KB。公共bank地址從0~0x7fff,其余bank從0x8000h~0xffff。在對(duì)應(yīng)的配置文件L51_BANK.A51中,涉及到特殊功能寄存器PSBANK(SFR地址:0B1H)、SWITCHn宏、B_BANKn、?B_SWITCHn分組信息保存和切換代碼,以及?B_CURENTBANK變量。

PSBANK為C8051F120內(nèi)的特殊功能寄存器,128KB Flash的分bank訪問就是通過它來實(shí)現(xiàn)的。要想轉(zhuǎn)移到新的bank中去,必須賦予PSBANK正確的值,然后再轉(zhuǎn)向bank區(qū)內(nèi)地址即可。

SWITCHn宏共有4個(gè),分別是SwITCH0、SWlTCH1、SWITCH2和SWITCH3,對(duì)應(yīng)切換到4個(gè)bank中。其中SWITCH0對(duì)應(yīng)的語句為:
MOV PSBANK.#00h ;把00h用1Ih、22h和33h替換,

;就是其他三個(gè)宏

它將插入到?B_SWITCHn代碼中,用來切換新的bank和恢復(fù)到原來的bank。


所有4組?B_BANKn和?B_SWlTCHn代碼也都是用宏實(shí)現(xiàn)的,對(duì)應(yīng)4個(gè)bank處理。它們匯集在?BANK?SWITCH代碼段中,整個(gè)bank切換及恢復(fù)機(jī)制非常巧妙,可以實(shí)現(xiàn)任意bank之間函數(shù)的相互調(diào)用及嵌套。下面以bank3區(qū)中的main函數(shù)調(diào)用bankl區(qū)的Delay_noOS()延時(shí)函數(shù)為例說明該機(jī)制。
void main(void){
MCUInit(); //初始化CPU
Delay_n00s(10); //延時(shí)lO ms
Lcmlnition();
:
:
bank3中被調(diào)用的函數(shù)Delay_noOS(10)對(duì)應(yīng)的匯編語句為:
LCALL C:5049
公共段(即Common段,對(duì)應(yīng)bank0)中C:5049處的

匯編語句如下:
MOV dptr,#Delay_noOS
AJMP B_BANKl

這里的B_BANKl就是宏?B_BANK&N中N為1的例程,F(xiàn)在進(jìn)入問題的核心:全部的跨bank區(qū)程序切換及恢復(fù)過程依靠公共段中?BANK?SWITCH代碼段里的以下匯編代碼實(shí)現(xiàn),對(duì)應(yīng)的N為0、1、2和3。?BANK?SWlTCH SEGMENT CODE PAGE
;
?B_BANK&N:
PUSH ?B_CURRENTBANK (1)
MOV A,#HIGH?BANK?SWITCH (2)
PUSH ACC (3)
PUSH DPL (4)
PUSH DPH (5)
?B_SWITCH&N:
MOV ?B_CURRENTBANK,#LOW? B_SWITCH&N
(6)
SWlTCH&N (7)
RET (8)

Delay_noOS(10)函數(shù)的返回地址,即函數(shù)LcmIni-tion()的入口地址(也在bank3中),其高低位字節(jié)表示為ADDH和ADDL。程序進(jìn)入main()后的?B_CURRENTBANK變量初值是?B_SWITCH3的低8位,其意義稍后敘述。AJMP B_BANKl后程序執(zhí)行?B_BANKl和?B_SWITCHl的(1)~(8),執(zhí)行到(5)時(shí)的堆棧結(jié)構(gòu)如圖1所示。


繼續(xù)執(zhí)行?B_SWITCHl到(7)時(shí),PSBANK變?yōu)橹赶騜ankl,?B_CURRENTBANK變?yōu)?B_SWITCHl的低8位。執(zhí)行(8)后,從堆棧結(jié)構(gòu)可以看出,堆棧彈出①作為新的PC值,程序進(jìn)入Delay_noOS(10)函數(shù),延時(shí)功能完成后,函數(shù)最后一條RET指令開始返回。這是Keil C51處理bank機(jī)制的關(guān)鍵,此時(shí)的返回地址為堆棧中的②,此地址即?B_SWITCH&H代碼的入口,這里

在8051核單片機(jī)龐大的家族中,C8051F系列作為其中的后起之秀,是目前功能最全、速度最快的8051衍生單片機(jī)之一,正得到越來越廣泛的應(yīng)用。它集成了嵌入式系統(tǒng)的許多先進(jìn)技術(shù),有豐富的模擬和數(shù)字資源.是一個(gè)完全意義上的SoC產(chǎn)品。

C805IFl2X作為該系列中的高端部分,具有最快100MIPS的峰值速度,集成了最多的片上資源。其128 KB的片上Flash和8 KB的片上RAM足以滿足絕大多數(shù)應(yīng)用的需求。使用C8051F12X,只需外加為數(shù)不多的驅(qū)動(dòng)和接口,就可構(gòu)成較大型的完整系統(tǒng)。只是其中128 KB的Flash存儲(chǔ)器不可避免地要處理bank分區(qū)問題。

幸運(yùn)的是Keil C51開發(fā)環(huán)境對(duì)C8051F系列有良好的支持,包括一般的跨bank分區(qū)的程序跳轉(zhuǎn)和調(diào)用。作為數(shù)據(jù)存儲(chǔ)器使用時(shí),F(xiàn)lash的分區(qū)讀寫完全是編程者要考慮的事情,與開發(fā)環(huán)境無關(guān)。本文只針對(duì)特殊的強(qiáng)制轉(zhuǎn)移和μC/OS—II在多bank分區(qū)中的移植問題展開討論。


1 C8051F12X在Keil C51中的多bank分區(qū)轉(zhuǎn)移機(jī)制
Keil C51的連接定位器支持分組連接,允許生成代碼長(zhǎng)度大于64 KB的8051目標(biāo)程序_1_。一般的8051系統(tǒng)只提供16根地址線,需要附加地址線來實(shí)現(xiàn)代碼分組切換,而編譯器產(chǎn)生bank切換代碼時(shí)受到配置文件L51_BANK.A51的支持,所以用戶必須根據(jù)自己的硬件結(jié)構(gòu)來修改這個(gè)配置文件。

C8051F12X系列不用考慮硬件部分,也不存在地址線的擴(kuò)展問題,因?yàn)?28 KB的4個(gè)bank區(qū)全部都在CPU內(nèi)部,所以作為常規(guī)跨bank的跳轉(zhuǎn)和調(diào)用,不需要處理1.5l_BANK.A51配置文件。但在特殊情況下就必須考慮該問題,否則程序?qū)o法工作。下面以C8051F120為例先討論代碼的透明分組切換過程。

C805IFl20在Keil C51的項(xiàng)目配置中被劃分為4個(gè)bank,每個(gè)32 KB。公共bank地址從0~0x7fff,其余bank從0x8000h~0xffff。在對(duì)應(yīng)的配置文件L51_BANK.A51中,涉及到特殊功能寄存器PSBANK(SFR地址:0B1H)、SWITCHn宏、B_BANKn、?B_SWITCHn分組信息保存和切換代碼,以及?B_CURENTBANK變量。

PSBANK為C8051F120內(nèi)的特殊功能寄存器,128KB Flash的分bank訪問就是通過它來實(shí)現(xiàn)的。要想轉(zhuǎn)移到新的bank中去,必須賦予PSBANK正確的值,然后再轉(zhuǎn)向bank區(qū)內(nèi)地址即可。

SWITCHn宏共有4個(gè),分別是SwITCH0、SWlTCH1、SWITCH2和SWITCH3,對(duì)應(yīng)切換到4個(gè)bank中。其中SWITCH0對(duì)應(yīng)的語句為:
MOV PSBANK.#00h ;把00h用1Ih、22h和33h替換,

;就是其他三個(gè)宏

它將插入到?B_SWITCHn代碼中,用來切換新的bank和恢復(fù)到原來的bank。


所有4組?B_BANKn和?B_SWlTCHn代碼也都是用宏實(shí)現(xiàn)的,對(duì)應(yīng)4個(gè)bank處理。它們匯集在?BANK?SWITCH代碼段中,整個(gè)bank切換及恢復(fù)機(jī)制非常巧妙,可以實(shí)現(xiàn)任意bank之間函數(shù)的相互調(diào)用及嵌套。下面以bank3區(qū)中的main函數(shù)調(diào)用bankl區(qū)的Delay_noOS()延時(shí)函數(shù)為例說明該機(jī)制。
void main(void){
MCUInit(); //初始化CPU
Delay_n00s(10); //延時(shí)lO ms
Lcmlnition();
:
:
bank3中被調(diào)用的函數(shù)Delay_noOS(10)對(duì)應(yīng)的匯編語句為:
LCALL C:5049
公共段(即Common段,對(duì)應(yīng)bank0)中C:5049處的

匯編語句如下:
MOV dptr,#Delay_noOS
AJMP B_BANKl

這里的B_BANKl就是宏?B_BANK&N中N為1的例程,F(xiàn)在進(jìn)入問題的核心:全部的跨bank區(qū)程序切換及恢復(fù)過程依靠公共段中?BANK?SWITCH代碼段里的以下匯編代碼實(shí)現(xiàn),對(duì)應(yīng)的N為0、1、2和3。?BANK?SWlTCH SEGMENT CODE PAGE
;
?B_BANK&N:
PUSH ?B_CURRENTBANK (1)
MOV A,#HIGH?BANK?SWITCH (2)
PUSH ACC (3)
PUSH DPL (4)
PUSH DPH (5)
?B_SWITCH&N:
MOV ?B_CURRENTBANK,#LOW? B_SWITCH&N
(6)
SWlTCH&N (7)
RET (8)

Delay_noOS(10)函數(shù)的返回地址,即函數(shù)LcmIni-tion()的入口地址(也在bank3中),其高低位字節(jié)表示為ADDH和ADDL。程序進(jìn)入main()后的?B_CURRENTBANK變量初值是?B_SWITCH3的低8位,其意義稍后敘述。AJMP B_BANKl后程序執(zhí)行?B_BANKl和?B_SWITCHl的(1)~(8),執(zhí)行到(5)時(shí)的堆棧結(jié)構(gòu)如圖1所示。


繼續(xù)執(zhí)行?B_SWITCHl到(7)時(shí),PSBANK變?yōu)橹赶騜ankl,?B_CURRENTBANK變?yōu)?B_SWITCHl的低8位。執(zhí)行(8)后,從堆棧結(jié)構(gòu)可以看出,堆棧彈出①作為新的PC值,程序進(jìn)入Delay_noOS(10)函數(shù),延時(shí)功能完成后,函數(shù)最后一條RET指令開始返回。這是Keil C51處理bank機(jī)制的關(guān)鍵,此時(shí)的返回地址為堆棧中的②,此地址即?B_SWITCH&H代碼的入口,這里

相關(guān)IC型號(hào)

熱門點(diǎn)擊

 

推薦技術(shù)資料

硬盤式MP3播放器終級(jí)改
    一次偶然的機(jī)會(huì)我結(jié)識(shí)了NE0 2511,那是一個(gè)遠(yuǎn)方的... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號(hào)-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!