0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

430怎么復(fù)位_430軟復(fù)位方法詳解

電子工程師 ? 作者:工程師a ? 2018-05-20 10:04 ? 次閱讀

最近在搞430的FLASH的自定義法(利用串口)程序燒寫,燒寫完成后斷電復(fù)位,reset按鍵就可以運(yùn)行新的程序。但是和學(xué)長交流了一下,這種方法不夠好,希望有一種軟復(fù)位的方式。于是百度了一下,都是些對(duì)看門狗進(jìn)行寫入特殊值使得430的cpu復(fù)位。反正個(gè)人是沒有采用。

因?yàn)樵诟愠绦虻臒龑?a href="http://wenjunhu.com/soft/special/" target="_blank">下載,所以看了一下430的BSL??吹嚼锩嬗幸欢卧挘P(guān)于從C代碼中啟動(dòng)BSL的方法。如下:

從一個(gè)外部應(yīng)用中啟動(dòng)BSL

將程序計(jì)數(shù)器設(shè)定到內(nèi)存為位置0x1000 來啟動(dòng)BSL。堆棧一直被復(fù)位,而RAM 被清空。應(yīng)該注意的是,GIE 位未被禁用,所以如果不需要中斷的話,這一步應(yīng)該通過調(diào)用應(yīng)用來完成,并且如果它們被使用的話,這一步應(yīng)該從“返回BSL”返回。

由于堆棧被復(fù)位,位置0x1000 也可以被作為一個(gè)C 功能進(jìn)行調(diào)用,示例代碼如下:
((void (*)())0x1000)()

于是想到,既然可以從C里面跳轉(zhuǎn)到0x1000,那么也可以跳轉(zhuǎn)到其他地址,比如復(fù)位地址了。

以6638為例。430的復(fù)位中斷矢量地址是0xFFFE,里面存儲(chǔ)了將要跳轉(zhuǎn)的物理地址。6638的代碼區(qū)起始地址是0x8000,正常復(fù)位是先進(jìn)入復(fù)位中斷,然后PC指針導(dǎo)入地址0x8000,然后從0x8000開始執(zhí)行代碼。那么軟復(fù)位則是,執(zhí)行((void (*)())0x8000)(),直接PC指針被導(dǎo)入0x8000的地址,而這個(gè)地址正好是6638的代碼區(qū)起始地址,于是軟復(fù)位了。個(gè)人分析一下這個(gè)指令,如有錯(cuò)誤敬請(qǐng)大神們指正。

