牛卧堂MCU技术交流
标题:
Mini51 PWM 无输出问题? 求助
[打印本页]
作者:
黄大话
时间:
2014-12-3 16:17
标题:
Mini51 PWM 无输出问题? 求助
本帖最后由 黄大话 于 2014-12-3 16:31 编辑
//------------------------------------------------------------------------------
#define SetBit(VAR,Place) ( VAR |= (1<< Place) )
#define ClrBit(VAR,Place) ( VAR &= ((1<< Place)^0xffffFFFF) )
#define ChgBit(VAR,Place) ( VAR ^= (1<< Place) ) //取反
#define AffBit(VAR,Place,Value) ((Value) ? \
(VAR |= (1<< Place)) : \
(VAR &= ((1<< Place)^0xffffFFFF)))
#define MskBit(Dest,Msk,Src) ( Dest = (Msk & Src) | ((~Msk) & Dest) )
#define ValBit(VAR,Place) ((VAR>> Place) & 1 )
#define ClrBits(Var,Lstart,n) {unsigned char i=n,Place=Lstart;while(i--){ClrBit(Var,Place); Place++;}}
#define LoadBits(Var,Lstart,n,val) {unsigned long j=((unsigned long)1<<n)-1;j&=val;j<<=Lstart;ClrBits(Var,Lstart,n);Var|=j;}
#define GetBits(Var,Lstart,n) ( (Var>>Lstart)& (((unsigned long)1<<n)-1) )
//----------------------------------------------------------------------------------------------------------------------------
void PwmInit( void )
{
LoadBits( CLK->APBCLK, 20, 3, 7); // pwm clock
LoadBits( CLK->CLKSEL1,28, 2, 2 ); // pwm 01
LoadBits( CLK->CLKSEL1,30, 2, 2 ); // pwm 23
LoadBits( CLK->CLKSEL2, 4, 2, 2 ); // pwm 45
//--------io--------------------------------------------
LoadBits( GCR-> P2_MFP,12 ,3, 7 ); // 2.4, 2.5, 2.6
LoadBits( GCR-> P2_MFP,4 ,3, 0 ); // 0
LoadBits( GCR-> P0_MFP,12 ,1, 1 ); // 0.4
LoadBits( GCR-> P0_MFP,4 ,1, 1 ); // 0
PWM-> POE =0x3C; // EN OUT 2 3 4 5
//-------------------------------------------------------
PWM->CSR = 0x333333; // 时钟选择寄存器(CSR) /16
PWM-> PPR = 91 |((u32)91<<8)|((u32)91<<16); //15K
PWM->CNR2 = 10;
PWM->CMR2 = 8;
PWM->CNR3 = 10;
PWM->CMR3 = 8;
PWM->CNR4 = 10;
PWM->CMR4 = 8;
PWM->CNR5 = 10;
PWM->CMR5 = 8;
PWM-> PCR = 0x888888;
PWM-> PCR |=0x111111;
}
想得到 四路PWM 输出,PWM2 PWM3 PWM4 PWM5 ,但现在引脚上没有反应,一直是高电平。 请高手看看,哪儿没有设置好?
// 以上的 位操作: 置位,复位,置多个位等 ,是OK的 没有问题,问题 可能是还有哪个寄存器没有设置。
作者:
黄大话
时间:
2014-12-3 17:01
本帖最后由 黄大话 于 2014-12-3 17:02 编辑
问题已解: PWM->CNR2 = 10;
PWM->CMR2 = 8;
PWM->CNR3 = 10;
PWM->CMR3 = 8;
PWM->CNR4 = 10;
PWM->CMR4 = 8;
PWM->CNR5 = 10;
PWM->CMR5 = 8;
放最后就行了, 看手册还不够仔细啊:
注意: 如果该比特有一个上升沿跳变, 将导致CNR5 和 CMR5 被清除.
欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/)
Powered by Discuz! X3.2