This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

请教各位大神,怎么才能将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功能,又分别去对应外设的详细参考资料中确认的。

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

7701.C55.pdf2772.Disabling the Internal Oscillator on the.pdf