日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dsPIC(dsPIC30F4011) Bootloader原理及应用

發布時間:2024/3/26 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dsPIC(dsPIC30F4011) Bootloader原理及应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.實現原理
?? 1.關于24位指令占用FLASH空間的說明
??? dsPIC是16位的單片機,每一個指令為24位固定長度,一條指令在FLASH內占用3個字節,但只占用2個字節的地址空間,如果指令字節
  和地址空間一一對應來看,那個指令中最高的字節一直在夢游般的游蕩在FLASH中,只有一種特殊的辦法才能讀寫這個沒有地址的指令
  數據。例如、一條指令的開始存放地址為0x000000,那么下一條指令的存儲地址是0x000002,一條指令實際為3個字節,為了方便計算xc16
  生成的HEX文件中將一條指令占用4字節的線性地址(最高字節填充為0),也就是說xc16生成的HEX文件中的地址和實際
?? FLASH操作地址相差一倍。

?? 2.復位
   dsPIC設計風格非常實用簡約、沒有重定向復位向量等功能,上電復位時始終從0x000000處開始執行,為此boot程序的復位地址必須
  放在0地址處。 要注意的是app程序所生成的可執行文件也生成覆蓋0地址處的復位向量,boot程序必須想辦法在app下載過程中不讓app
?? 的復位向量覆蓋此地址,確保每次復位都先執行BOOT程序。
  
?? 3.中斷向量
??? 盡管dsPIC提供了一個備用的中斷向量表,但為了程序結構簡單化,BOOT程序禁止使用中斷,BOOT程序通過查詢方式使用
   定時器和UART。由于boot程序功能比較簡單不使用中斷也可輕松實現。

?? 4.配置字節
??? 為了BOOT程序可重復的下載新的APP程序,配置字節只允許在BOOT程序中配置。
???
?? 5.boot和app程序的存放位置
    理論上BOOT程序可放在flash內除中斷向量外的其它任意地址,但為了寫入APP時flash地址的連續性,把boot程序放到
??? FLASH 的尾部,0x7800(字節地址0xf000)處。這樣APP程序就可以沒有什么改動的使用默認鏈接腳本就可以。
  
?? 那么BOOT程序如何定位到0x7800處呢?從xc16編譯器目錄下找到dsPIC30F4011的默認鏈接腳本文件 mp30F4011.gld 并復制到項目目錄
  并作如下的改動后添加到項目中。

MEMORY { data (a!xr) : ORIGIN = 0x800, LENGTH = 0x800 reset : ORIGIN = 0x0, LENGTH = 0x4 ivt : ORIGIN = 0x4, LENGTH = 0x7C _reserved : ORIGIN = 0x80, LENGTH = 0x4 aivt : ORIGIN = 0x84, LENGTH = 0x7C program (xr) : ORIGIN = 0x7800, LENGTH = 0x700 eedata : ORIGIN = 0x7FFC00, LENGTH = 0x400 FUID0 : ORIGIN = 0x8005C0, LENGTH = 0x2 FUID1 : ORIGIN = 0x8005C2, LENGTH = 0x2 FUID2 : ORIGIN = 0x8005C4, LENGTH = 0x2 FUID3 : ORIGIN = 0x8005C6, LENGTH = 0x2 FOSC : ORIGIN = 0xF80000, LENGTH = 0x2 FWDT : ORIGIN = 0xF80002, LENGTH = 0x2 FBORPOR : ORIGIN = 0xF80004, LENGTH = 0x2 RESERVED1 : ORIGIN = 0xF80006, LENGTH = 0x2 RESERVED2 : ORIGIN = 0xF80008, LENGTH = 0x2 FGS : ORIGIN = 0xF8000A, LENGTH = 0x2 FICD : ORIGIN = 0xF8000C, LENGTH = 0x2 }__FUID0 = 0x8005C0; __FUID1 = 0x8005C2; __FUID2 = 0x8005C4; __FUID3 = 0x8005C6; __FOSC = 0xF80000; __FWDT = 0xF80002; __FBORPOR = 0xF80004; __RESERVED1 = 0xF80006; __RESERVED2 = 0xF80008; __FGS = 0xF8000A; __FICD = 0xF8000C; __NO_HANDLES = 1; /* Suppress handles on this device */ __CODE_BASE = 0x7800; __CODE_LENGTH = 0x700; __IVT_BASE = 0x4; __AIVT_BASE = 0x84;

二.程序說明
?? xc16提供的c庫不支持flash頁寫入,為此為了提高效率使用了官方bootloader示例中的寫flash接口函數
  這些函數有:
?

   //memory.s中實現的FLASH頁操作函數原型聲明extern uint32_t ReadLatch(uint16_t, uint16_t);extern void WriteLatch(uint16_t,uint16_t,uint16_t,uint16_t);extern void WriteMem(uint16_t);extern void LoadAddr(uint16_t,uint16_t);extern void ResetDevice(void);

?

三.示例代碼下載

下載

?

?

總結

以上是生活随笔為你收集整理的dsPIC(dsPIC30F4011) Bootloader原理及应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。