C8051 F12X中多bank的分割槽跳轉處理

2021-06-20 21:33:34 字數 1353 閱讀 1740

在8051核微控制器龐大的家族中,c8051f系列作為其中的後起之秀,是目前功能最全、速度最快的8051衍生微控制器之一,正得到越來越廣泛的應用。它整合了嵌入式系統的許多先進技術,有豐富的模擬和數字資源.是乙個完全意義上的soc產品。

c805ifl2x作為該系列中的高階部分,具有最快100mips的峰值速度,整合了最多的片上資源。其128 kb的片上flash和8 kb的片上ram足以滿足絕大多數應用的需求。使用c8051f12x,只需外加為數不多的驅動和介面,就可構成較大型的完整系統。只是其中128 kb的flash儲存器不可避免地要處理bank分割槽問題。

幸運的是keil c51開發環境對c8051f系列有良好的支援,包括一般的跨bank分割槽的程式跳轉和呼叫。作為資料儲存器使用時,flash的分割槽讀寫完全是程式設計者要考慮的事情,與開發環境無關。本文只針對特殊的強制轉移和μc/os—ii在多bank分割槽中的移植問題展開討論。

1 c8051f12x在keil c51中的多bank分割槽轉移機制;就是其他三個巨集

它將插入到?b_switchn**中,用來切換新的bank和恢復到原來的bank。

所有4組?b_bankn和?b_swltchn**也都是用巨集實現的,對應4個bank處理。它們匯集在?bank?switch**段中,整個bank切換及恢復機制非常巧妙,可以實現任意bank之間函式的相互呼叫及巢狀。下面以bank3區中的main函式呼叫bankl區的delay_noos()延時函式為例說明該機制。

void main(void)

else{ //bankl和common

*stk++=0xll; //psbank

*stk++=currentbankl();

)其中,bank0用任何的psbank值均沒有問題,所以簡化了psbank取值0x00的情況。

函式int8u currentbankl(void),int8u current-bank2(void)和int8u currentbank3(void)是用組合語言實現的,返回值通過r7傳遞,目的是獲得該任務所在分組對應切換**段(?switchn)的低8位位址。不用c語言編寫的原因同樣是?b_switch&n不被c支援。

currentbankl(void)**如下,其他兩個類同。

rseg?pr?currentbankl?os_cpu_a

currentbankl:

mov dptr,#?b_switchl

mov r7.dpl

ret結 語

本文介紹了keil c51實現大於64 kb程式的bank分組**切換機制的原理,提出了沒有作業系統情況下非正常轉移時bank的處理方法以及μc/os—ii作業系統在多bank分割槽程式移植中應採取的措施,在開發例項中均得到了很好的應用

C8051F環境搭建

usb偵錯程式 u ec6 支援jtag模式 c2模式 jtag介面定義 適用型號c8051f00x c8051f01x c8051f02x c8051f04x c8051f06x c8051f12x c8051f2xx c2介面定義 適用型號c8051f3xx c8051f41x c8051f5x...

C8051F 30x微控制器低成本射頻讀卡器方案

c8051f 30x微控制器低成本射頻讀卡器方案 2009 02 26 09 56 48 edmchina 該方案採用超低功耗 soc型微控制器 c8051f30x 流水線指令結構,70 指令執行時間為乙個或兩個系統時鐘週期,速度可達 25mips 靈活的時鐘源 3v電壓供電,埠 i o均可耐壓 5...

C8051F020外部儲存器介面

這幾天做了做乙太網控制器的實驗,對 cp2200 的控制涉及到一些 c8051f020 外部資料儲存器介面的訪問的內容,在這裡總結一下。首先看一下 c8051f020 的原理框圖 此圖 於晶元手冊,借來用一下。從這張圖可以清楚的看到晶元儲存器的分布和儲存器介面的分布。從紅色部分可以看出位址匯流排 資...