Cortex-M0 LPC1114/LPC1343 的 PWM 的配置 - 绿无涯

Cortex-M0 LPC1114/LPC1343 的 PWM 的配置 - 绿无涯 2010-12-10 

http://djbgreen.blog.163.com/blog/static/8341012010111001110596/

介绍LPC1114/LPC1343的PWM初始化步骤和程序。这里使用TMR32B0定时器的作为PWM初始化的介绍,分别提供了TMR32B0和TMR16B1的初始化程序。

初始化步骤:

配置TMR32B0定时器产生50KHz,分别在MAT0和MAT1输出50%和70%占空比

1.LPC_TMR32B0->TCR=0;  //关闭timer32B0

2.LPC_SYSCON->SYSAHBCLKCTRL|=(1<<9); //只有提供了timer32B0的时钟后才能使用timer32B0

3.LPC_TMR32B0->TCR=0x02;    //定时器timer32B0复位

4.//端口配置为MAT0和MAT1模式

 LPC_IOCON->PIO1_6=0x02;    //设置PIO1_6为CT320MAT0
 LPC_IOCON->PIO1_7=0x02;    //设置PIO1_7为CT320MAT0 (不能配错,不然出不来)

5.匹配寄存器配置,设置占空比(<周期MR3)

 LPC_TMR32B0->MR0 =500;   //50%占空比
 LPC_TMR32B0->MR1 =300;   //70%占空比

6.分频设置

LPC_TMR32B0->PR =0;     //设置分频系数

7.控制周期

LPC_TMR32B0->MR3 =1000;   //周期控制,20us   

8.匹配控制寄存器配置

LPC_TMR32B0->MCR = (2<<9);   //设置如果MR3和TC匹配,TC复位:[10]=1

9,打开定时器TMR32B0

LPC_TMR32B0->TCR =0x01;   //定时器打开

以下分别是LPC1114/LPC1343 TMR32B0的PWM初始化,50KHz,MAT0输出50%,MAT1输出70%的占空比
程序。

void PWM_Init(void)  //  CT32B0  MAT0:50%,50KHz,MAT1:70%,50KHz
{
 LPC_TMR32B0->TCR=0;
 LPC_SYSCON->SYSAHBCLKCTRL|=(1<<9); //打开定时器模块
 LPC_TMR32B0->TCR=0x02;    //定时器复位
 LPC_IOCON->PIO1_6=0x02;    //设置PIO1_6为CT320MAT0
 LPC_IOCON->PIO1_7=0x02;    //设置PIO1_7为CT320MAT0 (不能配错,不然出不来)
 LPC_TMR32B0->MR0 =500;   //50%占空比
 LPC_TMR32B0->MR1 =300;   //70%占空比
 LPC_TMR32B0->PWMC =0x03;      //设置 MA0,1为PWM输出 
 LPC_TMR32B0->PR =0;     //设置分频系数
 LPC_TMR32B0->MR3 =1000;   //周期控制,20us
 LPC_TMR32B0->MCR = (1<<10);   //设置如果MR3和TC匹配,TC复位:[10]=1
 LPC_TMR32B0->TCR =0x01;   //定时器打开
}

以下是LPC1114/LPC1343 TMR16B1定时器的PWM初始化,50KHz,50%

void PWM_Init(void)        //TMR16B1定时器的PWM初始化,50KHz,50%
{
LPC_TMR16B1->TCR=0;     //关闭Timer16B1
LPC_SYSCON->SYSAHBCLKCTRL|=(1<<8); //提供TMR16B1时钟
LPC_TMR16B1->TCR=0;     //关闭Timer16B1
LPC_IOCON->PIO1_9 = 0x01;   //将引脚PIO1_9设为CT16B1_MAT0功能
LPC_TMR16B1->MR0 = 500;    //占空比
LPC_TMR16B1->PWMC = 0x01;    // 使能PWM模式,用于外部配置管脚
//LPC_IOCON->PIO1_10 = 0x02; //将引脚PIO1_10设为CT16B1_MAT1功能
//LPC_TMR16B1->MR1 = 500;  //占空比
//LPC_TMR16B1->PWMC = 0x02;  // 使能PWM模式,用于外部配置管脚
LPC_TMR16B1->PR  = 0;    //为0部分频(这里为系统时钟50MHz) 
LPC_TMR16B1->MR3  = 1000;   //PWM周期
LPC_TMR16B1->MCR = 0x0400;   //设置如果MR3和TC匹配,TC复位:[10]=1
LPC_TMR16B1->TCR |= 0x01;   //打开Timer16B1
}  

以上两个初始化程序均用示波器观察过波形。

.END

No comments:

Post a Comment