從代碼上講,(void (*)()是一個(gè)指向空函數(shù)的指針,((void (*)())0x8000)()是將0x8000強(qiáng)制轉(zhuǎn)換為函數(shù)指針后進(jìn)行函數(shù)調(diào)用,于是0x8000便被送入了PC指針。

對(duì)于其他的430單片,去查其數(shù)據(jù)手冊(cè)FLASH段,弄清其代碼區(qū)的開始地址,也可以用這個(gè)方法軟復(fù)位了。

實(shí)測(cè),IAR,CCS下編譯、實(shí)踐通過。

最后,查了一下,對(duì)于計(jì)算機(jī)系的這個(gè)方法可能是常識(shí)了,但是對(duì)于搞單片機(jī)、嵌入式的大多還不知曉,個(gè)人就寫出來,大家交流交流。已經(jīng)知道這個(gè)方法的高手們,就一笑而過吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635302
  • 430
    430
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    16816
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    復(fù)位那些小事—典型的復(fù)位流程

    在聊到復(fù)位的時(shí)候總會(huì)區(qū)分兩個(gè)概念:硬復(fù)位復(fù)位。
    的頭像 發(fā)表于 12-04 13:46 ?3372次閱讀

    430復(fù)位芯片出現(xiàn)死機(jī)現(xiàn)象

    測(cè)試時(shí)430用的是149的片子,復(fù)位芯片用的是TPS3823,測(cè)試的目的是想看看這外部看門狗的準(zhǔn)確性,程序很簡單只有一個(gè)定時(shí)器和一個(gè)串口發(fā)送數(shù)據(jù),但是單片機(jī)死機(jī)了。這個(gè)問題我怎么也想不通,就算是
    發(fā)表于 04-18 01:29

    STM32系統(tǒng)復(fù)位方法是什么

    STM32系統(tǒng)復(fù)位方法是什么
    發(fā)表于 11-26 06:11

    MSP430復(fù)位信號(hào)有哪幾種呢

    MSP430復(fù)位信號(hào)有2種:文檔:上電清除信號(hào)(PUC)、上電復(fù)位信號(hào)(POR)。個(gè)人理解:POR是第一次上電復(fù)位,PUC是在帶電的情況下發(fā)生復(fù)位
    發(fā)表于 02-15 07:44

    MSP430復(fù)位信號(hào)有哪幾種

    MSP430復(fù)位信號(hào)有2種:文檔:上電清除信號(hào)(PUC)、上電復(fù)位信號(hào)(POR)。個(gè)人理解:POR是第一次上電復(fù)位,PUC是在帶電的情況下發(fā)生復(fù)位
    發(fā)表于 02-15 06:58

    msp430是如何實(shí)現(xiàn)復(fù)位功能的?

    msp430是咋樣實(shí)現(xiàn)復(fù)位功能的?
    發(fā)表于 10-17 06:17

    基于MSP430F2的系統(tǒng)復(fù)位

    系統(tǒng)的復(fù)位系統(tǒng)由POR和PUC信號(hào)驅(qū)動(dòng),各種不同的事件能觸發(fā)產(chǎn)生這些復(fù)位信號(hào),而根據(jù)不同的復(fù)位信號(hào)會(huì)產(chǎn)生不同的初始化狀態(tài)。
    發(fā)表于 09-21 15:59 ?1次下載
    基于MSP<b class='flag-5'>430</b>F2的系統(tǒng)<b class='flag-5'>復(fù)位</b>

    MSP430F常用模塊應(yīng)用原理總結(jié)

    MSP430單片機(jī)系統(tǒng)復(fù)位電路從上MSP430系統(tǒng)復(fù)位電路功能模塊圖中可以看到了兩個(gè)復(fù)位信號(hào),一個(gè)是上電
    發(fā)表于 04-23 10:10 ?7次下載
    MSP<b class='flag-5'>430</b>F常用模塊應(yīng)用原理總結(jié)

    MSP430單片機(jī)復(fù)位電路可靠性設(shè)計(jì)詳析

    為了解決混合信號(hào)控制器MSP430在實(shí)際應(yīng)用中常遇到的因偶發(fā)復(fù)位失效而造成整個(gè)電路系統(tǒng)死機(jī)的問題,對(duì)MSP430系列單片機(jī)的復(fù)位機(jī)制進(jìn)行了深入淺出的分析,提出了對(duì)MSP
    發(fā)表于 04-27 11:01 ?17次下載
    MSP<b class='flag-5'>430</b>單片機(jī)<b class='flag-5'>復(fù)位</b>電路可靠性設(shè)計(jì)詳析

    MCU復(fù)位原理詳解

    想要實(shí)現(xiàn)復(fù)位,先給VRCTKEY賦個(gè)0x05FA,再想SYSRESETEQ寫1即可實(shí)現(xiàn)復(fù)位。
    發(fā)表于 10-27 10:47 ?9354次閱讀

    MSP430教程之MSP430單片機(jī)復(fù)位電路的詳細(xì)資料說明

    從上MSP430系統(tǒng)復(fù)位電路功能模塊圖中可以看到了兩個(gè)復(fù)位信號(hào),一個(gè)是上電復(fù)位信號(hào)POR(Power On Reset)和上電清除信號(hào)PUC(Power Up Clear)。
    發(fā)表于 03-21 18:24 ?11次下載
    MSP<b class='flag-5'>430</b>教程之MSP<b class='flag-5'>430</b>單片機(jī)<b class='flag-5'>復(fù)位</b>電路的詳細(xì)資料說明

    MSP430單片機(jī)的復(fù)位系統(tǒng)有哪些常見問題應(yīng)該如何解決

    Q1:請(qǐng)問msp430 怎么手動(dòng)復(fù)位啊?是不是連到RST/NMI 上?但是這個(gè)腳不是和JTAG 連嗎?我看到一些資料上說復(fù)位的話還要上拉電阻或者復(fù)位電路。
    發(fā)表于 09-04 17:27 ?0次下載
    MSP<b class='flag-5'>430</b>單片機(jī)的<b class='flag-5'>復(fù)位</b>系統(tǒng)有哪些常見問題應(yīng)該如何解決

    【PUC、POR】MSP430復(fù)位信號(hào)

    MSP430復(fù)位信號(hào)有2種: 文檔: 上電清除信號(hào)(PUC)、 上電復(fù)位信號(hào)(POR)。 個(gè)人理解: POR是第一次上電復(fù)位,PUC是在帶電的情況下發(fā)生
    發(fā)表于 12-16 16:56 ?12次下載
    【PUC、POR】MSP<b class='flag-5'>430</b>的<b class='flag-5'>復(fù)位</b>信號(hào)

    【PUC、POR】MSP430復(fù)位信號(hào)_liangchaoxi的IT博客_新浪博客

    MSP430復(fù)位信號(hào)有2種: 文檔: 上電清除信號(hào)(PUC)、 上電復(fù)位信號(hào)(POR)。 個(gè)人理解: POR是第一次上電復(fù)位,PUC是在帶電的情況下發(fā)生
    發(fā)表于 12-16 16:57 ?11次下載
    【PUC、POR】MSP<b class='flag-5'>430</b>的<b class='flag-5'>復(fù)位</b>信號(hào)_liangchaoxi的IT博客_新浪博客

    stm32復(fù)位 內(nèi)核復(fù)位和系統(tǒng)復(fù)位

    內(nèi)核復(fù)位:它會(huì)使STM32內(nèi)核(Cortex-M)進(jìn)行復(fù)位,而不會(huì)影響其外設(shè),如GPIO、TIM、USART、SPI等這些寄存器的復(fù)位。
    的頭像 發(fā)表于 08-01 17:21 ?4890次閱讀