"); //-->
2 系统软件的设计
2.1 中断服务程序
由于整个语音编解码系统需要用到串行口中断以及定时器中断等多种中断方式,必须在中断向量表中说明中断发生时如何进入中断服务程序。地址为0x001D的寄存器PMST(Processor Mode StaTusRegister)的高9位为中断向量指针IPTR可以决定向量表的位置。对于C54x,可以任意修改IPTR地址来表示1个128 B的页,决定中断向量表的地址。例如,′C5409硬件复位后PMST的15~7 b全为1,所以中断向量表的位置在0xFF80。初始化时,系统所有的中断都被屏蔽掉。将中断向量表映射到程序空间的0x0080,所以修改IPTR为0x01。中断向量表中每一个中断矢量有4 B的空间,足够放2个大小为1 B的延迟跳转指令和1个2 B的延迟跳转指令,还有1条1 B的从中断返回的指令RETE。系统初始化以后,如果允许中断,将状态寄存器(ST1)的INTM位置0,中断屏蔽寄存器(IMR)对应的比特位置1,该中断就可以响应。中断产生后,先到中断矢量表中寻址到该中断,然后跳转到中断服务程序,中断结束返回到中断矢量表,再返回到主程序,从中断发生处继续向下运行。
2.2 McBSP的软件设计
McBSP在结构上可以分为一个数据通道和一个控制通道。数据通道完成数据的发送和接收,主要是通过数据发送寄存器DXR1/2和数据接收寄存器DRR1/2。控制通道完成的任务包括内部时钟的产生、帧同步信号产生、对这些信号的控制以及多通道的选择等。控制通道还负责产生终端信号送往CPU。对′C5409串行口的操作也是通过设置各控制寄存器来进行的。这些控制寄存器有串行口控制寄存器SPCR1/2;接收控制寄存器RCR1/2;发送控制寄存器XCR1/2;多通道寄存器MCR1/2等。对某一控制寄存器寻址,只能采用加子地址寻址方式,即先将要寻址的寄存器子地址写入McBSPx的地址寄存器,再将数据写入McBSPx的数据寄存器。例如要将0x0001写入McBSP0的接收控制寄存器RCR0,先在地址为0x0038的SPSA0中写入RCR0的子地址0x0002,再将0x0001写入地址为0x0039的SPSD0寄存器。
McBSP的寄存器初始化应该和系统软件的初始化一起进行,由于寄存器比较多,通过汇编源代码,逐行说明串行口初始化软件的流程。
以上完成了寄存器的设置,在发送和接收数据之前,先将中断屏蔽寄存器(IMR)的串行发送中断位BXINT0和串行接收中断位BRINT0置1,中断使能,这样有串行数据在数据发送寄存器DXR1中准备发送时,或数据接收寄存器DRR1接收到数据时,中断标志寄存器(IFR)的BXINT0或BRINT0位置1。在进入发送中断服务程序时,主要是将话音数据分割成16 b为1 B,依次送到DXR1中,用一个缓冲区加一个指针就可以实现,发送一帧就将IFR的BXINT0清0;接收中断服务程序,是将接收的数据缓存,形成160 B的20 ms帧,再送入声码器处理,同样接收1个字就将IFR的BRINT0清零
3 结 语
通过以上的设计,实现了低速语音编解码器,并将他应用于移动通信系统中,声音效果良好。同时,以上的设计具有一定的通用性,应用于其他目的的数字信号处理时,只需更改一下相应寄存器的值,便可以使用。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。