首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

关于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几个引脚对应寄存器的值,就可以改变启动模式。
继承事业,薪火相传
返回列表