完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
LOCAL void gpio_int_handler(void) { uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS); //ETS_GPIO_INTR_DISABLE(); ETS_INTR_LOCK(); GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status); //GPIO_OUTPUT(GPIO_Pin_4,1); if (gpio_status & BIT(GPIO_ID_PIN(12))) { if( GPIO_ID_PIN(12) ) { printf("yes----------------n"); GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1); } else { printf("no-----------------n"); } } //ETS_GPIO_INTR_ENABLE(); ETS_INTR_UNLOCK(); } void user_init(void) { printf("SDK version:%sn", system_get_sdk_version()); GPIO_ConfigTypeDef gpio_conf4; gpio_conf4.GPIO_Pin = GPIO_Pin_4; gpio_conf4.GPIO_Mode = GPIO_Mode_Output; gpio_conf4.GPIO_Pullup = GPIO_PullUp_EN; gpio_conf4.GPIO_IntrType = GPIO_PIN_INTR_DISABLE; gpio_config(&gpio_conf4); GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1); GPIO_ConfigTypeDef gpio_conf12; ETS_INTR_LOCK(); gpio_conf12.GPIO_Pin = GPIO_Pin_12; gpio_conf12.GPIO_Mode = GPIO_Mode_Input; gpio_conf12.GPIO_Pullup = GPIO_PullUp_DIS; gpio_conf12.GPIO_IntrType = GPIO_PIN_INTR_POSEDGE; gpio_intr_handler_register(gpio_int_handler,NULL); gpio_config(&gpio_conf12); ETS_INTR_UNLOCK(); GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0); while(1); } |
|
相关推荐
1个回答
|
|
根据您提供的代码片段和问题描述,RTOS_SDK-1.4.2版本下GPIO中断服务程序不工作可能有以下几个原因:
1. **中断使能未设置**:确保在初始化GPIO时,已经正确设置了中断使能。例如,使用`GPIO_PIN_INT_TYPE_SET(GPIO_PIN_SOURCE, GPIO_PIN_INTR_ANYEDGE)`来设置中断类型,并使用`GPIO.pin[GPIO_PIN_SOURCE].int_type = GPIO_PIN_INTR_ANYEDGE;`来启用中断。 2. **中断服务程序注册问题**:确保您已经正确注册了中断服务程序。例如,使用`xt_set_interrupt_handler(ETS_GPIO_INTR_SOURCE, gpio_int_handler, NULL);`来注册中断服务程序。 3. **中断锁的使用**:您的代码中使用了`ETS_INTR_LOCK()`和`ETS_INTR_UNLOCK()`,这是正确的。但是,请确保在处理中断时不要长时间占用中断锁,否则可能会影响其他中断的处理。 4. **中断状态清除**:您的代码中使用了`GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);`来清除中断状态。这是正确的,但请确保这个操作在中断处理过程中是有效的。 5. **中断触发条件**:您的代码中使用了`if (gpio_status & BIT(GPIO_ID_PIN(12)))`来判断是否是GPIO12的中断。请确保GPIO12的配置和触发条件与您的预期一致。 6. **硬件问题**:如果以上软件层面的检查都没有问题,那么可能需要检查硬件连接是否正确,GPIO12是否被正确地连接到了中断源。 7. **RTOS配置问题**:由于您使用的是RTOS,需要确保RTOS的中断管理机制没有影响到GPIO中断的正常工作。检查RTOS的相关配置,确保中断优先级、中断服务程序调度等设置正确。 8. **编译和链接问题**:检查您的项目是否正确编译和链接了中断服务程序的代码。有时候,编译器优化或链接错误可能导致中断服务程序没有被正确调用。 9. **调试和日志**:增加更多的调试信息和日志输出,可以帮助您更准确地定位问题。例如,在中断服务程序的不同位置添加打印语句,观察中断是否被正确触发。 |
|
|
|
只有小组成员才能发言,加入小组>>
180个成员聚集在这个小组
加入小组448 浏览 1 评论
1443 浏览 1 评论
615浏览 6评论
511浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
489浏览 5评论
493浏览 4评论
478浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-1 02:59 , Processed in 0.928894 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号