初级会员

- 积分
- 91
- 金钱
- 91
- 注册时间
- 2015-8-28
- 在线时间
- 21 小时
|
本帖最后由 lilibo 于 2026-3-9 18:10 编辑
问题:无法进入中断设置时的回调函数,但测试可以检测到电平的变化,可能怀疑设备树中断没配置好,但不清楚需要配置什么。
我是用一个输出引脚去控制中断引脚触发低电平,但中断函数却无法进入。
GIC_AMP_IRQ_CFG_ROUTE(36, 0xd0, CPU_GET_AFFINITY(0, 2))这是增加的但是也没用,不知什么原因。
1.设备树配置
2.测试代码
/* 引脚定义 */
#define LED_PIN_NUM 32 // GPIO1PA0引脚(可根据实际板卡修改)
#define KEY_PIN_1 33 // GPIO1PA1引脚(可根据实际板卡修改)
#define KEY_PIN_2 34 // GPIO1PA2引脚(可根据实际板卡修改)
#define KEY_PIN_3 35 // GPIO1PA3引脚(可根据实际板卡修改)
// 按键中断服务函数
void button_callback(void *args)
{
rt_kprintf("Button pressed! LED toggled.\n");
}
int main(int argc, char **argv)
{
rt_thread_t init_thread;
uint8_t key1,key2,key3;
static uint8_t cnt= 0;
rt_kprintf("Hi, this is RT-Thread!!\n");
/* 初始化LED引脚为输出模式 */
rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
/* 初始化KEY引脚为输入模式(上拉) */
rt_pin_mode(KEY_PIN_1, PIN_MODE_INPUT_PULLUP);
rt_pin_mode(KEY_PIN_2, PIN_MODE_INPUT_PULLUP);
rt_pin_mode(KEY_PIN_3, PIN_MODE_INPUT_PULLUP);
rt_pin_attach_irq(KEY_PIN_2, PIN_IRQ_MODE_FALLING, button_callback, RT_NULL);
rt_pin_irq_enable(KEY_PIN_2, PIN_IRQ_ENABLE);
init_thread = rt_thread_create("test",
rt_test_thread_entry, RT_NULL,
2048, 8, 20);
if (init_thread != RT_NULL)
rt_thread_startup(init_thread);
#ifdef RT_USING_NEW_OTA
/*
* rk_ota_set_boot_success will set `successful_boot` flag to 1.
* Move this function to a location where all of your service
* has finished to make sure to set `successful_boot` after
* all of your main service has succeeded.
*/
rk_ota_set_boot_success();
#endif
while (1)
{
rt_thread_mdelay(5000) ;
rt_pin_write(LED_PIN_NUM,cnt++%2);
key1=rt_pin_read(KEY_PIN_1);
key2=rt_pin_read(KEY_PIN_2);
key3=rt_pin_read(KEY_PIN_3);
RTTLIB_USR_TRACE_DEBUG("key1:%d,key2:%d,key3:%d!!\n",key1,key2,key3);
}
return 0;
}
|
-
|