[ZLG-ARM] 串口0不能产生中断

[复制链接]
2599|7
 楼主| jxlxh 发表于 2007-4-23 15:09 | 显示全部楼层 |阅读模式
问题:<br />&nbsp;&nbsp;U0IER寄存器不能初始化,不能赋值,我想产生发送中断,数据能发送,但不能产生中断,查看后发现U0IER始终是0,为什么?CPSR已设置好,在AXD中强行修改U0IER后,继续运行则能产生中断。<br />周工能否指教?<br /><br />串口初始化程序如下:<br />void&nbsp;uart0_config(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;ui1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;baudrate<br />&nbsp;&nbsp;&nbsp;&nbsp;uart0_baudrate&nbsp;=&nbsp;9600;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;8/n/1,dlab=1<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x83;<br />&nbsp;&nbsp;&nbsp;&nbsp;ui1&nbsp;=&nbsp;Fpclk/(uart0_baudrate*16);<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLL&nbsp;=&nbsp;ui1%256;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLM&nbsp;=&nbsp;ui1/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0--&gt&nbsp;dlab<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;fifo<br />&nbsp;&nbsp;&nbsp;&nbsp;U0FCR&nbsp;=&nbsp;0x81;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;p0.0&nbsp;set&nbsp;as&nbsp;txd,01--&gtpinsel0&lt1:0&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;p0.1&nbsp;set&nbsp;as&nbsp;rxd,01--&gtpinsel0&lt3:2&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;|=&nbsp;0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;interrupt&nbsp;vic<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;uart0&nbsp;--&gt&nbsp;irq<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;uart0&nbsp;isr<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr0&nbsp;=&nbsp;(uint32)uart0isr;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;uart0&nbsp;--&gt&nbsp;slot0<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0&nbsp;=&nbsp;0x26;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;enable&nbsp;uart0<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;0x40;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;THRE&nbsp;enable<br />&nbsp;&nbsp;&nbsp;&nbsp;U0IER&nbsp;=&nbsp;0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;enable&nbsp;uart0<br />&nbsp;&nbsp;&nbsp;&nbsp;PCONP&nbsp;|=&nbsp;0x08;<br />}
zlgARM 发表于 2007-4-23 21:08 | 显示全部楼层

jxlxh

你的DLAB没设置好。
 楼主| jxlxh 发表于 2007-4-24 07:52 | 显示全部楼层

DLAB在前面设置好了呀

DLAB在前面不是清零了吗?不会是要置1把?<br />U0LCR&nbsp;=&nbsp;0x03;
kernel99 发表于 2007-4-24 13:14 | 显示全部楼层

U0IER = 0x02的设置

个人认为:U0IER&nbsp;=&nbsp;0x02不太合适.在&lt&lt深入浅出ARM7--LPC213X/4X&gt&gt这本书里的P168,如设置U0IER&nbsp;=&nbsp;0x02,理解上是觉得使能THRE中断,该中断状态可以从U0LSR.5中读出.&nbsp;(个人认为)U0LSR.5(THRE)置1&nbsp;就只代表&nbsp;U0THR为空,并不代表UART&nbsp;T0的移位寄存器U0TSR也为空.所以就不能确定数据已经通过串行输出引脚TxD发送出了,所以不能产生有效的串口发送中断.
 楼主| jxlxh 发表于 2007-4-24 17:58 | 显示全部楼层

解决

通过试验发现,要先使能串口,然后再设置,则一切OK;<br />在使能串口前设置串口波特率,也出现不能设置现象,但有时候好像又可以设置,如我第一次设置UART0波特率为9600,就成功了,后来想该波特率的时候,就出现不能修改的情况,请ZLGARM予以解释!<br />ZLGARM前面的答复不能令人满意啊!
 楼主| jxlxh 发表于 2007-4-24 18:04 | 显示全部楼层

to:kernal99

首先谢谢你的回答!<br />数据手册中写的明白,U0IIR中的THRE中断标志在UART0&nbsp;THR&nbsp;FIFO为空时就激活,它和TSR没有关系。
zlgARM 发表于 2007-4-24 20:54 | 显示全部楼层

jxlxh

您是自己摸索着写UART程序?请您找来例程对照,一看就明白了。把部件的寄存器和操作原理先搞清楚,才能写出正确的程序。<br />不能改波特率,肯定不是你的芯片的问题。同样的芯片我们都用得很好。你说你不能改波特率,很可能是你的使用方式不对的问题。这样的话,我就不知如何解释了。<br />还是建议您找来例程看一下。KEIL的UART例程不错,可去其网站上下载来看。<br />如果您对例程有看不懂,对UART的数据手册说明有看不懂的地方,可以提出来,我试着为您解答。<br />
zlgARM 发表于 2007-4-24 21:23 | 显示全部楼层

jxlxh

您也可以参照一下我们的LPC2300&nbsp;数据手册&nbsp;UART&nbsp;波特率初始化部分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

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