原创 ColdFire 32位微控制器学习系列六--使用PWM产生两个极性相反的方波。

2010-2-22 18:26 2243 5 5 分类: 汽车电子

也就是说利用PWM的通道1和3,分别产生一个方波,当通道1为高电平时,通道3为低电平,反之相同。做这个例子的主要目的还是抛砖引玉,虽然产生两个这样的波形没什么明确的意义,但是只要利用这样的方法,利用好占空比寄存器和周期寄存器中的值,再配合以中断引脚的使用,完全可以造出一般需求的时续来。呵呵,这个才是目的。


代码如下:


注意代码并非每一句都有意义,甚至有垃圾代码在里面,使用时只需要精简一下即可。


/*
 * File:  main.c
 * Purpose:  sample program
 *
 */
#include "support_common.h" /* include peripheral declarations and more */
#include <stdio.h>
#include "mcf5xxx.h"
#include "mcf52235.h"


#define E1E3 0X06;
#define E1D3 0x02;
#define D1E3 0x04;
#define D1D3 0x00;
#define E5 0x20;


void LED1Reverse()
{
 char t;
 MCF_GPIO_DDRTC=0xff;
 t=MCF_GPIO_PORTTC && 0x02;
 if(t)
  MCF_GPIO_PORTTC=MCF_GPIO_PORTTC & 0xfd;
 else
  MCF_GPIO_PORTTC=MCF_GPIO_PORTTC | 0x02;
}


void PWMInit(unsigned char enable_channel1,unsigned char enable_channel2)
//channel1:0426.Duplicated with PORTTC(DTOUT).
//channel2:1357.Duplicated with PORTTD.
{
 char i;
 if(enable_channel1==1)
 {
  MCF_GPIO_PTCPAR=0|
       MCF_GPIO_PTCPAR_DTIN0_PWM0|
       MCF_GPIO_PTCPAR_DTIN1_PWM2|
       MCF_GPIO_PTCPAR_DTIN2_PWM4|
       MCF_GPIO_PTCPAR_DTIN3_PWM6;
 }
 if(enable_channel2==1)
 {
  MCF_GPIO_PTDPAR=0|
       MCF_GPIO_PTDPAR_PWM1_PWM1|
       MCF_GPIO_PTDPAR_PWM3_PWM3|
       MCF_GPIO_PTDPAR_PWM5_PWM5|
       MCF_GPIO_PTDPAR_PWM7_PWM7;
 }
 MCF_PWM_PWMPOL=0x02;//first low , subsequently high.
 MCF_PWM_PWMCLK=0xff;//use CLOCKSA and CLOCKSB.
 MCF_PWM_PWMPRCLK=0x77;//CLOCKA and CLOCKB prescaler
 MCF_PWM_PWMCAE=0;//left aligned
 MCF_PWM_PWMCTL=0;//8-bit channel each
 MCF_PWM_PWMSCLA=0x00;
 MCF_PWM_PWMSCLB=0x00;
 for(i=0;i<7;i++)
 {
  MCF_PWM_PWMPER(i)=240;
 }
 for(i=0;i<7;i++)
 {
  MCF_PWM_PWMDTY(i)=120;
 }
 
 MCF_GPIO_DDRTC=0xff;
 MCF_GPIO_PORTTC=0x00;
 
 MCF_PWM_PWME=D1D3;


}


int main(void)
{
 printf("Hello World in C\n\r");
 
 fflush(stdout);
 PWMInit(1,1);
 MCF_PWM_PWME=0xff;
 while(1)
 { 
  if(MCF_PWM_PWMCNT1==120)
   LED1Reverse();
 }
}


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条