微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM 学习笔记七 (PWM试验)

ARM 学习笔记七 (PWM试验)

时间:11-20 来源:互联网 点击:

键去抖功能没能调试出来。

//代码2---参考开发板带的例子,这个不好理解

#define GLOBAL_CLK 1

#include "def.h"
#include "2440addr.h"
#include "option.h"

#define KEY1 (1<1) // rGPF[1] =1 ;
#define KEY2 (1<4) // rGPF[4] =1 ;
#define KEY3 (1<2) // rGPF[2] =1 ;

static unsigned int freq;

void PWM_Ini(){

ChangeClockDivider(3,1); //获得PCLK=67.5MHz
ChangeMPllValue(127,2,1);

rGPFUP = 0xf800;// KEY [7:0] => PU En
rGPFCON=0xfcc0; //KEY[7:0] => INPUT;
}

void PWM_Stop(){
freq = 2000;
rGPBCON = 0x0;
rGPBDAT = 0x0;
}

void PWM_Output(int number){

rGPBCON = 0x0;
rGPBCON = 0x02;//TOUT0为输出端口
//rGPBUP = 0x01;//禁止上拉电阻

//定时器输入时钟频率=PCLK/{预分频}/{分割值}
rTCFG0 =0x64; //设置预分频为100
rTCFG1 =0x0;//设置分割值为1/2


if ( number > 0 ){
if ( freq < 20000 )
freq += number;
else
freq = 2000;
}

if ( number < 0 ){
if ( freq > 300 )
freq -= number;
else
freq = 2000;
}


rTCNTB0 =freq;
rTCMPB0 =rTCNTB0>>1;


rTCON = 0x0B;//disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
//000 01011
rTCON &= ~2;//clear manual update bit
}

void Main(void){

freq = 2000;

PWM_Ini();

while (1){

if ( !(rGPFDAT & KEY1) )
PWM_Output(100);

if ( !(rGPFDAT & KEY2) )
PWM_Output(-100);

if ( !(rGPFDAT & KEY3) )
PWM_Stop();

}
}

这个例子每次都要重新设置PGB端口。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top