打印

一个LPC936产生双通道PWM的,周期问题

[复制链接]
1846|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
番薯木头|  楼主 | 2009-7-15 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
已经做了修改,两个通道的波形都出来了。但是周期有问题。在DIVM默认状态下(00H,即:外接晶振不分频,直接转换成fOSC).预期是出来个1M的信号。但是现在频率都是变成2倍的了。这是什么原因?

 

程序如下:请周工指教啊。。比较急了

/*******************************************
PWM测试,外接16M晶振,A通道产生占空比3:4的波形,D通道产生占空比1:4的波形。PWM频率为1M。
*******************************************/
#include "reg936.h"
#include "intrins.h"

#define uchar unsigned char
#define ulong unsigned long

void Power_Down ();//电源管理
void CCU_Ini();//PWM发生

void main()
{
   DIVM=0;
   P1M1=0;
   P1M2=0;// 设置P1 口
   P2M1=0;
   P2M2=0;// 设置P2 口
   CCU_Ini();//开启PWM
}

void Power_Down (void)//电源
{
  PCONA=0xFF; //外部功能模块掉电
  PCON=0x03; //完全掉电
}

void CCU_Ini()//PWM输出
{   
   OCA=1;
   OCD=1;
   TCR21=0X87;  //CCLK=OSCLK/2N,DIVM=0,所以CCLK=OSCLK=16M

                         //PLL预分频,PLLCLK=PCLK/(N+1)=16M/2/(7+1)=1M
                         //CCUCLK=1M*32=32M
                         //要得到的PWM频率为1M,则定时器重装值=CCU频率/PWM频率=32M/1M=32=0x20
 
   CCCRA=0X03;
   CCCRD=0X03;
   TCR20=0X80; //停,PLLEN=1 
   OCA=1;
   while(!PLLEN);//等待
   
   TOR2H=0X00;
   TOR2L=0X10; //定时器重装值
   TCR21|=0x80;//更新
  
   OCRAH=0X00;
   OCRAL=0X40; //A通道的比较值8
   OCRDH=0X00;
   OCRDL=0XC0; //峰值为32,反向的PWM,占空比为3:4 
   TCR21|=0x80;//更新
     
   TCR20|=7;   //启动定时器,非对称PWM,递减计数
}


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