dsPIC(dsPIC30F4011) Bootloader原理及应用
一.實(shí)現(xiàn)原理
?? 1.關(guān)于24位指令占用FLASH空間的說(shuō)明
??? dsPIC是16位的單片機(jī),每一個(gè)指令為24位固定長(zhǎng)度,一條指令在FLASH內(nèi)占用3個(gè)字節(jié),但只占用2個(gè)字節(jié)的地址空間,如果指令字節(jié)
和地址空間一一對(duì)應(yīng)來(lái)看,那個(gè)指令中最高的字節(jié)一直在夢(mèng)游般的游蕩在FLASH中,只有一種特殊的辦法才能讀寫(xiě)這個(gè)沒(méi)有地址的指令
數(shù)據(jù)。例如、一條指令的開(kāi)始存放地址為0x000000,那么下一條指令的存儲(chǔ)地址是0x000002,一條指令實(shí)際為3個(gè)字節(jié),為了方便計(jì)算xc16
生成的HEX文件中將一條指令占用4字節(jié)的線性地址(最高字節(jié)填充為0),也就是說(shuō)xc16生成的HEX文件中的地址和實(shí)際
?? FLASH操作地址相差一倍。
?? 2.復(fù)位
dsPIC設(shè)計(jì)風(fēng)格非常實(shí)用簡(jiǎn)約、沒(méi)有重定向復(fù)位向量等功能,上電復(fù)位時(shí)始終從0x000000處開(kāi)始執(zhí)行,為此boot程序的復(fù)位地址必須
放在0地址處。 要注意的是app程序所生成的可執(zhí)行文件也生成覆蓋0地址處的復(fù)位向量,boot程序必須想辦法在app下載過(guò)程中不讓app
?? 的復(fù)位向量覆蓋此地址,確保每次復(fù)位都先執(zhí)行BOOT程序。
?? 3.中斷向量
??? 盡管dsPIC提供了一個(gè)備用的中斷向量表,但為了程序結(jié)構(gòu)簡(jiǎn)單化,BOOT程序禁止使用中斷,BOOT程序通過(guò)查詢(xún)方式使用
定時(shí)器和UART。由于boot程序功能比較簡(jiǎn)單不使用中斷也可輕松實(shí)現(xiàn)。
?? 4.配置字節(jié)
??? 為了BOOT程序可重復(fù)的下載新的APP程序,配置字節(jié)只允許在BOOT程序中配置。
???
?? 5.boot和app程序的存放位置
理論上BOOT程序可放在flash內(nèi)除中斷向量外的其它任意地址,但為了寫(xiě)入APP時(shí)flash地址的連續(xù)性,把boot程序放到
??? FLASH 的尾部,0x7800(字節(jié)地址0xf000)處。這樣APP程序就可以沒(méi)有什么改動(dòng)的使用默認(rèn)鏈接腳本就可以。
?? 那么BOOT程序如何定位到0x7800處呢?從xc16編譯器目錄下找到dsPIC30F4011的默認(rèn)鏈接腳本文件 mp30F4011.gld 并復(fù)制到項(xiàng)目目錄
并作如下的改動(dòng)后添加到項(xiàng)目中。
二.程序說(shuō)明
?? xc16提供的c庫(kù)不支持flash頁(yè)寫(xiě)入,為此為了提高效率使用了官方bootloader示例中的寫(xiě)flash接口函數(shù)
這些函數(shù)有:
?
?
三.示例代碼下載
下載
?
?
總結(jié)
以上是生活随笔為你收集整理的dsPIC(dsPIC30F4011) Bootloader原理及应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何向公众号添加的邮箱链接(已解决)
- 下一篇: Office Excel 学习