📄 motorspeedcontrolbyarm101.txt
字号:
EasyARM101的始化函数
#define SPEED_PIN1 GPIO_PIN_0
#define SPEED_PIN2 GPIO_PIN_1
#define SSI (GPIO_PIN_2︱GPIO_PIN_3︱GPIO_PIN_4︱GPIO_PIN_5)
#define PWMA_PIN GPIO_PIN_0
#define KEY1_PIN GPIO_PIN_1
#define BUZZ_PIN GPIO_PIN_2
#define KEY2_PIN GPIO_PIN_3
#define CURRENT_PIN GPIO_PIN_4
#define LED2_PIN GPIO_PIN_5
#define LED1_PIN GPIO_PIN_6
…………
#define SSIBitRate 115200 /*设定SSI波特率*/
#define SSIDataWidth 8 /*设定SSI数据宽度*/
………
void Config(void)
{ (1)
SysctlperipheralEnable(SYSCTL_PERIPH_SSI); /*使能SSI外设*/
SysctlperipheralEnable(SYSCTL_PERIPH_TIMER0); /* 使能定时器0外设* /
SysctlperipheralEnable(SYSCTL_PERIPH_TIME1); /* 使能定时器1外设*/
SysctlperipheralEnable(SYSCTL_PERIPH_GPIOA); /*使能GPIOA口外设*/
SysctlperipheralEnable(SYSCTL_PERIPH_SSI); /*使能GPIOB口外设*/
SysctlperipheralEnable(SYSCTL_PERIPH_COMP0); /*使能比较口外设*/
SSIConfig(SSI_BASE,SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER, (2)
SSIBitRate,SSIDataWidth);
SSIEnable(SSI_BASE); GPIODirModeSet(GPIO_PORTA_BASE,SSI,GPIO_DIR_MODE_HW); (3)
GPIODirModeSet(GPIO_PORTA_BASE,SPEED_PIN1︱SPEED_PID2,GPIO_DIR_MODE_IN);
GPIOIntTypeSet(GPIO_PORTA_BASE,SPEED_PIN2︱SPEED_PIN2,GPIO_FALLING_EDGE);
GPIOpinIntEnable(GPIO_PORTA_BASE, SPEED_PIN1︱SPEED_PID2);
IntEnable(INT_GPIOA); /*设置GPIOA口部分*/
(4)
GPIODirModeSet(GPIO_PORTA_BASE,CURRENT_PIN);
/*设置模拟比较器管教*/
GPIODirModeSet(GPIO_PORTB_BASE,PWMA_PIN, GPIO_DIR_MODE_HW);
GPIODirModeSet(GPIO_PORTB_BASE,
(LED1_PIN︱LED2_PIN︱BUZZ_PIN),
GPIO_DIR_MODE_OUT);
/*设置LED和BUZZ*/
GPIODirModeSet(GPIO_PORTB_BASE,(KEY1_PIN︱KEY2_PIN), GPIO_DIR_MODE_IN);
GPIOIntTypeSet(GPIO_PORTB_BASE,(KEY1_PIN︱KEY2_PIN), GPIO_RISING_EDGE);
GPIOpinIntEnable (GPIO_PORTB_BASE,(KEY1_PIN︱KEY2_PIN);
/*置按键中断*/
IntEnable(INT_GPIOB);
(5)
TimerConfigure(TIMER1_BASE,(TIMER_CFG_16_BIT_PAIR︱
TIMER_CFG_A_ONE_SHOT ︱
TIMER_ CFG_B_ONE_SHOT);
TimerConfigure(TIMER0_BASE,(TIMER_CFG_16_BIT_PAIR︱
TIMER_CFG_A_ONE_PWM ︱
TIMER_ CFG_B_PERIODIC));
TimerLoadSet(TIMER0_BASE,TIMER_A,PWMLoadValue);
TimerControlLevel(TIMER0_BASE, TIMER_A,1);
TimerPresscaleSet(TIMER0_BASE, TIMER_B,100);
TimerPresscaleSet(TIMER0_BASE, TIMER_A,KeyAS);
TimerPresscaleSet(TIMER0_BASE, TIMER_B,KeyAS);
TimerEnable(TIMER0_BASE, TIMER_BOTH);
TimerIntEnable(TIMER1_BASE,(TIMER_TIMA_TIMEOUT︱TIMER_TIMB_TIMEOUT));
IntEnable(INT_TIMERIA);
IntEnable(INT_TIMERIB);
/*初始化定时器*/
(6)
ComparatorRef(COMP_BASE,COM_REP_0_825V); /*内部参考电压0.825V*/
ComparatorRef(COMP_BASE,COMP_ASRCP_REF);
}
主函数
Int main (void)
{
Unsigned char CompCnt=0;
Config(); (1)
BUZZ_OFF();
TimerMatchSet(TIMER0_BASE,TIMER_A,
(PWMLoadValue-(PWMDutyCycle*PWMLoadValue/100)));
SSIDataPut(SSI_BASE,DISP_TAB[PWMDutyCycle/10]);
While(1){
If(!ComparatorValueGet(COMP_BASE,0)) { /*判断是否堵转*/
If(CompCnt<250){
CompCnt++;
}else{
BUZZ_ON(); /*持续堵转打开蜂鸣器*/
}
}else{
If(CompCnt>0){
CompCnt-;
}else{
BUZZ_OFF(); /*不堵转则关闭蜂鸣器*/
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -