按照(4)的操做在MCC配置里面添加16-bit Bootloader:Application這個外設到Projects Resources里面,雙擊打開后Browse Boot的project,這一過程非常簡單,如下:
以上信息說明Boot區的程序加載成功,包括Bootloader結束地址,Application地址范圍,中斷向量表重映射的起始地址。然后點擊"Generate",Application程序即可生成,如下。
對程序進行編譯,編譯成功后觀察Program Memory,可以發現Application直接跳轉到0x1C60進行執行代碼了。
為什么是直接跳轉到0x1C60開始執行代碼?
因為我們之前設定應用程序的開始地址為0x1800,中斷偏移地址從0x1A00執行,中斷向量有152個(包括不可屏蔽中斷6個),每條GOTO語句占用兩條指令(6個字節),PC指針每執行+1,地址+2。所以0x1A00+0x260=0x1C60.
中斷偏移地址
我們選擇將中斷偏移地址從0x1A00開始,現在可以看一下是如何映射的。
比如振蕩器故障的IVT地址是0x000004,經過重映射后的地址是0x1A04,如果發生該中斷,則會跳轉到0x1D5E的地址去執行。地址錯誤的IVT地址是0x000006,而經過重映射后的地址是0x1A08,為什么?之前有提到,一個GOTO語句暫用兩條指令,故地址需要+4.同時,看到IVT地址為0x00000E為保留中斷源,所以它對應的地址為0x1A00.
比如我現在使能Timer1外設并進入中斷,如下,Timer1中斷向量IVT地址為0x000016,重映射地址為0x1A20,發生中斷后會跳轉到0x1E5A地址去執行。在沒有使能其他中斷源的情況下,均默認跳轉至0x1A00地址。
添加Timer1外設并使能中斷,產生250ms的定時中斷作為LED的閃爍頻率。
在中斷中添加翻轉IO口的代碼。
利用上位機進行應用程序代碼的下載
在Microchip官網下載Unified Bootloader Host Application (Version 1.15.1)上位機,下載地址為https://www.microchip.com/16-bit-Bootloader,打開之后進行參數配置,點擊“File->open/load file”打開應用程序的.hex文件。打開“setting”進行串口波特率的設置,之前配置的UART波特率為38400,所以這里的設置要和前面的波特率一致。Device 選擇PIC24/dsPIC33這一欄.Application Start 里面填寫0x1800,Application End里面填寫0x2B7FE,點擊“Program Device”即可進行應用程序的下載。界面如下:
下載成功可以發現LED的閃爍頻率發生變化,說明下載成功。可以按下評估板的Reset按鍵讓MCU復位,在松開復位按鍵的之前按住SW按鍵,等松開復位按鍵后,根據LED閃爍頻率可以判斷程序進入Boot區工作,后面我上傳一個視頻做一下演示。