功能现象
按键SOC_BUTTON_U_GPIO_MASK持续按下使其正转加速,按键SOC_BUTTON_D_GPIO_MASK持续按下使其正转减速,按键SOC_BUTTON_L_GPIO_MASK持续按下使其反转加速,按键SOC_BUTTON_R_GPIO_MASK持续按下使其反转减速,按中间按键使其停止。
基于自带pilc模板改编,主要是在中断回调函数里,写一些pwm的控制,
void plic_btn_handler(void)
{
int mask;
printf("Enter PLIC GPIOA Interrupt\n");
mask = gpio_clear_interrupt(GPIOA);
switch (mask) {
case SOC_BUTTON_U_GPIO_MASK:
gpio_write(GPIOB,1<<2,0);
gpio_write(GPIOB,1<<4,1);
i++;
ch0=100*i;
if(ch0>=1000)
{
ch0=999;
}
if(ch0<=0)
{
ch0=0;
}
pwm_timer_channel_config(PWM_TIMER2, PWM_TIMER_TH_CHANNEL0, ch0, ADV_TIMER_OP_RSTSET);
gpio_toggle(GPIOA, SOC_LED_0_GPIO_MASK);
break;
case SOC_BUTTON_D_GPIO_MASK:
i--;
gpio_write(GPIOB,1<<2,0);
gpio_write(GPIOB,1<<4,1);
ch0=100*i;
if(ch0>=1000)
{
ch0=999;
}
if(ch0<=0)
{
ch0=0;
}
pwm_timer_channel_config(PWM_TIMER2, PWM_TIMER_TH_CHANNEL0, ch0, ADV_TIMER_OP_RSTSET);
gpio_toggle(GPIOA, SOC_LED_1_GPIO_MASK);
printf("LED 1 Toggled \n");
break;
case SOC_BUTTON_L_GPIO_MASK:
i++;
gpio_write(GPIOB,1<<2,1);
gpio_write(GPIOB,1<<4,0);
ch0=100*i;
if(ch0>=1000)
{
ch0=999;
}
if(ch0<=0)
{
ch0=0;
}
pwm_timer_channel_config(PWM_TIMER2, PWM_TIMER_TH_CHANNEL0, ch0, ADV_TIMER_OP_RSTSET);