音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

一種基于8051核SoC引導(dǎo)程序的設(shè)計(jì)與實(shí)現(xiàn)

出處:微計(jì)算機(jī)信息 發(fā)布于:2009-07-20 17:03:45

  摘要:引導(dǎo)程序的開發(fā)是系統(tǒng)芯片設(shè)計(jì)的重要組成部分。針對基于8051核的某控制系統(tǒng)芯片的具體要求,提出了一種系統(tǒng)芯片引導(dǎo)程序的設(shè)計(jì)策略。該策略思路是:當(dāng)系統(tǒng)上電復(fù)位后,開始執(zhí)行固化在系統(tǒng)芯片中的引導(dǎo)程序,并加載存儲于片外串行接口Flash的用戶程序到片內(nèi)SRAM中;加載完成后,程序無條件跳到SRAM中執(zhí)行用戶程序。在分析該系統(tǒng)芯片組成的基礎(chǔ)上,重點(diǎn)闡述了引導(dǎo)程序開發(fā)面臨的問題、解決的思路、引導(dǎo)程序的具體實(shí)現(xiàn)及開發(fā)編譯環(huán)境的配置。該方案對其它系統(tǒng)芯片引導(dǎo)程序的設(shè)計(jì)具有一定的參考價值。

  1 引言

  隨著IC設(shè)計(jì)與制造技術(shù)的發(fā)展,芯片的設(shè)計(jì)規(guī)模越來越大,SoC已經(jīng)成為主流的設(shè)計(jì)。軟硬件協(xié)同工作是SoC的一個重要特征[2]。在SoC設(shè)計(jì)軟件中,引導(dǎo)程序又是重要組成部分。引導(dǎo)程序是系統(tǒng)加電后運(yùn)行的段軟件代碼。由于SoC的系統(tǒng)資源有限,為了節(jié)省成本,引導(dǎo)程序往往固化在片內(nèi)ROM中。SoC引導(dǎo)程序的設(shè)計(jì)是SoC設(shè)計(jì)過程的難點(diǎn)之一,SoC的用戶程序能否正確加載和其運(yùn)行環(huán)境能否正確構(gòu)建要取決于引導(dǎo)程序能否正確的工作。

  本文結(jié)合基于8051核的某控制SoC的硬件構(gòu)架,提出了一種系統(tǒng)芯片引導(dǎo)程序的設(shè)計(jì)策略,闡述了設(shè)計(jì)時應(yīng)考慮的因素和解決的思路,給出了具體的設(shè)計(jì)實(shí)現(xiàn)和仿真結(jié)果。

  2 系統(tǒng)組成

  某控制SoC 采用8 位8051 核為。該8051 核指令和MCS-51 兼容、且提供了指令地址空間可擦寫功能。8051 核具有三種地址空間:XDATA 地址空間、IDATA 地址空間、SFR 地址空間,并對應(yīng)三條總線。SoC 硬件結(jié)構(gòu)如圖1 所示,包括用戶專用的IP 模塊、存儲器模塊、通用接口模塊、AD 及運(yùn)放等;其中片內(nèi)ROM 為1K 字節(jié),程序和數(shù)據(jù)SRAM 為8 KB(XDATA地址空間),ROM 和SRAM 共同占用8051 CPU 的連續(xù)地址空間,片內(nèi)數(shù)據(jù)SRAM 為256 B(IDATA地址空間)。

  SPI 模塊與片外串行Flash 基于SPI 協(xié)議進(jìn)行通信。SPI 模塊主要有三個寄存器:控制寄存器(SPCON),狀態(tài)寄存器(SPSTA),數(shù)據(jù)寄存器(SPDAT)。圖2 是SPI 模塊與片外Flash的接口示意圖,其中FLASH_SI 為串行數(shù)據(jù)輸入、FLASH_SDOUT 為串行數(shù)據(jù)輸出、FLASH_SCLK為串行時鐘,F(xiàn)LASH_CS 為片選(低有效)。

  3 存在的問題

  SoC 的加載過程如下:1)上電后,時鐘管理模塊產(chǎn)生片內(nèi)需要的時鐘和復(fù)位信號;2)復(fù)位后,CPU 執(zhí)行ROM 中的bootloader 引導(dǎo)程序,通過SPI 口將外部Flash 中的用戶程序加載到片內(nèi)8KB SRAM 中;3)加載完成后,程序指針無條件跳轉(zhuǎn)到片內(nèi)8 KBSRAM 起始地址處。

  對于整個SoC 來說,里面的代碼包括兩個部分:引導(dǎo)程序(采用ROM 設(shè)計(jì))、用戶程序(采用SRAM 設(shè)計(jì))。SoC 的引導(dǎo)程序基本設(shè)計(jì)原則是在滿足系統(tǒng)要求的前提下,用戶在后續(xù)開發(fā)過程之中盡量不受引導(dǎo)程序的影響。引導(dǎo)程序主要的功能是進(jìn)行用戶程序加載、部分硬件初始化。引導(dǎo)程序一旦設(shè)計(jì)好就無法修改,用戶程序是結(jié)合SoC 應(yīng)用環(huán)境而隨時改變的。

  引導(dǎo)程序和用戶程序都是針對8051 核而言的。在一般情況下,所有的代碼是同一個main程序下的不同模塊,二者之間有著不可分割的聯(lián)系。引導(dǎo)程序是確定的,用戶程序是不確定的,因此每次編譯,編譯器都會對代碼重新定位、變量重新分配、堆棧重新設(shè)置、中斷程序重新定位。另外,系統(tǒng)芯片的復(fù)位既可以采用外部進(jìn)行冷復(fù)位,也可以采用內(nèi)部看門狗(WATCHDOG)進(jìn)行熱復(fù)位,二者為“或”的關(guān)系。SoC 應(yīng)用系統(tǒng)要求Watchdog 復(fù)位時避免重新加載,因此在引導(dǎo)程序必須能夠記憶系統(tǒng)的冷熱復(fù)位情況。

  4 引導(dǎo)程序設(shè)計(jì)

  為了解決ROM 代碼的確定性和將來用戶程序不確定性的矛盾,的方法是割斷引導(dǎo)程序和用戶程序之間的聯(lián)系。在該控制SoC 設(shè)計(jì)中,引導(dǎo)程序的設(shè)計(jì)思路是:

  1)將引導(dǎo)程序設(shè)計(jì)為一個獨(dú)立的主程序,但這個獨(dú)立的主程序的一條語句不是平常的程序返回語句“RET”,而是一條跳轉(zhuǎn)語句,從而在完成加載后將程序跳轉(zhuǎn)到用戶程序的首地址。用戶程序的首地址定義為SRAM 的首地址。

  2)在引導(dǎo)程序中建立中斷映射表,用戶開發(fā)程序時需要將中斷入口地址重新映射,而不是采用通常8051 核的中斷入口地址。SoC 用戶程序的中斷地址由8051 核中斷地址加上ROM的地址偏移(0x400h)。

  3)為了避免系統(tǒng)芯片熱復(fù)位時用戶程序重新加載,在片內(nèi)256 B SRAM 中設(shè)置了兩個加載完畢的標(biāo)志位。引導(dǎo)程序開始加載用戶程序前,首先對加載標(biāo)志位進(jìn)行判斷,芯片是冷復(fù)位時則進(jìn)行加載,為熱復(fù)位時則直接跳到用戶空間執(zhí)行用戶程序。當(dāng)需要加載時,則進(jìn)一步讀取Flash 中程序大小的數(shù)據(jù),然后加載相應(yīng)大小的用戶程序。

  4)對用戶程序進(jìn)行編譯、連接后,生成二進(jìn)制代碼或HEX 文件,進(jìn)一步統(tǒng)計(jì)出用戶程序的大小。片外Flash 中存儲的是用戶程序和其它數(shù)據(jù),我們定義Flash 第零頁的第零及個數(shù)據(jù)存放用戶程序大小的數(shù)值,其中高位放在第零地址。在隨后的地址內(nèi)按順序存放用戶程序數(shù)據(jù)。

  因此,引導(dǎo)程序須完成的主要功能如下:

  1)建立中斷向量表:SoC 在加電復(fù)位后,程序0 地址開始執(zhí)行。當(dāng)中斷發(fā)生時,必須無條件跳轉(zhuǎn)到用戶中斷程序空間。

  2)初始化部分硬件環(huán)境并加載用戶程序:SoC 啟動后要從片外Flash 加載程序,因此必須對SPI 模塊進(jìn)行初始化;初始化結(jié)束后按照約定的協(xié)議格式進(jìn)行程序加載。

  3)記憶冷熱復(fù)位:判斷冷熱復(fù)位;當(dāng)熱復(fù)位時不進(jìn)行程序加載。

  Bootloader 的主要代碼實(shí)現(xiàn)如下(采用SDCC 編譯器進(jìn)行編譯):

  /*中斷向量表,用于處理異常情況。在異常向量處放置無條件跳轉(zhuǎn)指令,使程序進(jìn)入相

  應(yīng)的異常處理過程*/

  void isr0 (void) interrupt 0 using 0 _naked

  {_asm

  LJMP 0x0403

  _endasm;}

  void isr1 (void) interrupt 1 using 0 _naked

  { _asm

  LJMP 0x040B

  _endasm;}

  ……

  void main(void)

  {xdata uchar *data xcode;

  ……

  /*定義冷熱復(fù)位標(biāo)志位,并固定其地址空間*/

  idata at 0xff unsigned char reset_flag;

  idata at 0xfe unsigned char reset_flag2;

  /*初始化SPI 模塊*/

  SPCON=0x72;

  /*冷熱復(fù)位判斷*/

  if((reset_flag!=0x83)&&(reset_flag2!=0xeb))

  { /*讀取用戶程序大小的數(shù)據(jù)*/

  ……

  /*程序加載*/

  for(i = 0x400;i<= size.psize;i=i+1 )

  { SPDAT = 0;

  while((SPSTA&0x80)==0);

  xcode = (xdata uchar *data)(i);

  *xcode = SPDAT; }

  …… }

  /*置加載成功標(biāo)志*/

  reset_flag = 0x83 ;

  reset_flag2 = 0xeb

  /*跳轉(zhuǎn)到用戶程序空間*/

  _asm

  LJMP 0x0400

  _endasm; }

  圖3 是引導(dǎo)程序的軟硬件協(xié)同仿真波形(采用Modelsim 軟件)。其中用戶程序功能是:先通過UART 發(fā)送程序執(zhí)行標(biāo)志(“wdt start”),接著使能看門狗(啟動熱復(fù)位),然后等待系統(tǒng)重新啟動。仿真波形顯示,用戶程序被系統(tǒng)上電復(fù)位后,引導(dǎo)程序首先將執(zhí)行對片外用戶程序的加載(片選信號FLASH_CS 將被拉低,F(xiàn)LASH_SI 引腳出現(xiàn)串行數(shù)據(jù),F(xiàn)LASH_SCLK出現(xiàn)時鐘);接著開始執(zhí)行用戶程序,并通過UART 口輸出了程序執(zhí)行標(biāo)志(“wdt start”),并使能了WATCHDOG(WDT_ACTIVE 有效);然后芯片被WATCHDOG 進(jìn)行了熱復(fù)位(WDT_RST 出現(xiàn)有效復(fù)位脈沖),但熱復(fù)位過程并沒有啟動用戶程序加載過程。仿真結(jié)果表明,引導(dǎo)程序能夠從片外串口Flash 中進(jìn)行程序加載,并能夠記憶冷熱復(fù)位。

  5 開發(fā)環(huán)境設(shè)置

  為了使得用戶程序能否正確的運(yùn)行,用戶程序編譯時必須在開發(fā)環(huán)境上做一些設(shè)置。主要是三個方面:

  1)設(shè)置程序和數(shù)據(jù)存儲空間:用戶代碼的條指令地址為0x400。程序和數(shù)據(jù)存儲空間公用一個物理空間(地址范圍:0x400-0x23FF),用戶程序需要將其分成兩個連續(xù)的空間,低地址空間為程序存儲器,高地址空間為數(shù)據(jù)存儲器;但兩者空間范圍不能夠交叉。

  2)中斷映射:控制SoC 芯片的中斷空間需要重新進(jìn)行映射。在KEIL C51 可設(shè)置如圖4所示。

  3)內(nèi)部數(shù)據(jù)SRAM 大小空間設(shè)定:內(nèi)部數(shù)據(jù)SRAM(IDATA 地址空間)為256 個,引導(dǎo)程序已經(jīng)使用了0xFE、0xFF 兩個地址空間,所以留給用戶程序使用空間的大小為254 個。

  6 結(jié)束語

  SoC的引導(dǎo)程序是與具體的硬件環(huán)境緊密聯(lián)系在一起,針對某個SoC芯片編寫引導(dǎo)程序,必須了解該SoC結(jié)構(gòu)、片上資源及用戶的具體要求。本文給出的引導(dǎo)代碼已經(jīng)在基于8051核的某控制SoC得到具體實(shí)現(xiàn),系統(tǒng)運(yùn)行穩(wěn)定,完全實(shí)現(xiàn)了設(shè)計(jì)目的。

  本文創(chuàng)新點(diǎn):提出一種基于8051 核SoC 的引導(dǎo)程序的設(shè)計(jì)方法,該方法能夠從片外串行Flash 加載程序,并解決了中斷向量重新映射、系統(tǒng)冷熱復(fù)位等問題。該方法對其它基于8051 核設(shè)計(jì)的SoC 中具有一定的參考價值。


  
關(guān)鍵詞:一種基于8051核SoC引導(dǎo)程序的設(shè)計(jì)與實(shí)現(xiàn)8051核SoC

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

SGM7228 SGM8051 SGM8045 圣邦微SGMICRO原裝正品
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!