日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
C8051F12X中多bank的分區(qū)跳轉處理
C8051F12X中多bank的分區(qū)跳轉處理
 更新時間:2008-8-19 13:17:13  點擊數(shù):90
【字體: 字體顏色
  在8051核單片機龐大的家族中,C8051F系列作為其中的后起之秀,是目前功能最全、速度最快的8051衍生單片機之一,正得到越來越廣泛的應用。它集成了嵌入式系統(tǒng)的許多先進技術,有豐富的模擬和數(shù)字資源.是一個完全意義上的SoC產品。

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

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

1 C8051F12X在Keil C51中的多bank分區(qū)轉移機制

  Keil C51的連接定位器支持分組連接,允許生成代碼長度大于64 KB的8051目標程序_1_。一般的8051系統(tǒng)只提供16根地址線,需要附加地址線來實現(xiàn)代碼分組切換,而編譯器產生bank切換代碼時受到配置文件L51_BANK.A51的支持,所以用戶必須根據(jù)自己的硬件結構來修改這個配置文件。

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

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

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

  SWITCHn宏共有4個,分別是SwITCH0、SWlTCH1、SWITCH2和SWITCH3,對應切換到4個bank中。其中SWITCH0對應的語句為:

  MOV PSBANK.#00h ;把00h用1Ih、22h和33h替換,就是其他三個宏

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

  所有4組B_BANKn和B_SWlTCHn代碼也都是用宏實現(xiàn)的,對應4個bank處理。它們匯集在BANK SWITCH代碼段中,整個bank切換及恢復機制非常巧妙,可以實現(xiàn)任意bank之間函數(shù)的相互調用及嵌套。下面以bank3區(qū)中的main函數(shù)調用bankl區(qū)的Delay_noOS()延時函數(shù)為例說明該機制。

  void main(void){
MCUInit(); //初始化CPU
Delay_n00s(10); //延時lO ms
Lcmlnition();

  bank3中被調用的函數(shù)Delay_noOS(10)對應的匯編語句為:

  LCALL C:5049

  公共段(即Common段,對應bank0)中C:5049處的匯編語句如下:

  MOV dptr,#Delay_noOS

  AJMP B_BANKl

  這里的B_BANKl就是宏B_BANK&N中N為1的例程,F(xiàn)在進入問題的核心:全部的跨bank區(qū)程序切換及恢復過程依靠公共段中BANK SWITCH代碼段里的以下匯編代碼實現(xiàn),對應的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。程序進入main()后的B_CURRENTBANK變量初值是B_SWITCH3的低8位,其意義稍后敘述。AJMP B_BANKl后程序執(zhí)行?B_BANKl和?B_SWITCHl的(1)~(8),執(zhí)行到(5)時的堆棧結構如圖1所示。

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

  因為所有B_SWITCH&N的高8位地址,即BANK SWITCH代碼段的高8位都一樣,由語句(2)中的操作符HIGH BANK SWITCH確定;低8位保存在已經壓棧的B_CURRENTBANK變量中,此時堆棧中的?B_CURRENTBANK壓棧值是B_SWITCH3的低8位,這樣②的地址就是B_SWITCH3。

  程序繼續(xù)
[1] [2] [3]  下一頁
  • 上一篇: 從LCD電極讀數(shù)的單片機接口技術
  • 下一篇: 采用Topswitch系列芯片的單片開關電源效率研究
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經營許可證:浙B2-20080178-1