lovegoogle 发表于 2012-2-9 22:39:42

请教:第一次使用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?

aozima 发表于 2012-2-9 22:55:24

"不停的从串口发出value值"有多快? 可能全被这个占了?

“能否按照规范的方式来处理isr?”   规范的方式 == ?

串口中断中下个断点,看是否有收到接收中断。

ReadADC(); 什么样的? 太费时的不应该放在中断中,或中断的优先级要调低。

lovegoogle 发表于 2012-2-9 22:58:47

readadc应该很快的,大概50次/s,

把rt_kprintf("adc=%ld\r\n",value);屏蔽掉也不行的。应该不是占用的问题,
占用的话,应该led也会闪的

lovegoogle 发表于 2012-2-9 22:59:38

把速度调整到5次/s也不行,奇怪,

lovegoogle 发表于 2012-2-9 23:01:39

按照
void rt hw interrupt xx handler(void)
{
/* 通知RT-Thread进入中断模式 */
rt interrupt enter();
/* ... 中断处理 */
/* 通知RT-Thread离开中断模式 */
rt interrupt leave();
}
文档中的规范来出来,定义设备啥的

aozima 发表于 2012-2-9 23:06:01

回复【3楼】lovegoogle
把速度调整到5次/s也不行,奇怪,
-----------------------------------------------------------------------
很慢了,可以先把速度再慢些,几秒一次。
然后确认是几秒才来一次中断。
看时间花在了哪里。

并计算一下 ReadADC(); 执行需要的时间。 应该是有问题没有找出。

aozima 发表于 2012-2-9 23:06:38

回复【4楼】lovegoogle
-----------------------------------------------------------------------
CM3是向量中断。 每个中断入口独立,就按你那样写。

lovegoogle 发表于 2012-2-10 09:10:23

adc需要发个命令字,才能够启动,那启动外部中断在哪里启动呢?现在是在rt_application_init中启动的,

lovegoogle 发表于 2012-2-10 14:35:31

readadc非常块,远小于1ms,

aozima 发表于 2012-2-10 14:43:40

回复【8楼】lovegoogle
-----------------------------------------------------------------------
所以你得去调试下看时间都耗费在了哪里。

lovegoogle 发表于 2012-2-11 22:02:13

解决了,是程序中出现死循环的情况了,谢谢各位了

-------------------------------
页: [1]
查看完整版本: 请教:第一次使用rtt,为什么添加了外部中断后,