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