也就是说利用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();
}
}
文章评论(0条评论)
登录后参与讨论