發新話題
打印

Uart Bootloader

Uart Bootloader

Hi all,

小弟遇到了一個問題, 說明如下:
1. 我從AN112的C8051F30x改了一個For F310的UART updater, 然後將這個updater燒錄到C8051F310-TB上(燒錄位置為Flash的0x3000的位置)。
2. 另外弄了一個F310_Blink的Code(非AN112SW.zip裡面的), 並產生HEX File.
3. 使用USB_to_RS232轉接器連接Laptop與Demo Board, 開啟Windows內建的HyperTerminal, 可正常顯示Updater的Menu.
4. 輸入選擇1, "1. Erase FLASH and Update Firmware", 並開啟傳送文字檔案"F310_Blink.Hex", 傳輸成功, 接著Demo Board Reset後可看到LED閃爍.
5. 此時按下P0.7的SW按鈕, 會跳到0x3000(也就是Updater的位置)。

===到以上為止都是正常的===

就在以上這些步驟之後, 預期的結果應該是可以在HyperTerminal上看到Updater的MENU出現,
可是, 我的畫面上卻是不斷不斷的重複MENU的前兩行, 感覺像是Demo Board會不斷的reset, 因為我有放了一個breakpoint在Updater的while(1)之前那行"IE = 0x90;", 發現程式會不斷的走到這個位置。

請問我遇到了什麼狀況了? 由於小弟還是個新手, 所以我想應該是coding或是Compiler設定的問題, 只是, 搞了很久還是找不出來可能是哪裡的錯誤, 希望各位前輩能指點一下, 感激不盡~~~~~

由於沒有權限附檔, 所以僅將code複製貼上...

.
.
.

有點冗長, 還是用Google Doc好了@@, http://goo.gl/lGSqm
點右上角或是File裡面的Download Original就能下載整個壓縮檔唷。

[ 本帖最後由 Jack 於 2011-10-4 13:09 編輯 ]

TOP

看起來似乎是interrupt vector 的影響,

1.      你的updater 有用到UART的interrupt

2.      Blink 裡有用到timer 的interrupt,因此有進入中斷的向量

從blink 跳到UART時, updater裡沒有timer 中斷向量的ISR

有可能是因為這原因造成的! 可參考比較心的boot loader方式

TOP

因為你的 F310_Blink function code,Compiler 時並沒有指到你指定的(0x3000)Flash 位址,因此當HEX file Bootload 後,程式並沒有在 function code 有效位址內執行,才會發生 Reset 現象,請比對 AN112 附的
sample code → IDE Compiler 設定。(IDE Compiler 參數設定請參考附圖)
IDE Compiler 參數語法 AN112 有說明,請詳閱。
附件: 您所在的用戶組無法下載或查看附件

TOP

我...

"附件: 您所在的用戶組無法下載或查看附件"

可以幫我開通嗎 @@"

TOP

發新話題