键去抖功能没能调试出来。
//代码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端口。