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

1159926028@qq.c   2020-4-12 20:23 楼主

请教各位大神,怎么才能将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

回复评论 (6)

楼主的问题已在另帖中解答,楼主进一步提问,至少应该增加点进一步的实验测试信息。

上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2020-4-13 14:43
引用: chunyang 发表于 2020-4-13 14:43 楼主的问题已在另帖中解答,楼主进一步提问,至少应该增加点进一步的实验测试信息。

非常感谢您的帮助因为这个问题搞了很久都没有搞定,所以当时在不同的论坛发了相同的帖子。再一次对您表示感谢

点赞  2020-4-14 13:37
引用: 1159926028@qq.c 发表于 2020-4-14 13:37 非常感谢您的帮助因为这个问题搞了很久都没有搞定,所以当时在不同的论坛发了相同的帖子。再一次对您表示 ...

那你也该说说进展之类……

上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2020-4-14 14:21
引用: chunyang 发表于 2020-4-14 14:21 那你也该说说进展之类……

暂时还没有进展,正在一点一点排查哭唧唧

点赞  2020-4-17 20:41
引用: 1159926028@qq.c 发表于 2020-4-17 20:41 暂时还没有进展,正在一点一点排查哭唧唧

用分割法测,脱开外围和有源晶振,割线加飞线,把DSP独立出来测试。

上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2020-4-17 23:27
引用: chunyang 发表于 2020-4-17 23:27 用分割法测,脱开外围和有源晶振,割线加飞线,把DSP独立出来测试。

嗯嗯,您说的方法我后面试试。领导说先把这个问题放一放,等后面再解决这个问题的时候我会第一时间在这里更新进展。谢谢您

点赞  2020-4-20 09:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复