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