打印
[G32A]

极海G32A1465汽车通用MCU评估板测试02:按键中断控制LED亮灭

[复制链接]
31|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一:G32产品中的 Cortex-M4F 内核集成了嵌套向量中断控制器(Nested VectoredInterrupt Controller(NVIC)),它和内核紧密耦合,能高效、低延迟处理异常和中断、电源管理控制。
主要如下:
16个可编程的优先级(使用4位的中断优先级)
NVIC的不可屏蔽中断请求由外部 NMI信号控制配置
NMI信号复用的引脚,才可生成不可屏蔽中断请求
这里,我测试使用板载的按键来控制LED的闪烁,使用按键的IO口触发中断。
二:硬件设计:
2.1 按键原理图如下:

如上所示:使用PMC12和PMC13引脚来当作外部的中断的触发来源:
三:软件代码编写:

按键中断处理函数编写:发现官方的例程中一个小的 bug;
void KEY_IRQHandler(void)
{
    /* Get interrupt flag */
    if((PINS_ReadPmInt**(PMC) & (1<<KEY1_PIN)) != 0)
    {
//        LED_On(LED_GREEN_PIN);

                                PINS_ClrPins(LED_GREEN_GPIO_BASE, 1U << LED_GREEN_PIN);
        /* Clear interrupt flag */
        PINS_ClrPinInt**Cmd(PMC, KEY1_PIN);
    }
    else if((PINS_ReadPmInt**(PMC) & (1<<KEY2_PIN)) != 0)
    {
//        LED_Off(LED_GREEN_PIN);

                                PINS_WritePin(GPIOD, 0U, 1);
                                PINS_WritePin(GPIOD, 15U, 1);
                                PINS_WritePin(GPIOD, 16U, 1);
        /* Clear interrupt flag */
        PINS_ClrPinInt**Cmd(PMC, KEY2_PIN);
    }
    else
    {
        /* Clear interrupt flags for all pins in the port */
        PINS_ClrPmInt**Cmd(PMC);
    }
}

在官方的代码文件:PINS/PINS_ISR中进行测试,发现 当按下按键时候,LED不能正常工作,LED_ON 代码不能改变IO口的电平,这里做一个简单的修改,主代码如上所示,修改完成之后,按下key1 按键时 绿色灯工作,按下key2按键时,绿色灯熄灭。
测试功能如下所示:

解决办法:
这里官方定义的函数LED_ON 原型如下所示:测试发现函数本身没有任何问题,只是在调用时候出现问题。
/*!
* [url=home.php?mod=space&uid=247401]@brief[/url] Turn on requested LED
*
* @param num  LED number
*
* @retval None.
*/
void LED_On(uint32_t num)
{
    if (num < LED_COUNT)
    {
        PINS_ClrPins(ledGPIO[num], 1U << ledPIN[num]);
    }
}
这里定义的LED数组为
GPIO_T* ledGPIO[3] = {LED_RED_GPIO_BASE, LED_GREEN_GPIO_BASE, LED_BLUE_GPIO_BASE};
这里操作的时候需要,直接操作为:LED_ON(0);LED_ON(1);LED_ON(2); 而不应该去操作 LED_ON(LED_GREEN_PIN);
修改之后,测试代码功能正常。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

116

帖子

0

粉丝