[ZLG-ARM] 为什么中断标志自动清除了

[复制链接]
1944|2
 楼主| 云痕 发表于 2008-4-24 14:48 | 显示全部楼层 |阅读模式
我在写中断模式的串口驱动<br />主程序:<br />UART0_IRQ_init(9600);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl5&nbsp;=&nbsp;0x20|6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;UART0中断通道分5<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr5&nbsp;=&nbsp;(int)UART0_Handler;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置UART0向量地址<br />&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&lt&lt6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能UART0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart0_SendString_IRQ(&quot;
12345678012345678
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />void&nbsp;UART0_IRQ_init(int&nbsp;UART0_BPS)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;Fdiv0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;&=&nbsp;~(0xF&nbsp;&lt&lt&nbsp;4);<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;|=&nbsp;&nbsp;(0x5&nbsp;&lt&lt&nbsp;4);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x83;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置除数锁存位,DLAB&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Fdiv0&nbsp;=&nbsp;(Fpclk&nbsp;/&nbsp;16)&nbsp;/&nbsp;UART0_BPS;//&nbsp;设置波特率<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLM&nbsp;=&nbsp;Fdiv0&nbsp;/&nbsp;256;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLL&nbsp;=&nbsp;Fdiv0&nbsp;%&nbsp;256;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x03;&nbsp;&nbsp;&nbsp;&nbsp;//清除锁存,并设置工作模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;//U0FCR&nbsp;=&nbsp;0x87;//&nbsp;使能FIFO,并设置触发点为8字节,复位T0FIFO,R0FIFO&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0FCR&nbsp;=&nbsp;0x81;<br />&nbsp;&nbsp;&nbsp;&nbsp;UART0_FIFO_LENGTH&nbsp;=&nbsp;8&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0IER&nbsp;=&nbsp;0x03;&nbsp;&nbsp;//RBR,THRE中断使能<br />&nbsp;&nbsp;&nbsp;&nbsp;Fdiv0&nbsp;=&nbsp;U0IIR;&nbsp;//清除&nbsp;<br />}<br />void&nbsp;Uart0_SendString_IRQ(char&nbsp;*pt)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*&nbsp;pUART0;<br />&nbsp;&nbsp;&nbsp;&nbsp;pUART0&nbsp;=&nbsp;pt<br />U0TER&nbsp;=&nbsp;0x0;//停止发送<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!(U0LSR&nbsp;&&nbsp;0x40))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待发送缓冲为空<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=FIFO_SIZE;i&gt0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(*pUART0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR&nbsp;=&nbsp;*pUART0++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0TER&nbsp;=&nbsp;0x80;&nbsp;//开始发送<br />&nbsp;&nbsp;&nbsp;&nbsp;i++;&nbsp;&nbsp;&nbsp;//标号1<br />&nbsp;&nbsp;&nbsp;&nbsp;i++;&nbsp;&nbsp;&nbsp;//标号2&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;&nbsp;UART0_Handler&nbsp;(void)&nbsp;&nbsp;__irq<br />{<br />}<br /><br />箭头位于标号1行首时,VICIRQStatus=0x40,VICRawIntr=0x00021048,VICIntEnable=0x40,<br /><br />VICSWPrioMask=0xffff,0xfffff030=0xf;U0IIR=0xc2,U0LSR=0x60<br />箭头位于标号2行首时,U0相关寄存器中,U0IIR=0xc1,别的没变,发送中断消失了;<br /><br />VICIRQStatus=0x00,VICRawIntr=0x00021008&nbsp;其余没变,中断标志也消失了,之后返回主程序顺序执行。<br />主程序后面是外部中断,外部中断正常能响应的<br /><br />弄了2天了,还是搞不定
 楼主| 云痕 发表于 2008-4-24 22:55 | 显示全部楼层

就没有人肯指点下么?

  
zlgarm 发表于 2008-4-25 15:31 | 显示全部楼层

回复

云痕&nbsp;您好:<br />发生“THRE”发送中断后,有两种情况可以清除中断:<br />1、读取UART中断标志寄存器,可以清除发送中断标志;<br />2、对UART发送器保持寄存器UnTHR执行写操作也可以清除发送中断。<br />根据以上两种情况,您可以仔细分析代码执行了哪一个操作。<br />预祝早日解决问题!<br />on&nbsp;duty:&nbsp;LBH
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

75

帖子

0

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