1、C6000流水线
首先回顾一下C6000的硬件结构
2、C6000中断
在上面的功能框图中,右侧的属于CPU级中断,左侧的属于外设级中断。
(1)CPU级中断
CPU能够接收到的中断申请一共16个,优先级如下所示:
每个中断,用户能够编写的中断服务子程序都是一个指令包(256位),但编写的程序不能超过一个指令包,也不能少于一个指令包。C6000里一个字节占一个地址,刚好是32个地址,而一条指令占4个地址,所以一个指令包包含8条指令。不同中断请求的入口地址刚好差了20H。
解决办法:比如如果只有7条指令,则最后一条指令用空操作指令填满。而如果代码量比较大,大于8条指令,这样就需要使用跳转指令跳出中断服务表的地址区域,跳到非中断服务表的地址区域,在这些区域安排存放更多指令。
(1)放中间可以节省指令周期。(刚好有5个延迟间隙才执行)
(2)跳转的入口地址与取值包的基地址需要对齐。(如下图所示下一条没有放在中断服务表地址区域的地址是1234H,这就是跳转的入口地址)
入口地址必须是1234H(对齐)(2)外设级中断管理
功能:在芯片外部有大量的中断请求输入,但CPU最多能支持14个中断请求,如何管理大量的中断请求作为输入,就是外设级中断管理的功能。
中断选择器有128个输入,但输出只有12个,通过多路选择寄存器实现。
中断请求管理器工作:
输入信号127-4,每个事件就对应着一个DSP外设中断请求,flag是标志寄存器,每个输入都有一个时间标志位相对应,对应后会进入事件组合器,事件组合器的输入再送到中断选择器中,输出最多12路的中断请求申请。
3、C6000的定时器
定时器的本质就是计数器。总的计时时长等于计数值*时钟周期。
Timer counter register为定时器计数寄存器(在外部时钟驱动下进行计数),Timer period register为定时周期寄存器。当两者的值相等时(由Equality comparator比较器完成),会触发脉冲发生器(Pulse generator)使其输出发生变化,这就标志着一个定时周期的结束。
定时器重载寄存器(Timer reload register)存放的是下一次的定时周期值,如果想改变定时的时间长度,就可以将改变的周期值写入定时器重载寄存器中。
TDDR34 bits和PSC34 bits是寄存器的控制位,功能是分频,定时时钟可以先经过分频再进入计数单元,分频的系数越大,定时的时间就越长(频率变低了)。
当两者相等时,计数寄存器的值加一以工作在32位独立模式的定时器为例来说明其工作流程。
32位独立模式工作流程说明:
如上图,每来一个定时时钟(internal clock),TDDR的值加一,当TDDR的值与PSC(分频功能)的值相等时(比较器比较),输出信号,使32位定时计数器的值加一。当定时计数器中的值与定时周期(PRD34)相等时(仍然有经过比较器),会触发脉冲发生器,表示一个定时周期结束了。
网友评论