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.

如何关掉28335中的一些模块的时钟

Other Parts Discussed in Thread: TMS320F28335, C2000WARE

你好,我现在开发TMS320F28335,需要考虑功耗问题,要关掉一些不用的模块,请问如何用代码实现?谢谢

  • C2000Ware内有相关的LPM例程 C:\ti\c2000\C2000Ware_1_00_05_00\device_support\f2833x\examples,您可以参考一下。

    另外C2000 系列产品并不是以低功耗为主要特点,但是可以从以下几个方面考虑降低系统的功耗:

    (1)MCU 的功耗与运行频率存在很大的关系,您可以根据需求合理设置主频的范围;

    (2)及时关断不使用的外设模块;

    (3)尽量使 MCU 更多的运行在低功耗模式下;

    (4)提高代码执行效率;
  • 如何通过代码关断不使用的外设模块,谢谢
  • 您可以在InitPeripheralClocks内进行操作
  • //
    // InitPeripheralClocks - This function initializes the clocks to the 
    // peripheral modules. First the high and low clock prescalers are set
    // Second the clocks are enabled to each peripheral. To reduce power, leave 
    // clocks to unused peripherals disabled
    //
    // Note: If a peripherals clock is not enabled then you cannot
    // read or write to the registers for that peripheral
    //
    void 
    InitPeripheralClocks(void)
    {
        EALLOW;
    
        //
        // HISPCP/LOSPCP prescale register settings, normally it will be set to 
        // default values
        //
        SysCtrlRegs.HISPCP.all = 0x0001;
        SysCtrlRegs.LOSPCP.all = 0x0002;
    
        //
        // XCLKOUT to SYSCLKOUT ratio.  By default XCLKOUT = 1/4 SYSCLKOUT
        // XTIMCLK = SYSCLKOUT/2
        //
        XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
        
        //
        // XCLKOUT = XTIMCLK/2
        //
        XintfRegs.XINTCNF2.bit.CLKMODE = 1;
        
        //
        // Enable XCLKOUT
        //
        XintfRegs.XINTCNF2.bit.CLKOFF = 0;
    
        //
        // Peripheral clock enables set for the selected peripherals.
        // If you are not using a peripheral leave the clock off
        // to save on power.
        //
        // Note: not all peripherals are available on all 2833x derivates.
        // Refer to the datasheet for your particular device.
        //
        // This function is not written to be an example of efficient code.
        //
        SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADC
    
        //
        //                          *IMPORTANT*
        // The ADC_cal function, which  copies the ADC calibration values from TI 
        // reserved OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs 
        // automatically in the Boot ROM. If the boot ROM code is bypassed during 
        // the debug process, the following function MUST be called for the ADC to 
        // function according to specification. The clocks to the ADC MUST be 
        // enabled before calling this function.
        // See the device data manual and/or the ADC Reference
        // Manual for more information.
        //
        ADC_cal();
    
        SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;   // I2C
        SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-A
        SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1;   // SCI-B
        SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1;   // SCI-C
        SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;   // SPI-A
        SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A
        SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B
        SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1;    // eCAN-A
        SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1;    // eCAN-B
    
        SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
        SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1
        SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;  // ePWM2
        SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;  // ePWM3
        SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;  // ePWM4
        SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;  // ePWM5
        SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6
        SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Enable TBCLK within the ePWM
    
        SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;  // eCAP3
        SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;  // eCAP4
        SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;  // eCAP5
        SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1;  // eCAP6
        SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;  // eCAP1
        SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;  // eCAP2
        SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;  // eQEP1
        SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;  // eQEP2
    
        SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
        SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1
        SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2
    
        SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1;       // DMA Clock
        SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;     // XTIMCLK
        SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // GPIO input clock
    
        EDIS;
    }

  • 很高兴能帮到您!

  • 您好,请问,您怎样配置低功耗的,我现在也在配置,老不成功