本帖最后由 DLF5 于 2014-7-31 15:02 编辑
void PWMB_Init(void)
{
P2_MFP = P2_MFP & (~P26_AD14_PWM6 ) | PWM6 ; //中:设置P2.6,功能
P2_PMD = P2_PMD & (~Px6_PMD ) | Px6_QB; //中:配置P2.6为准双向模式
APBCLK |= PWM67_CLKEN; //中:使能PWM6,1时钟6
CLKSEL2 = (CLKSEL2 & (~PWM67_CLK)) | PWM67_12M; //中:选择外部12M晶振输入作为Capture6和PWM6时钟源6
PPRB = 0x000000B0; //PWM67 B 11+1=12预分频率
CSRB = CSRB & 0xF8FF ; //
CSRB |= CSR6_CLK_1; //中:设置PWM6时钟分频值1
PCRB |= CH6_AU_RL; //使能PWM6定时器开始运行/自动重装/关闭反向
PCRB &=(~CH6INV_ON);
CNR2B = 0xFFFF; //中:设置Capture6重载寄存器的值
CCR2B &= ~INV6_ON; //中:禁止Capture0反向功能
CCR2B |= CAPCH6EN; //中:使能PWM通道6捕捉功能
CAPENRB |= CAPCH6_ON; //中:使能Capture0通道输入有效
PIERB |= PWMIE6; //中:使能PWM通道6中断
CCR2B |= CFL_IE6; //中:使能Capture6下降沿锁定中断
CCR2B |= CRL_IE6; //中:使能Capture6上升沿锁定中断
NVIC_ISER = PWMB_INT; //中:使能NVIC PWM4~7中断
PCRB |= CH6EN ; //中:使能PWM6下数计数器开始计数
}
void PWMB_IRQHandler(void)
{
u32status = CCR2B; //中:获取Capture通道6控制寄存器的值
uiLow_Pulse = CNR2B - CRLR2B; //中:计算低脉冲宽度
uiHigh_Pulse = CNR2B - CFLR2B; //中:计算高脉冲宽度
if (u32status & CRLRI6) //中:如果Capture6捕获到一个下降沿,表示一个完整的PWM周期捕获完成
u32DutyCycle = (uiLow_Pulse + uiHigh_Pulse) /1000; //周期计算ms
/*LED中断显示*/
FLAG24 = ~FLAG24;
if (FLAG24)
P2_DOUT |= 0x10; //LED灭
else
P2_DOUT &= 0xEF; //LED亮
}
|