2016/12/9
DSP系统v118 调试过程中出现了添加天线配置函数后,系统定时器无法使用的现象,猜测是因为天线配置模块影响了定时器的开启
DSP的中断过程流程 :
外设产生中断的流程:
1、中断锁存至PIE的中断标志及存器的第x组第y通道 : PIEIFRx.y
2、如果PIEIERx.y设置为有效,那么终端将被传递至后一级
3、如果PIEACK.x标志位被清除,那么中断传递至下一级,并将PIEACK.x置位1
4、中断锁存至IFR.X中
5、如果IER.x有效,中断传输至下一级
6、如果INTM清零,那么CPU收到中断。
7、后端的中断则开始继续传递
8、cpu保存当前状态至stack
9、IFR.X 和 IER.X 被清除,INTM置位,EALLOW被清除
10、cpu从PIE获取中断地址,并且PIE.PIEIFRX.Y清除
11、cpu执行中断
配置和是能中断过程 :
1、静止全局中断(禁止cpu中断接受)
2、是能PIE通过设置ENPIE位在PIECTRL寄存器中
3、配置和定位中断向量表;并使能PIE如下表所示
4、设置合适的PIEIERX,给PIE组和通道赋值
5、使能CPU IER是能cpu接受中断
6、在外设中是能中断
7、是能全局中断EINT OR CLRC INTM
实例 :
1、使用TI dsp 28377d 的定时器列程
第一步 : 关闭全局中断使能 DINT:
第二步 : 禁止PIE使能,并且清除PIE中所有的中断标志以及中断表设置
第三步 :关闭CPU 的中断使能
第四步 : 初始化PIE VECTOR并且使能PIE
第五步 :外设的中断配置
第六步 : 使能CPU的第x组中断接受使能
第七步 : 打开PIE对应的x组y通道接受使能
第八步 : 打开全局中断使能
2、使用v118版程序中断配置过程(修改之后的)
第一步 初始化piectr;其中已经包括语句DINT(关闭全局中断过程)
第二步 关闭PIE中断功能;通过设置PIRCTR.BIT.ENPIE = 0来实现,
第三步 清空中断设置(即PIEIER.X PIEIFR.X中原来的配置值);
第四步 清空中断列表,并且使能PIE功能(通过设置PIRCTR.BIT.ENPIE = 1来实现 )
第五步 清空CPU中断接受组
第六步 配置定时器的中断选项
第26 - 30行为配置中断入口地址
第42 - 44行为配置CPU响应中断组(其中TIMER0是通过第PIEIER1 . 7来链接到PIE上的,所以CPU按照分组响应中断,顾此处的IER |= M_INT1就是这个意思);
第52行表示了 我需要使能PIEIER1.7通道;是因为TIMER0的中断响应链路是通过PIE的第一组,第7个通过来连通的。
第七步 配置DMA中断和SPI_TX / SPI_RX 中断
第299 - 第302行配置DMA中断响应地址
第312 - 第313行:其中DMA_CH5和DMA_CH6是通过PIEIER7.5和PIEIER7.6 链接到PIE上的;所以首先需要使能
IER |= M_INT7 需要使能第7组通道,让CPU能够响应; IER |= M_INT6是因为SPI_TX/SPI_RX的中断是连接到PIEIER6.1和PIEIER6.2上的;所以也需要使能;
第315 - 第316则是分别配置使能DMA_CH5 / DMA_CH6通道的使能
第八步 打开全局中断使能
总结 :
设置中断的过程一般如下 :
第一步 : 关闭全局中断(DINT)
第二步 :关闭PIE功能,通过设置PIECTR.BIT.ENPIE = 0;来实现
第三步 :清空PIEIER 和PIEIFR寄存器;用以清除所有的cpu中断响应组
第四步 : 清空中断向量表,即清空所有的中断地址表
第五步 :关闭CPU中断响应;cpu寄存器中也有两个寄存器用于设置中断;即IER个IFR;全部置位为0即可;
第六步 : 设置外设的中断触发 :
1)配置中断函数地址
2)打开PIE中断通道组即使能PIEIERX.Y = 1;
3)配置CPU的中断寄存器以打开cpu对中断的响应即IER |= M_INTX
第七步 : 打开全局中断使能 EINT / ERTM
中断配置的位置发生变化是有可能影响中断的触发的