外部中断开启LED灯的例程

Home 论坛 开发和更新问题 外部中断开启LED灯的例程

正在查看 5 帖子:1-5 (共 6 个帖子)
  • 作者
    帖子
  • #1942
    1234qwer1234qwer
    参与者

    我想用PB的IO口输入外部中断,而不是按键的PORTA0 ,但是我B口中断返回一直是failed 无法开启,是什么问题呢

    代码

    gpio_pin_config_t sw_config = {
    kGPIO_DigitalInput, 0,
    };
    gpio_pin_config_t sw3_config = {
    kGPIO_DigitalInput, 0,
    };
    /* Define the init structure for the output LED pin 灯 */
    gpio_pin_config_t led_config = {
    kGPIO_DigitalOutput, 0,
    };

    BOARD_InitPins();
    BOARD_BootClockRUN(); //时钟
    BOARD_InitDebugConsole(); //串口
    //a= GPIO_ReadPinInput(GPIOB,17u);
    /* Print a note to terminal. */
    PRINTF(“\r\n GPIO Driver example\r\n”);
    PRINTF(“\r\n Press %s to turn on/off a LED \r\n”, BOARD_SW_NAME);
    PRINTF(“\r\n %d”,a);
    /* Init input switch GPIO. */

    // EnableIRQ(BOARD_SW_IRQ);

    PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);

    PORT_SetPinInterruptConfig(BOARD_SW3_PORT, BOARD_SW3_GPIO_PIN, kPORT_InterruptFallingEdge);
    PRINTF(“%d \n”,EnableIRQ(BOARD_SW3_IRQ));//portb
    PRINTF(“%d \n”,EnableIRQ(BOARD_SW_IRQ));
    //DisableIRQ(BOARD_SW_IRQ);

    GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
    GPIO_PinInit(BOARD_SW3_GPIO, BOARD_SW3_GPIO_PIN, &sw3_config);

    /* Init output LED GPIO. */
    GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);

    这个sw3就是我自己设置的IO口

    #1943
    HowardHoward
    参与者

    由于RISC-V中断只支持32个外部硬件中断信号,更多的中断信号是通过INTMUX模块来复用的。根据RV32M1的技术参考文档的3.4.3节的Table 3-23,可以看到GPIOB的中断信号是通过INTMUX来连接到RISC-V的。所以要初始化INTMUX这个模块。所以要在程序中添加INTMUX 驱动,即加入rv32m1_sdk_riscv\devices\RV32M1\drivers\fsl_intmux.c文件,然后在你的 .c文件中#include “fsl_intmux.h”,并且添加下面INTMUX初始化和中断配置代码:

    INTMUX_Init(INTMUX0);
    INTMUX_EnableInterrupt(INTMUX0, 0, PORTB_IRQn);

    #1945
    1234qwer1234qwer
    参与者

    好的谢谢

    #1948
    1234qwer1234qwer
    参与者

    @Howard

    BOARD_InitPins();
    BOARD_BootClockRUN(); //时钟
    BOARD_InitDebugConsole(); //串口
    INTMUX_Init(INTMUX0);
    INTMUX_EnableInterrupt(INTMUX0, 0, PORTB_IRQn);

    a= GPIO_ReadPinInput(GPIOB,17u);
    /* Print a note to terminal. */
    PRINTF(“\r\n GPIO Driver example\r\n”);
    PRINTF(“\r\n Press %s to turn on/off a LED \r\n”, BOARD_SW_NAME);
    PRINTF(“\r\n %d”,a);
    /* Init input switch GPIO. */

    PORT_SetPinInterruptConfig(BOARD_SW3_PORT, BOARD_SW3_GPIO_PIN, kPORT_InterruptFallingEdge);
    EnableIRQ(BOARD_SW3_IRQ);
    GPIO_PinInit(BOARD_SW3_GPIO, BOARD_SW3_GPIO_PIN, &sw3_config);

    我修改成这样过后还是不行

    中断我是这样写的

    void BOARD_SW3_IRQ_HANDLER(void){
    GPIO_ClearPinsInterruptFlags(BOARD_SW3_GPIO, 1U << BOARD_SW3_GPIO_PIN);
    PRINTF(“\r\n gdd\r\n”);
    /* Change state of button. */
    g_ButtonPress = true;
    }

    led灯 不亮,没有进到中断

    #1949
    HowardHoward
    参与者

    你就贴出部分代码,没办法帮过你查看。请检查BOARD_InitPins()里面管脚是不是配置正确,对应GPIO的clock是否enable。确保你的配置是对应你想要用的GPIO信号。因为你的宏定义有SW3,而初始化现实用的PORTB的第17管脚。

     

     

正在查看 5 帖子:1-5 (共 6 个帖子)
  • 抱歉,回复话题必需登录。