OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8611|回复: 0

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

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-5-10
在线时间
5 小时
发表于 2020-4-12 19:13:57 | 显示全部楼层 |阅读模式
3金钱
虽然这里是MSP430的版块,但是对于TI公司同样低功耗的芯片TMS320C5509A(DSP)也具有低功耗模式(IDLE)可以通过关闭外设等降低系统功耗,但是本人在调试过程中没有达到理想效果,故在此求教各位大佬。
请教各位大神,怎么才能将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功能,又分别去对应外设的详细参考资料中确认的。

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

官方IDLE电流指标

官方IDLE电流指标

TMS320C55x Chip Support Library API Reference Guide.pdf

1.01 MB, 下载次数: 0

Disabling the Internal Oscillator on the.pdf

99.95 KB, 下载次数: 0

C55.pdf

157.14 KB, 下载次数: 0

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表