欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

motorctrl.c

博创2410的实验代码
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 + -