CC2530定时器T1产生PWM

最近搞PWM波输出,参考了一下网上的代码自己总结出CC2530 PWM的配置过程:(此处以T1为例)

配置PWM模式需参考CC2530用户手册中"表7-1 外部设备I/O引脚映射"来进行配置

      1、首先选择定时器1-4

      2、选择好定时器后,配置外部设备控制寄存器PERCFG来选择定时器选择的位置。对应表7-1进行配置

      3、配置定时器的优先级和定时器通道的优先级,针对选择的IO口,对应表7-1进行配置

      4、最后进行定时器模式的设置,选择定时器的模式,这里选择定时器1模模式

      5、在定时器1通道0寄存器(T1CC0H、T1CC0L)装入初值

      6、选择捕获的通道,并装入比较值。注意:此时选择的通道必须对应所控制的I/O口


下面为PWM设置的代码,P1_0口接LED,可看到LED的亮度在变化。

void PortInit()
{
    P1SEL = 0x00; //P1_0口设置为普通I/O口
    P1DIR = 0x01; //P1_0口设置为输出模式
}
void T1Init()
{
    CLKCONCMD &= ~0x40;         //设置系统时钟源为32MHZ的晶振
    while(CLKCONSTA & 0x40);    //等待晶振稳定为32MHZ
    CLKCONCMD &= ~0x07;         //设置系统主时钟频率为32MHZ
    CLKCONCMD |= 0x38;          //定时器标记输出为250KHZ    
    
    //定时器通道设置
    P1SEL |= 0x01;              //定时器1通道2映射至P1_0,功能选择
    PERCFG |= 0x40;             //备用位置2,说明信息
    P2SEL &= ~0x10;             //相对于Timer4,定时器1优先
    P2DIR |= 0xC0;              //定时器通道2-3具有第一优先级
    P1DIR |= 0x01;
    
    //定时器模式设置
    T1CTL = 0x02;               //250KHZ不分频,模模式
    
    //根据表7-1,此处P1_0口必须装定时器1通道2进行比较
    T1CCTL2 = 0x1C;             //比较相等置1,计数器回0则清零
    //装定时器通道0初值
    T1CC0H = 0x00;
    T1CC0L = 0xFA;              //PWM信号周期为1ms,频率为1KHZ
    //装定时器通道2比较值
    T1CC2H = 0x00;
    //T1CC2L = 0xF7; //1%的正占空比
    //T1CC2L = 0xE1; //10%的正占空比
    //T1CC2L = 0xC8; //20%的正占空比
    //T1CC2L = 0xAF; //30%的正占空比
    //T1CC2L = 0x96; //40%的正占空比
    T1CC2L = 0x7D; //50%的正占空比
    //T1CC2L = 0x64; //60%的正占空比
    //T1CC2L = 0x4B; //70%的正占空比
    //T1CC2L = 0x32; //80%的正占空比
    //T1CC2L = 0x19; //90%的正占空比


    //T1CC2L = 0x0A; //99%的正占空比
    //T1CC2L = 0x01; //设置通道2比较寄存器初值
}

void main()

{

uint8 i;
    uint8 rate[11]={0xF7,0xE1,0xC8,0xAF,0x96,0x7D,0x64,0x4B,0x32,0x19,0x0A};

PortInit();
    T1Init();

while(1)
    {
          for(i=0;i<11;i++)
        {
          T1CC2H = 0x00;
          T1CC2L = rate[i];
          halMcuWaitMs(500);
        }

        }

}

你可能感兴趣的:(TI)