打印

关于F2812的bootloader与中断向量表之间的关系

[复制链接]
818|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Peonys|  楼主 | 2017-10-13 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于F2812的bootloader与中断向量表之间的关系


一、2812的中断向量表

首先2812的中断向量表映射的地址是由4个标志位决定的:VMAP,M0M1MAP,MP/MC,ENPIE。

而系统复位时VMAP=1,ENPIE=0,根绝中断向量表映射配置表可知,此时中断向量表映射在BootROM区域,地址:0x3FFFC0~0x3FFFFF;

(注意此时中断向量表并不在PIEVECT(0x000D00~0x000DFF)处)

下面看一下BootROM结构,当MPNMC=0时,系统选择从BootROM启动。


当有可以知道,系统复位时,中断向量表是指在BootROM内底部的复位向量表,地址:0x3FFFC0~0x3FFFFF;

而0x3FFFC0~0x3FFFFF这个空间内存放了PIE中断向量表,但实际只有第一个用到了,就是复位中断的中断向量表。

复位中断向量地址即为0x3FFFC0,而指针指向的就是BootROM中的Bootloader所在区域,即0X3FFC00。

而在图示A区,固化了TI做好的Bootloader.在其中完成了启动模式的选择。由于GPIOF4内部上拉,所以如果不接地,怎启动模式自动选择,从flash启动。

可是JTAG仿真时,是从H0SARAM启动的,不知道如何使得GPIOF4为低的,因为若从H0SARAM启动,GPIOF4=0,GPIOF12=0,GPIOF3=1,GPIOF2=1.后三个引脚无内部上拉。

如果从flash启动,则退出bootloader时,则跳转到0X3F7FF6处,若从H0SARAM启动,则跳转到0X3F8000处启动。

对于flash启动程序跳到0x3F7FF6处执行,此处距0x3F7FF8(密码设置区)只有两个字的距离,故在此也就只能放一个跳转指令,即跳转到C语言程序入口,即_c_int00处,个人认为当CMD文件将.reset段配置到0x3F7FF6时,起到的作用就是:即在0x3F7FF6处使程序跳转到_c_int00处。

这个函数就是建立一个c程序的运行环境,等建立完c运行环境后c_int00调用main函数。

当系统运行C程序后,PIE中断向量表还是在BootROM区,所以要重新映射PIE向量表,即有如下函数,完成中断向量表初始化,并改变其映射地址。
  • void InitPieVectTable(void)  
  • {  
  •     int16   i;  
  •     Uint32 *Source = (void *) &PieVectTableInit;  
  •     Uint32 *Dest = (void *) &PieVectTable;  
  •     EALLOW;   
  •     for(i=0; i < 128; i++)  
  •         *Dest++ = *Source++;      
  •     EDIS;  
  •     // Enable the PIE Vector Table
  •     PieCtrl.PIECRTL.bit.ENPIE = 1;   //使能ENPIE,改变向量表映射地址
  • }  


复制代码

疑问二:由于引导模式由GPIO引脚状态决定,那对于一个已经设计好的DSP最小系统,引脚状态在硬件上已经固定好了,意即是不是此时只能局限于一种引导模式了?不能同时进行仿真调试和烧写至FLASH内进行硬件调试吗?(因为仿真调试时,用户程序入口地址一般在SARAMH0处,烧写至FLASH内进行允许时,用户程序入口地址在FLASH处。)

尚未解决:个人认为可以通过直接修改GPIOF几个引脚对应寄存器的值,就可以改变启动模式。

相关帖子

沙发
angerbird| | 2017-10-13 19:41 | 只看该作者
复位中断向量地址即为0x3FFFC0,而指针指向的就是BootROM中的Bootloader所在区域,即0X3FFC00。这个地址非常重要的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

640

主题

901

帖子

5

粉丝