[ZLG-ARM] 关于sc16c2550接收不能中断的问题

[复制链接]
2353|0
 楼主| lma 发表于 2007-9-2 21:12 | 显示全部楼层 |阅读模式
我在使用16c2550b时,可以发送,并且也可以产生发送中断,但在接收时,老是不能产生接收中断,以下是我的代码,能帮我看看,是不是有什么问题,谢谢<br /><br /><br /><br />/*&nbsp;SC16C2550通用异步串行口0(UART0)的特殊寄存器&nbsp;*/<br /><br />我使用的cpu是lpc2214,器件cs0的基地址是0x81000020&nbsp;,cs1:0x81000028<br /><br />//接收保寄存器&nbsp;&nbsp;&nbsp;<br />#define&nbsp;SC16C2550_U0RBR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000020))<br />//发送保寄存器<br />#define&nbsp;SC16C2550_U0THR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000020))<br />//中断使能寄存器<br />#define&nbsp;SC16C2550_U0IER&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000021))<br />//中断状态寄存器<br />#define&nbsp;SC16C2550_U0ISR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000022))<br />//中断状态寄存器&nbsp;与zlg定义兼容<br />#define&nbsp;SC16C2550_U0IIR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000022))<br />//FIFO控制寄存器<br />#define&nbsp;SC16C2550_U0FCR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000022))<br />//线控制寄存器<br />#define&nbsp;SC16C2550_U0LCR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000023))<br />//Modem控制寄存器<br />#define&nbsp;SC16C2550_U0MCR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000024))&nbsp;<br />//线状态寄存器<br />#define&nbsp;SC16C2550_U0LSR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000025))<br />//Modem状态寄存器<br />#define&nbsp;SC16C2550_U0MSR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000026))<br />//暂存寄存器<br />#define&nbsp;SC16C2550_U0SPR&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000027))<br />//除数LSB保存<br />#define&nbsp;SC16C2550_U0DLL&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000020))<br />//除数MSB保存<br />#define&nbsp;SC16C2550_U0DLM&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;*)0x81000021))<br /><br />void&nbsp;SC16C2550Uart0Init(uint32&nbsp;baud,uint8&nbsp;datab,float&nbsp;stopb,uint8&nbsp;check,uint8&nbsp;rev_num)<br />{&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;&nbsp;&nbsp;uint32&nbsp;Bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0LCR&nbsp;=&nbsp;0X80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置U0LCR.7=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;SC16C2550_Fpclk/(16*baud);&nbsp;&nbsp;&nbsp;//设置波特率<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0DLM&nbsp;=&nbsp;Bak&nbsp;&gt&gt&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0DLL&nbsp;=&nbsp;Bak&nbsp;&&nbsp;0XFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0LCR&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置U0LCR.7=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;datab&nbsp;-&nbsp;5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字长<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(stopb==2&nbsp;||&nbsp;stopb==1.5)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;|=&nbsp;0X04;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(check!=None&nbsp;&&&nbsp;check!=Space)&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;Bak&nbsp;+&nbsp;(1&lt&lt3)&nbsp;+&nbsp;(check&lt&lt4);&nbsp;&nbsp;//xxxxxxxx<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(check==Space)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;Bak&nbsp;+&nbsp;(1&lt&lt3);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0LCR&nbsp;=&nbsp;Bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(rev_num)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;Bak&nbsp;+&nbsp;0X00;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;Bak&nbsp;+&nbsp;0X40;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;8:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;Bak&nbsp;+&nbsp;0X80;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;14:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bak&nbsp;=&nbsp;Bak&nbsp;+&nbsp;0XC0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0FCR&nbsp;=&nbsp;Bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0IER&nbsp;=&nbsp;0X03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//串口0中断使能<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SC16C2550_U0MCR&nbsp;=&nbsp;0x08;//(1&lt&lt3);&nbsp;//外部中断使能<br />PINSEL1&nbsp;=&nbsp;(PINSEL1&nbsp;&&nbsp;0xFFFFFFFC)|0x00000001;&nbsp;//设置p0.16脚为外部中断0<br />EXTINT&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除EINT0中断标志&nbsp;&nbsp;&nbsp;&nbsp;<br />EXTMODE&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使用边延激活方式<br />EXTPOLAR&nbsp;&=&nbsp;0x06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//低电平有效&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />VICIntSelect&nbsp;&=&nbsp;0XFFFFBFFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置外部中断0为irq中断<br />VICVectCntl1&nbsp;=&nbsp;0X20&nbsp;|&nbsp;0X06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//外部中断0为14号中断<br />VICVectAddr1&nbsp;=(uint32)SC16C2550_Uart0_IRQ;&nbsp;&nbsp;&nbsp;&nbsp;//外部中断0设置在通道一<br />VICIntEnable&nbsp;|=&nbsp;(1&lt&lt0X0E);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能外部中断0<br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

lma

2

主题

2

帖子

0

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