AT917X256下UCOS无法进FIQ中断,求助?

[复制链接]
3808|2
 楼主| lyhstudio 发表于 2008-4-24 12:28 | 显示全部楼层 |阅读模式
<br />我的UCOS无法进FIQ中断,困扰一周了,请大伙看看问题出在哪!<br /><br />UCOS是下载的官方的源码,在IAR上移植好的.我在上面加了中断,加中断的方法和在单任务下的一样:串口0,串口1的初始化和中断设置<br /><br />void&nbsp;Usart_init&nbsp;(&nbsp;void&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_PIOA-&gt&nbsp;&nbsp;&nbsp;&nbsp;PIO_PDR=&nbsp;(AT91C_PA0_RXD0)&nbsp;|(AT91C_PA1_TXD0&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,&nbsp;(AT91C_PA0_RXD0)&nbsp;|(AT91C_PA1_TXD0&nbsp;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;First,&nbsp;enable&nbsp;the&nbsp;clock&nbsp;of&nbsp;the&nbsp;USART<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PMC_EnablePeriphClock&nbsp;(&nbsp;AT91C_BASE_PMC,&nbsp;1&nbsp;&lt&lt&nbsp;AT91C_ID_US0&nbsp;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Usart&nbsp;Configure<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_US_Configure&nbsp;(AT91C_BASE_US0,&nbsp;AT91B_MCK,&nbsp;AT91C_US_ASYNC_MODE,&nbsp;AT91_BAUD_RATE,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;usart<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RXEN&nbsp;|&nbsp;AT91C_US_TXEN;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;Enable&nbsp;USART&nbsp;IT&nbsp;error&nbsp;and&nbsp;RXRDY<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AT91F_US_EnableIt(AT91C_BASE_US0,AT91C_US_TIMEOUT&nbsp;|&nbsp;AT91C_US_FRAME&nbsp;|&nbsp;AT91C_US_OVRE&nbsp;|AT91C_US_RXRDY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_US_EnableIt(AT91C_BASE_US0,AT91C_US_RXRDY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;open&nbsp;Usart&nbsp;0&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_ConfigureIt&nbsp;(&nbsp;AT91C_BASE_AIC,&nbsp;AT91C_ID_US0,&nbsp;USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,&nbsp;Usart0_c_irq_handler);<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_EnableIt&nbsp;(AT91C_BASE_AIC,&nbsp;AT91C_ID_US0);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_PIOA-&gtPIO_PDR=&nbsp;(AT91C_PA5_RXD1)&nbsp;|(AT91C_PA6_TXD1&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,&nbsp;(AT91C_PA5_RXD1)&nbsp;|(AT91C_PA6_TXD1&nbsp;));<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;First,&nbsp;enable&nbsp;the&nbsp;clock&nbsp;of&nbsp;the&nbsp;USART<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PMC_EnablePeriphClock&nbsp;(&nbsp;AT91C_BASE_PMC,&nbsp;1&nbsp;&lt&lt&nbsp;AT91C_ID_US1&nbsp;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Usart&nbsp;Configure<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_US_Configure&nbsp;(AT91C_BASE_US1,&nbsp;AT91B_MCK,&nbsp;AT91C_US_ASYNC_MODE,9600,&nbsp;0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;usart<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US1-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RXEN&nbsp;|&nbsp;AT91C_US_TXEN;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;Enable&nbsp;USART&nbsp;IT&nbsp;error&nbsp;and&nbsp;RXRDY<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AT91F_US_EnableIt(AT91C_BASE_US1,AT91C_US_TIMEOUT&nbsp;|&nbsp;AT91C_US_FRAME&nbsp;|&nbsp;AT91C_US_OVRE&nbsp;|AT91C_US_RXRDY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_US_EnableIt(AT91C_BASE_US1,AT91C_US_RXRDY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;open&nbsp;Usart&nbsp;1&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_ConfigureIt&nbsp;(&nbsp;AT91C_BASE_AIC,&nbsp;AT91C_ID_US1,&nbsp;USART1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,&nbsp;Usart1_c_irq_handler);<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_EnableIt&nbsp;(AT91C_BASE_AIC,&nbsp;AT91C_ID_US1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;LOCAL_DEBUG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGU_WrStr(&quot;
&nbsp;USART&nbsp;initialization&nbsp;ok!!&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endif<br />}<br /><br /><br />经过测试以上代码都能正常运行,也能进中断.于是我加入了FIQ中断代码如下:<br /><br /><br />Void&nbsp;Fiq_Init(void)<br />{<br />AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,1&lt&lt29,0);<br />AT91F_PIO_CfgInput(AT91C_BASE_PIOA,&nbsp;1&lt&lt29);<br />AT91F_PIO_InputFilterEnable(AT91C_BASE_PIOA,&nbsp;1&lt&lt29);&nbsp;&nbsp;&nbsp;&nbsp;<br />AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,&nbsp;1&lt&lt29);<br />AT91F_AIC_ConfigureIt(AT91C_BASE_AIC&nbsp;,&nbsp;AT91C_ID_FIQ,FIQ_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE,&nbsp;FIQ_init_handler&nbsp;&nbsp;&nbsp;);<br />&nbsp;AT91F_AIC_EnableIt&nbsp;(AT91C_BASE_AIC,&nbsp;AT91C_ID_FIQ);<br />//&nbsp;generate&nbsp;FIQ&nbsp;interrupt&nbsp;by&nbsp;software<br />AT91F_AIC_Trig&nbsp;(AT91C_BASE_AIC,AT91C_ID_FIQ)&nbsp;;<br />}<br />用7X256的PA29的外设A,即FIQ,有下降沿触发中断.这个函数在单任务下运行没问题.但移植到UCOS中后,执行到AT91F_AIC_Trig&nbsp;(AT91C_BASE_AIC,AT91C_ID_FIQ)&nbsp;;就会死机,先将该句屏蔽.<br />开始仿真发现下降沿来临时触发了中断,程序跳转到了OS_CPU_A.ASM中的OS_CPU_ARM_EXCEPT_FIQ_HANDLER,执行FIQ的相关处理.然后执行OS_EXCEPT_HANDLER&nbsp;,但没有执行我定义的FIQ_init_handler()函数.<br />另外仿真时有跳转到OS_CPU_ARM_EXCEPT_DATA_ABORT_HANDLER的情况.<br /><br />OS_EXCEPT_HANDLER&nbsp;(CPU_INT32U&nbsp;&nbsp;except_id)在OS_CPU_A.ASM中调用时,其参数except_id是怎么确定的?<br /><br /><br />如果不让UCOS管理FIQ中断应怎样设置呢?<br /><br />请各位帮帮忙!!谢谢<br />
freedomzlp 发表于 2012-3-8 12:04 | 显示全部楼层
同样的问题!~芯片是LPC2468  顶一下!~~
1# lyhstudio
freedomzlp 发表于 2012-3-8 12:08 | 显示全部楼层
你好,关于ucosii系统中如何管理FIQ中断的问题,你解决了嘛?
我也遇到这样的问题,希望能得到你的帮助!~
我用的是LPC2468,虽然芯片不一样,但原理应该是一样的!~谢谢 先。

我的邮箱是DTV-ZLP@126.COM
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部