按照(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区工作,后面我上传一个视频做一下演示。