1935|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

C5509A的IDLE使用方法 [复制链接]

在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中断。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表