打印
[DSP编程]

求教:关于TMS320C5509A低功耗模式的问题

[复制链接]
935|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TXZhao|  楼主 | 2020-4-11 22:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
请教各位大神,怎么才能将C5509A的功耗降到芯片手册上的水平呢?请求各路大神给一些参考,如果有例程就更好了,先谢过各位大神了。下面附上本人写的关于DSP休眠的一个程序的主要部分,包含CSL库等头文件就不加了。但是测试发现没有达到理想的效果,而且发现同样的程序,在几块一样的板子上跑功耗还不一样,如果不是程序有问题就只能怀疑DSP芯片有差异了。编译环境使用的是CCS6.1,外设的编程调用了CSL库。系统时钟使用的24M有源晶振,经PLL倍频到192M给CPU和外设,内核电压1.6V,IO电压3.3V。也想麻烦大家帮忙看看什么地方存在问题,和使用有源晶振是否有关系。
ioport unsigned int *Usbdpll= (unsigned int *)0x1E00;//由于在CSL库中没有找到这些寄存器的映射,所以在这里自己定义了
ioport unsigned int *Usbpllsel= (unsigned int *)0x1E80;
ioport unsigned int *Usbapll= (unsigned int *)0x1F00;
ioport unsigned int *Usbidlectl= (unsigned int *)0x7000;
ioport unsigned int *Usbctl= (unsigned int *)0x67FC;
ioport unsigned int *Ebsr= (unsigned int *)0x6c00;


void Dsp_Idle(void){

        GPIO_RSET(IODATA,0x90);//为降低功耗将不用的IO设置为输出低电平

        CHIP_RSET(IFR0, 0xffff);//
        CHIP_RSET(IFR1, 0xffff);//设置全部中断标志位

        CHIP_RSET(IER0, 0x04);//设置外部中断1用来从休眠情况下唤醒
        CHIP_RSET(IER1, 0x0);

        *Usbdpll = 0x100;//使能DPLL
        *Usbdpll |= 0x0110;//将时钟输入设置二倍频到48M,
        *Usbidlectl = 0x0004;//将USB跳出复位
        *Usbctl = 0x0080;//DP上拉
        *Usbidlectl = 0x0005;//IDLE使能
        *Ebsr = 0xC000;//关闭CLKOUT和内部振荡器

        I2C_FSET(I2CMDR,IDLEEN,1);//使能I2C的IDLE位
        ADC_FSET(ADCCLKCTL,IDLEEN,1);//使能ADC的IDLE位
        TIMER_FSET(TCR0, IDLEEN, 1);//使能TIMER0的IDLE位
        TIMER_FSET(TCR1, IDLEEN, 1);//使能TIMER1的IDLE位
        MCBSP_FSET(PCR0, IDLEEN, 1);//使能McBSP0的IDLE位
        MCBSP_FSET(PCR1, IDLEEN, 1);//使能McBSP1的IDLE位
        MCBSP_FSET(PCR2, IDLEEN, 1);//使能McBSP2的IDLE位
        PWR_RSET(ICR, 0x2E);//将除时钟和CPU的IDLE 域全部使能
        for(i=0;i<100;i++){
                asm(" NOP ");
        }
        PWR_powerDown(PWR_WAKEUP_NMI);//调用CSL库执行IDLE指令

        PLL_RSET(CLKMD,0x0008);//锁相环设置旁路模式,CPU时钟等于输入时钟。测试发现,这句话可以减低系统功耗,
//        asm(" NOP ");
        PWR_RSET(ICR, 0x3f);//将CPU和CLKGEN域使能IDLE
        for(i=0;i<10;i++){
                asm(" NOP ");
        }
        PWR_powerDown(PWR_WAKEUP_NMI);执行IDLE指令,系统进入IDLE模式,外部中断唤醒不执行中断服务程序,向下执行。
//        delay(10);

        PLL_config(&MyPLL_Config);                        //设置时钟192M
        PWR_RSET(ICR, 0x00);//将ICR寄存器置成全0,需要再执行IDLE指令,才能将所有IDLE域唤醒
        for(i=0;i<10;i++){
                asm(" NOP ");
        }
        asm(" IDLE ");//唤醒所有IDLE域
//        delay(10);
}



附上一些相关的参考资料,大家有需要可以下载。
其中C55.pdf为外设介绍手册,里面有关于C5509a IDLE的详细介绍。在第8节(18页)
Disabling the Internal Oscillator on the.pdf给出了关闭片上振荡器的介绍,理论上可以将C5509A功耗降低到最低。
TMS320C55x Chip Support Library API Reference Guide.pdf为CSL库函数的使用参考,当时也是看了这个文件知道的哪些外设有IDLE功能,又分别去对应外设的详细参考资料中确认的。

