找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

[M051] Mini51 PWM 无输出问题? 求助

[复制链接]
跳转到指定楼层
楼主
黄大话 发表于 2014-12-3 16:17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 黄大话 于 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的  没有问题,问题 可能是还有哪个寄存器没有设置。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
 楼主| 黄大话 发表于 2014-12-3 17:01:18 | 只看该作者
本帖最后由 黄大话 于 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 被清除.
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU