motorctrl.c
字号:
#include "inc/MotorCtrl.h"
#define PCLK (50700000)
#define MOTOR_SEVER_FRE 1000
#define MOTOR_CONT (PCLK/2/2/MOTOR_SEVER_FRE)
#define MOTOR_MID (MOTOR_CONT/2)
#define rTCFG0 (*(volatile unsigned *)0x51000000)
#define rTCFG1 (*(volatile unsigned *)0x51000004)
#define rTCNTB0 (*(volatile unsigned *)0x5100000C)
#define rTCMPB0 (*(volatile unsigned *)0x51000010)
#define rTCON (*(volatile unsigned *)0x51000008)
#define rGPBCON (*(volatile unsigned *)0x56000010)
#define rGPBUP (*(volatile unsigned *)0x56000018)
#define rGPBDAT (*(volatile unsigned *)0x56000014)
/*MOTOR 初始化*/
void init_MotorPort()
{
//config the pins of port B , GPB1:TOUT1,GPB0:TOUT0
rGPBCON=rGPBCON&0x3ffff0|0xa;//设置GPB0-1为TOUT0-TOUT1,参看手册P268
//Dead Zone=24, PreScalero1=2;
rTCFG0=(0<<16)|2; //配置定时器配置寄存器,参看手册P298
//divider timer0=1/2;
rTCFG1=0;//参看手册P299
//Set count buffer value for Timer 0
rTCNTB0= MOTOR_CONT;//参看手册P302,频率为1000HZ,f=rTCNT/(PCLK/2/2)=motor_count/(PCLK/2/2)=MOTOR_SEVER_FRE
//Set compare buffer value for Timer 0
rTCMPB0= MOTOR_MID;//参看手册P302,占空比为0.5
//Determine the manual update for Timer 0.(Update TCNTB0 & TCMPB0)
rTCON=0x2; //参见手册P301
//timer0 = auto reload, start. Dead Zone
rTCON=0x19; //参见手册P301
}
void SetPWM(int value)
{
//The value of TCMPBn is used for pulse width modulation (PWM).
rTCMPB0= MOTOR_MID+value; //设置TIMER0比较缓冲寄存器
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -