• <sub id="uhzwv"></sub>

    <sub id="uhzwv"></sub>
  • <dd id="uhzwv"></dd><wbr id="uhzwv"></wbr>
    <dd id="uhzwv"><address id="uhzwv"></address></dd>
    從軟件角度看晶振的作用及MCU工作流程

    從軟件角度看晶振的作用及MCU工作流程

    MCU整體工作流程:上電—晶振起振(提供時鐘信號)—啟動代碼—用戶程序。

    對于應用開發來說,工作重點是在應用程序編寫。特別是高級MCU的出現,如ARM系列的STM32、LPC等32位MCU,以及芯片原廠的完善底層代碼,啟動代碼已經固化在芯片內部flash(稱為BootLoader),或者已經提供完整的匯編啟動源碼。但仍需要了解MCU啟動過程的基本原理,如針對實時系統(RTOS),有時需要修改啟動匯編代碼,其目的是規避因軟件程序干擾造成產品開機系統癱瘓等問題,借此提前排除硬件,如錯誤判定晶振不良。

    MCU上電(復位)時,從固定的地址啟動,一般是地址0x00000000,如ARM7;個別特殊的如STM32默認啟動地址為0x8000000(flash區啟動)。啟動過程主要完成兩部分工作,一個是硬件執行環境,如中斷向量表、寄存器、看門狗等,另一個是軟件環境,如C庫環境、ZI(未初始化的內存變量)等。

    一、硬件環境工作

    1.初始時鐘

    初始化內核時鐘,由晶振提供的主時鐘頻信號,各個外設的晶振時鐘信號。

    2.關閉看門狗

    看門狗是用來監控應用程序的異常跑飛而復位CPU,在初始化階段,由于沒有“喂狗”這一動作,有可能導致CPU不斷復位,因此,首先會關閉看門狗,初始化完,再開啟。

    3.建立中斷向量表

    中斷向量表,中斷源的識別標志,可用來形成相應的中斷服務程序的入口地址,或者中斷服務程序入口地址的偏移量和段基值。CPU利用中斷向量表轉入中斷服務程序處理相關事務。

    4.初始化堆棧寄存器

    堆棧的作用一個就是數據緩存,如函數調用或者中斷發送時,將當前執行地址壓棧,調用完成再返回此處執行程序。另一個作用就是保存參數,如臨時變量。因此,在啟動階段需初始化堆棧寄存器、堆棧的大小、起始地址等。

    5.內存初始化

    選擇內部或者外部RAM。

    二、軟件環境工作

    1.把RO,RW從它們的加載域復制到它們的運行域中去。

    2.初始化(清零)ZI域。

    3.初始化堆棧指針

    4.初始化C庫環境

    包括C庫所需的內存空間、程序執行所需資源、C庫初始化。

    三、CortexM3啟動

    CortexM3有3種啟動方式

    1、BOOT1=1BOOT0=1,中斷向量表定位于SRAM區,即起始地址為0x2000000,同時復位后PC指針位于0x2000000處。

    2、BOOT1=xBOOT0=0,中斷向量表定位于FLASH區,即起始地址為0x8000000,同時復位后PC指針位于0x8000000處。

    3、BOOT1=0BOOT0=1,中斷向量表定位于內置Bootloader區,此時可通過串口下載程序的二進制文件到flash區。

    而Cortex-M3內核規定,起始地址必須存放堆頂指針,而第二個地址則必須存放復位中斷入口向量地址,這樣在Cortex-M3內核復位后,會自動從起始地址的下一個32位空間取出復位中斷入口向量,跳轉執行復位中斷服務程序。對比ARM7/ARM9內核,Cortex-M3內核則是固定了中斷向量表的位置而起始地址是可變化的。即是對于flash啟動來說,0x8000000地址存放的是棧頂地址__initial_sp,0x8000004地址存放的是復位中斷向量Reset_Handler入口地址(STM32使用32位總線,存儲空間為4字節對齊);在編寫多段程序時,如編寫一個BootLoader,從BootLoader到應用程序段的相互跳轉。

     

    了解更多晶振相關資訊,請點擊晶諾威官網以下鏈接:

    0755-23068369
    一分钟快3网址 一分快3 uu快3 网盟彩神IV 百姓购彩大厅在线购彩 彩神v在线登录