有什么描述不清楚的地方欢迎大家批评指正,可以在评论中指出来。真心求教,先谢谢大家了。


官方低功耗电流指标.PNG (486.44 KB )

芯片手册上静态电流

芯片手册上静态电流

TMS320C55x Chip Support Library API Reference Guide.pdf

1.01 MB

CSL库文件

Disabling the Internal Oscillator on the.pdf

99.95 KB

关闭片上振荡器

C55.pdf

157.14 KB

外设手册

使用特权

评论回复

相关帖子

沙发
TXZhao|  楼主 | 2020-4-12 19:03 | 只看该作者
自己顶一下吧,现在这种情况完全不知道怎么弄了

使用特权

评论回复
板凳
chunyang| | 2020-4-12 21:04 | 只看该作者
如果使用有源晶振,那么有源晶振的功耗不能计入,程序也影响不了有源晶振的功耗。至于DSP的功耗,还是那句话,仔细看器件手册,核心只是休眠指令,IO设置要根据器件手册的要求处理。另外注意外设,特别是与DSP直连的推挽输出型外设,防止IO成为泄流回路。

使用特权

评论回复
地板
TXZhao|  楼主 | 2020-4-12 21:15 | 只看该作者
chunyang 发表于 2020-4-12 21:04
如果使用有源晶振,那么有源晶振的功耗不能计入,程序也影响不了有源晶振的功耗。至于DSP的功耗,还是那句 ...

器件手册上没有找到关于DSP进入低功耗模式下IO的设置方法。目前DSP作为主设备,外挂的器件就是一个ADC,和一个用于boot的flash,两个器件都是通过McBSP外设接在DSP上,这两个都是从器件应该不会和DSP泄流回路。而且很诡异的现象是同样的板子做了几套,程序也是一样的,进入低功耗时这几套板子的电流还不一样

使用特权

评论回复
5
chunyang| | 2020-4-12 21:22 | 只看该作者
TXZhao 发表于 2020-4-12 21:15
器件手册上没有找到关于DSP进入低功耗模式下IO的设置方法。目前DSP作为主设备,外挂的器件就是一个ADC, ...

没有说明就按另帖中我说的方法,设置IO为高阻输入模式。另外,测试电流的方法也要注意,别因测试不当导致系统本身出现问题。而有源时钟必须隔离在测试之外。

使用特权

评论回复
6
TXZhao|  楼主 | 2020-4-12 21:51 | 只看该作者
chunyang 发表于 2020-4-12 21:22
没有说明就按另帖中我说的方法,设置IO为高阻输入模式。另外,测试电流的方法也要注意,别因测试不当导致 ...

您说的有道理,每套板子的测试条件是一样的,开始也怀疑是不是有IO口电平处于半高不低的状态导致的消耗电流,但是测量了一遍发现IO电平都正常。不知道是不是不同批次的DSP芯片指标上会有差距

使用特权

评论回复
7
chunyang| | 2020-4-13 15:14 | 只看该作者
TXZhao 发表于 2020-4-12 21:51
您说的有道理,每套板子的测试条件是一样的,开始也怀疑是不是有IO口电平处于半高不低的状态导致的消耗电 ...

元器件存在离散性是必然的,至于你测试的结果是否在制造离散性范围内,这个需要进一步分析,但首先得保证你的设计没问题才行,相关信息也必须完备,甚至连测量方法都有讲究。

使用特权

评论回复
8
zhangmangui| | 2020-4-13 23:07 | 只看该作者
硬件设计上,晶振耗电很大,电阻阻值要合理,未使用的端口按照手册做处理;
未使用的外设的时钟都关掉,根据使用需求将主频设置到最小
在低功耗模式下看怎么能把AD等外设PW Down处理

使用特权

评论回复
评论
TXZhao 2020-4-14 14:50 回复TA
有源晶振确实耗电有点大,看了手册电流最大有30mA,这个就有点受不了了 
9
TXZhao|  楼主 | 2020-4-14 14:51 | 只看该作者
chunyang 发表于 2020-4-13 15:14
元器件存在离散性是必然的,至于你测试的结果是否在制造离散性范围内,这个需要进一步分析,但首先得保证 ...

暂时看应该超出离散范围了,差了十几毫安,应该还有一些配置没有完全正确

使用特权

评论回复
评论
chunyang 2020-4-15 18:07 回复TA
那说明根本不是元器件的离散性,查外围接口,分离有源晶振在测试系统之外。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

15

帖子

0

粉丝