论坛回复已创建
-
作者帖子
-
Howard参与者你就贴出部分代码,没办法帮过你查看。请检查BOARD_InitPins()里面管脚是不是配置正确,对应GPIO的clock是否enable。确保你的配置是对应你想要用的GPIO信号。因为你的宏定义有SW3,而初始化现实用的PORTB的第17管脚。
Howard参与者没有相应的图形化配置工具可用。建议移植前看看基本的文档,像memory map,interrupt/vector table, 启动模式等。
Howard参与者由于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 - 2:33 下午 回复道: \rv32m1_vega\driver_examples\gpio\input_interrupt 仿照这么这个例子改为其他按键,例如SW3,一直不行? #1940
Howard参与者- GPIOE是 Rapid/Fast GPIO,还需要打开Rapid/Fast GPIO 的clock,所以在BOARD_InitPins()中要enable rgpio clock
void BOARD_InitPins(void) {
CLOCK_EnableClock(kCLOCK_PortA); /* Clock Gate Control: 0x01u */
CLOCK_EnableClock(kCLOCK_PortC); /* Clock Gate Control: 0x01u */
CLOCK_EnableClock(kCLOCK_PortE); /* Clock Gate Control: 0x01u */
CLOCK_EnableClock(kCLOCK_Rgpio1);……
}
- 由于RISC-V中断只支持32个外部硬件中断信号,所以更多的中断信号是通过INTMUX模块来复用的。所以要初始化INTMUX这个模块。所以要在程序中添加INTMUX 驱动,即加入rv32m1_sdk_riscv\devices\RV32M1\drivers\fsl_intmux.c文件,然后在gpio_input_interrupt.c文件中 #include “fsl_intmux.h”,并且在初始化GPIOE中断加入红色代码行
/* Init input switch GPIO. */
INTMUX_Init(INTMUX0);
INTMUX_EnableInterrupt(INTMUX0, 0, PORTE_IRQn);PORT_SetPinInterruptConfig(BOARD_SW3_PORT, BOARD_SW3_GPIO_PIN, kPORT_InterruptFallingEdge);
EnableIRQ(BOARD_SW3_IRQ);
GPIO_PinInit(BOARD_SW3_GPIO, BOARD_SW3_GPIO_PIN, &sw_config);- 其它修改对照SW2做对应修改
Howard参与者@cyril0313 加微信 iamhowardliu
-
作者帖子