- This topic has 5 个回复, 2 个参与人, and was last updated 4 years, 11 months 前 by 1234qwer.
-
作者帖子
-
十月 25, 2019 - 4:42 下午 #19421234qwer参与者
我想用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口
十月 25, 2019 - 5:37 下午 #1943Howard参与者由于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);十月 25, 2019 - 10:44 下午 #19451234qwer参与者好的谢谢
十月 28, 2019 - 9:53 上午 #19481234qwer参与者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灯 不亮,没有进到中断
十月 28, 2019 - 10:54 上午 #1949Howard参与者你就贴出部分代码,没办法帮过你查看。请检查BOARD_InitPins()里面管脚是不是配置正确,对应GPIO的clock是否enable。确保你的配置是对应你想要用的GPIO信号。因为你的宏定义有SW3,而初始化现实用的PORTB的第17管脚。
-
作者帖子
- 抱歉,回复话题必需登录。