请教:第一次使用rtt,为什么添加了外部中断后,
void App_isr_adc(void){
value = ReadADC();
rt_kprintf("adc=%ld\r\n",value);
}
void EXTI15_10_IRQHandler(void)
{
extern void App_isr_adc(void);
/* enter interrupt */
rt_interrupt_enter();
if(EXTI_GetITStatus(EXTI_Line11)!= RESET)
{
App_isr_adc();
EXTI_ClearITPendingBit(EXTI_Line11);
}
/* leave interrupt */
rt_interrupt_leave();
}
用的是原先带的led.c测试下,如果不启用外部中断,可以正常运行,
led可以闪,finish组件也正常运行,
但加了外部中断后,运行就不正常了,
led不闪了,,finish组件也不正常运行了,外部中断触发读取adc的程序,依然运行,不停的从串口发出value值,说明中断没有问题!
请教一下,
还有cm3中处理中断,能否按照规范的方式来处理isr? "不停的从串口发出value值"有多快? 可能全被这个占了?
“能否按照规范的方式来处理isr?” 规范的方式 == ?
串口中断中下个断点,看是否有收到接收中断。
ReadADC(); 什么样的? 太费时的不应该放在中断中,或中断的优先级要调低。 readadc应该很快的,大概50次/s,
把rt_kprintf("adc=%ld\r\n",value);屏蔽掉也不行的。应该不是占用的问题,
占用的话,应该led也会闪的 把速度调整到5次/s也不行,奇怪, 按照
void rt hw interrupt xx handler(void)
{
/* 通知RT-Thread进入中断模式 */
rt interrupt enter();
/* ... 中断处理 */
/* 通知RT-Thread离开中断模式 */
rt interrupt leave();
}
文档中的规范来出来,定义设备啥的 回复【3楼】lovegoogle
把速度调整到5次/s也不行,奇怪,
-----------------------------------------------------------------------
很慢了,可以先把速度再慢些,几秒一次。
然后确认是几秒才来一次中断。
看时间花在了哪里。
并计算一下 ReadADC(); 执行需要的时间。 应该是有问题没有找出。 回复【4楼】lovegoogle
-----------------------------------------------------------------------
CM3是向量中断。 每个中断入口独立,就按你那样写。 adc需要发个命令字,才能够启动,那启动外部中断在哪里启动呢?现在是在rt_application_init中启动的, readadc非常块,远小于1ms, 回复【8楼】lovegoogle
-----------------------------------------------------------------------
所以你得去调试下看时间都耗费在了哪里。 解决了,是程序中出现死循环的情况了,谢谢各位了
-------------------------------
页:
[1]