<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MCU復(fù)位和程序啟動(dòng)那些事

          共 2302字,需瀏覽 5分鐘

           ·

          2022-05-28 05:26

          大家好,這篇文章轉(zhuǎn)自電源漫談,文章從專業(yè)的角度說(shuō)明了MCU復(fù)位經(jīng)過(guò)的過(guò)程,對(duì)大家學(xué)習(xí)很有幫助。




          MCU通常會(huì)在工作之前,先經(jīng)歷復(fù)位和啟動(dòng)的一個(gè)過(guò)程,在用戶使用過(guò)程中往往在這個(gè)階段的工作不是那么的清楚,這里我們就這一話題進(jìn)行一個(gè)討論。


          .MCU的復(fù)位問題

          1 16bit MCUdsPIC33復(fù)位源的種類


          一般來(lái)說(shuō),16MCU包括dsPIC33的復(fù)位源主要包含以上7種,他們都可以對(duì)器件產(chǎn)生復(fù)位的作用,但是細(xì)節(jié)有所不同。

          2 復(fù)位系統(tǒng)框圖


          從復(fù)位系統(tǒng)框圖上看,BORPOR二者是和VDD電源有關(guān)的兩種,看門狗和外部復(fù)位引腳復(fù)位也是比較常見的復(fù)位類型。

          3 復(fù)位寄存器RCON


          復(fù)位寄存器RCON包含了復(fù)位相關(guān)的狀態(tài),當(dāng)發(fā)生復(fù)位時(shí)RCON這個(gè)寄存器就會(huì)更新,以便表征是哪一個(gè)復(fù)位源發(fā)生了復(fù)位。除此之外,這個(gè)寄存器也包含了WDT及低功耗的特性的狀態(tài)信息,所以用戶可以查看這個(gè)寄存器去判斷復(fù)位原因。

          4 復(fù)位寄存器內(nèi)容1

          5 復(fù)位寄存器的內(nèi)容2


          從圖示注釋中,我們可以看到用戶在軟件中可以對(duì)這些RCON寄存器位置位1,但是這不會(huì)導(dǎo)致器件復(fù)位。


          .復(fù)位和中斷的關(guān)系

          6 默認(rèn)中斷的復(fù)位


          XC16編譯器中,當(dāng)用戶沒有提供相應(yīng)中斷源的中斷服務(wù)程序時(shí),會(huì)在中斷向量位置放置一個(gè)軟件復(fù)位中斷指令SWR,這時(shí)如果有一個(gè)意外中斷發(fā)生時(shí),便觸發(fā)了軟件復(fù)位使得器件復(fù)位。


          7 默認(rèn)中斷軟件復(fù)位指令說(shuō)明


          規(guī)格書中也有說(shuō)明,任何未實(shí)施的或者未使用的中斷向量位置都會(huì)放一個(gè)默認(rèn)中斷處理程序,它包含一條RESET指令。


          三.復(fù)位和時(shí)鐘的關(guān)系

          當(dāng)器件復(fù)位時(shí),其時(shí)鐘狀態(tài)是什么?一般來(lái)說(shuō)它是由芯片配置位決定的。

          8 配置位中的初始復(fù)位時(shí)鐘選擇


          9 時(shí)鐘Clock Switch模式


          當(dāng)器件支持Clock Switch模式時(shí),初始時(shí)鐘由OSCCON寄存器中的COSC決定,切換后的時(shí)鐘由NOSC決定。

          9 雙速啟動(dòng)的模式


          一般來(lái)說(shuō),從進(jìn)入復(fù)位到執(zhí)行第一條指令之間的時(shí)間,取決于所使用的振蕩器,當(dāng)使用PrimarySecondary振蕩器時(shí),由于需要和外部晶振同步,所以需要在RESET時(shí)等待時(shí)間較長(zhǎng)才能穩(wěn)定。如果使用內(nèi)部振蕩器的話,就非常快就可以穩(wěn)定,基于配置位對(duì)時(shí)鐘的選擇,在復(fù)位時(shí)會(huì)等待一定的時(shí)間,最后在出復(fù)位狀態(tài)前達(dá)到時(shí)鐘穩(wěn)定。


          雙速啟動(dòng)的含義就是說(shuō),采用FRC振蕩器快速啟動(dòng),然后當(dāng)Primary振蕩器達(dá)到穩(wěn)定后再切換為它,這樣可以避免等待外部晶振的同步時(shí)間。


          四.復(fù)位和寄存器及變量狀態(tài)的關(guān)系


          10 復(fù)位時(shí)的寄存器狀態(tài)


          外設(shè)的特殊功能寄存器SFR一般存在RAM中,在復(fù)位時(shí)可能會(huì)被改變,在規(guī)格書中會(huì)規(guī)定各個(gè)寄存器SFR在復(fù)位時(shí)的值。當(dāng)這個(gè)值是u時(shí),就是說(shuō)它在復(fù)位時(shí)是不改變,x就是說(shuō)它在復(fù)位時(shí)的值是不確定的。當(dāng)然,有一些寄存器,在PORBOR時(shí)會(huì)有不同的值,這個(gè)需要注意一下。


          值得注意的各種復(fù)位源中,只有POR會(huì)改變data Memory的內(nèi)容,而其它則不會(huì)改變。

          ?

          五.程序啟動(dòng)代碼的執(zhí)行

          ?

          一般來(lái)說(shuō),C編譯器會(huì)在執(zhí)行用戶指令前,調(diào)用一段啟動(dòng)代碼,這段啟動(dòng)代碼會(huì)在結(jié)束復(fù)位時(shí)執(zhí)行,這段啟動(dòng)代碼的目的就是為運(yùn)行用戶C程序而做的系統(tǒng)準(zhǔn)備。典型的啟動(dòng)代碼由編譯器去提供,他們將改變?cè)趶?fù)位后的memory內(nèi)容。


          另外,在執(zhí)行啟動(dòng)代碼時(shí),XC16編譯器會(huì)提供一些前導(dǎo)選項(xiàng),比如Persistent,允許用戶在執(zhí)行啟動(dòng)代碼時(shí)不改變某些變量。也有一些編譯器會(huì)提供更直接的選項(xiàng),比如在啟動(dòng)代碼時(shí),不初始化變量,所以,需要注意編譯器的處理方式。


          11 程序執(zhí)行過(guò)程


          編譯器會(huì)把啟動(dòng)代碼放在0x200flash地址位置,用戶main程序會(huì)放在啟動(dòng)代碼后,在系統(tǒng)復(fù)位時(shí),程序PC會(huì)被芯片硬件強(qiáng)制為0,則程序從0x00開始執(zhí)行,在0x00處會(huì)有一個(gè)GOTO指令讓代碼執(zhí)行到0x200部分的啟動(dòng)代碼,這樣就可以跨過(guò)中斷向量的地址范圍。


          12 程序執(zhí)行過(guò)程說(shuō)明


          12中清楚的說(shuō)明了代碼的執(zhí)行過(guò)程,main函數(shù)執(zhí)行之前會(huì)有執(zhí)行Start-up代碼的過(guò)程。


          .其它復(fù)位源的討論


          13 Trap沖突復(fù)位說(shuō)明

          當(dāng)系統(tǒng)同時(shí)發(fā)生hardTrapSoft Trap時(shí),則會(huì)發(fā)生Trap沖突復(fù)位,HardTrap主要是優(yōu)先級(jí)在Level13-15之間的地址錯(cuò)誤Trap或者振蕩器錯(cuò)誤Trap等。

          14 Soft Trap的類別說(shuō)明


          諸如DMAC錯(cuò)誤,或者數(shù)學(xué)錯(cuò)誤,或者堆棧錯(cuò)誤等之類的soft Trap發(fā)生時(shí),由于他們的優(yōu)先級(jí)會(huì)比Hard Trap更高,因此會(huì)觸發(fā)Trap沖突復(fù)位。

          15 非法指令執(zhí)行復(fù)位


          當(dāng)程序嘗試去執(zhí)行非法指令時(shí),則會(huì)觸發(fā)IOPUWR位標(biāo)志位置位,表示嘗試執(zhí)行非法指令。


          比如,用戶在Flash中保存常數(shù)值,那么會(huì)僅僅用低16位的內(nèi)容去保存數(shù)據(jù),高8位設(shè)置為0x3F,這就是一個(gè)非法指令的示例,這樣就可以避免程序去執(zhí)行這個(gè)非法指令以避免去執(zhí)行保存的數(shù)據(jù)區(qū)域的指令。


          另外,W寄存器在復(fù)位時(shí)會(huì)清零,直到它再一次寫進(jìn)去數(shù)據(jù),如果使用未進(jìn)行初始化的W寄存器作為地址指針,則會(huì)觸發(fā)IOPUWR位置位觸發(fā)復(fù)位。

          ?

          總結(jié),本文對(duì)器件復(fù)位相關(guān)的源進(jìn)行討論,同時(shí)討論和復(fù)位相關(guān)的方面,如寄存器狀態(tài),時(shí)鐘狀態(tài),并對(duì)程序啟動(dòng)過(guò)程做一定介紹。


          //關(guān)于知識(shí)產(chǎn)權(quán):

          1.本公眾號(hào)主要用于個(gè)人學(xué)習(xí)筆記歸納及分享,無(wú)任何商業(yè)目的。

          2.本公眾號(hào)所發(fā)表言論及觀點(diǎn)不代表本人現(xiàn)任公司及前任公司,如有錯(cuò)誤請(qǐng)不吝指正。

          3.歡迎隨意分享轉(zhuǎn)發(fā),如需轉(zhuǎn)載公眾號(hào)內(nèi)容,請(qǐng)留言告知。

          4.有些圖片來(lái)自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪除。

          5.有問題可通過(guò)公眾號(hào)關(guān)注頁(yè)添加本人微信或者加入技術(shù)討論群交流。


          瀏覽 18
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品黄色小视频 | 日一日射一射无码视频 | 一区二区韩国在线 | 天天色天天干天天日天天做天天爱 | 亚洲日韩日韩人兽在线 |