打印

关于C5509A的IDLE使用方法

[复制链接]
890|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Sode|  楼主 | 2016-5-18 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在C5509A的那个项目中,当DSP通过I2C从MCU接收到SLEEP命令时,需要进入休眠状态。一旦进入休眠状态,DSP就停在IDLE语句之上, 不再往下运行,也无法再通过I2C获取命令了,因此硬件设计上,将DSP的INT0和MCU相连,由MCU通过对DSP产生INT0中断而唤醒DSP。 DSP被唤醒之后,继续运行IDLE下面的语句。休眠程序的具体步骤如下:
1.设置ICR的各个Bit为1,1表示此Bit所对应的模块将进入休眠状态。
2.设置IMR寄存器,禁止不相关的中断,只允许INT0中断。
3.执行IDLE汇编语句,使DSP进入休眠状态。当运行IDLE时,DSP将ICR中的设置复制到ISTR寄存器中,ISTR则实际控制各个模块是否休眠。
4.当产生INT0中断之后,ISTR中的CLKGENIS和CPUIS Bit将自动清零,也就说时钟模块和CPU模块将中止休眠,这样DSP就可以开始运行IDLE之后的语句了。注意,此时的别的模块仍然处于休眠状态。
5.清除ICR的各个Bit,并再次运行IDLE语句,这将把ISTR寄存器中的各位清零,使得DSP的各个模块都中止休眠。
6.重新配置DMA,McBSP等模块。
上述的步骤5尤其重要,一开始我以为当DSP收到INT0中断之后,将自动全部中止休眠,结果尝试多次都无法恢复休眠前的状态。仔细阅读了TMS320C55x DSP Peripherals Overview之后才把这个问题搞明白。
在5509A DSK上测试上述代码时还遇到一个小问题。DSK板子上有个WAKE UP的按钮,但是按下它之后会向DSP产生什么中断不得而知,经阅读文档 TMS320VC5509A DSK Technical Reference 2.1.7节之后才知道原来需要设置CPLD的寄存器(INT REG),奇怪的是DSK的源程序dsk5509.h中居然没有这个寄存器的定义,于是干脆自己直接写这个寄存器:*((Uint16 *)0x3F0007) = 0x0001; 设置为1表示采用INT0中断。

相关帖子

沙发
FCCdsp| | 2016-5-18 21:11 | 只看该作者
最近正在纠结这个问题,感谢分享,学习了

使用特权

评论回复
板凳
comeon201208| | 2016-5-18 22:09 | 只看该作者
运行IDLE时,DSP将ICR中的设置复制到ISTR寄存器中,ISTR则实际控制各个模块是否休眠。这个休眠的操作的需要多注意的。

使用特权

评论回复
地板
TXZhao| | 2020-4-12 19:43 | 只看该作者
楼主您好,最近本人也在做5509A的功耗优化工作,非常希望能有机会和您交流一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1049

主题

1522

帖子

8

粉丝