在器件复位之后,中断向量表的映射被配置为下表: 映射的向量 | 从何处取Reset | 地址范围 | VMAP | M0M1MAP | ENPIE | BROM | BootROM模块 | 0x3FFFC0- 0x3FFFFF | 1 | 1 | 0 | 即复位之后,VMAP和M0M1MAP被置位,ENPIE模式被强制为0,而复位向量总是从BootROM中取(所以有一次我把BOOTROM烧坏之后,DSP貌似就彻底废了,到现在有块板子还在那里躺着)。在复位完成、boot引导成功之后,PIE向量表需要我们自己写代码来完成初始化并使能。
总结一下复位、初始化向量表的流程:
1. 复位;可以是上电复位,由TPS767d301这样的电源管理芯片通过复位电路发出的复位信号,也可以是我们在仿真器运行的环境下,在CCS的菜单栏project下面点击的reset CPU。此时PIE被禁止使能,即ENPIE=0;VMAP与M0M1MAP被置位,OBJMODE与AMODE被清零。这个OBJMODE与AMODE的模式有点奇怪,一直我也没明白为何复位之后默认为C27模式,害得我们每次还要在CCS的project菜单build option里面配置成-c28模式。
运行模式
| OBJMODE
| AMODE
| C28x
| 1
| 0
| 24x/240x
| 1
| 1
| C27x
| 0
| 0复位之后默认
|
小插曲是,当初从2407转到2812的时候,一下子从汇编编程转到C编程,反而搞的很不适应,看到器件手册上说改变这个OBJMODE与AMODE的模式可以运行在240x兼容模式下,于是异想天开的改变了OBJMODE与AMODE的配置,然后直接把2407的一大堆汇编程序弄到2812上来,结果自然是编译的结果惨不忍睹啊:一个是16位字长,一个是32位字长,这个是重要的区别;外设寄存器还好一些;好多指令也不一样了。最后还是硬着头皮学习28x的使用,真正沉下心来结果一个多月之后便很熟练了。对于一个学习使用新版芯片的人来说,应该不会再这么偷懒去使用兼容模式了吧。。。不然怎么能进步呢。
2. 从BootROM中取出复位向量,然后跳转到bootloader的子程序中(选择哪个程序模式由GPIO的几个配置位决定)
3. 在测试模式下,可能并不需要外设中断,不过这种模式我们用户是极少涉足的。所以在启用外设中断的情况下,我们要做的是:配置为28x模式,使能PIE,对相应的PIEIEx、CPU IER、INTM寄存器等操作(忘了的同学可以看前面博客里的流程图,相隔不远)。 |