Westbrook
认证:VIP会员
所在专题目录 查看专题
dsPIC33 BootLoader(1)-简介
dsPIC33 BootLoader(2)-Flash程序存储空间
dsPIC33 BootLoader(3)-构建中断重映射表
dsPIC33 BootLoader(4)-基于MCC配置Boot区
dsPIC33 BootLoader(5)-基于MCC生成应用程序
Bootloader演示
作者动态 更多
10分钟教你快速完成数字电源的闭环控制
2022-04-02 17:26
数字电源学习板演示
2022-02-19 13:36
手把手教你学数字电源系列视频(22)- 数字控制的软件流程
2022-02-19 13:28
手把手教你学数字电源系列视频(21)- 设计数字补偿器(LDE执行)
2022-02-19 13:28
手把手教你学数字电源系列视频(20)- 设计数字补偿器(AB系数计算)
2022-02-19 13:27

dsPIC33 BootLoader(5)-基于MCC生成应用程序

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

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 3
关注 782
成为作者 赚取收益
全部留言
0/200
  • 王超的小站 2020-11-23 12:04
    都是知识,学习了
    回复