我是最近才开始学习ARM的,许多知识还不是很明白,今天简单测试一下ARM的UART端口的功能,结果是发送能正常发送,接收却不能正常接收,接收数据时根本就进不了中断处理程序,不知道为什么,这是我写的测试代码,有点乱,但还是希望各位兄弟能给个解决的方法,谢谢<br />#include "config.h"<br />#include "stdlib.h"<br />#include "string.h"<br /><br />unsigned char Size(void)<br />{<br />// return sizeof(HEAPNODE);<br />return 0;<br />}<br />unsigned char Free[1000];<br />extern void UartHandler(void);<br />//复位FIFO操作使用的宏<br />#define OSRxFIFOReset(X) if(X)U1FCR |= (1<<1);<br /> else<br /> U0FCR |=(1<<1); <br />#define OSTxFIFOReset(X) if(X)U1FCR |= (1<<2);<br /> else<br /> U0FCR |=(1<<2); <br />#define OSUartDisable(X)<br />#define OSUartEnable(X) <br />#define OSUartIOConfig(X) if(X) PINSEL0 = (PINSEL0&0xFFF0FFFF)&0x00050000;<br /> else<br /> PINSEL0 = (PINSEL0&0xFFFFFFF0)&0x00000005;<br /><br />char *Name="gwsino@landwind.com.cn
thank you for your going home!";<br />void UartSendNBytes(unsigned char *nBytes,unsigned char size);<br />unsigned char idx = 0;<br />void RxComplete(void)<br />{<br /> unsigned char Rec[8];<br /> unsigned char *read = Rec;<br /> unsigned char IIR;<br /> switch(U0IIR & 0x0F)<br /> {<br /> case 0x02:<br /> <br /> <br /> if(idx > strlen(Name))<br /> break;<br /> U0THR = Name[idx++];<br /> //idx++;<br /> break;<br /> case 0x04:<br /> case 0x0c:<br /> Rec[1] = U0RBR;<br /> break;<br /> }<br /> VICVectAddr = 0;<br />}<br />void UartSendByte(unsigned char nbyte)<br />{<br /> U0THR = nbyte;<br /> while((U0LSR & 0x40)==0)<br /> continue;<br />}<br />void UartSendNBytes(unsigned char *nBytes,unsigned char size)<br />{<br /> while(size--)<br /> {<br /> U0THR = *nBytes++;<br /> while((U0LSR & 0x40) == 0)<br /> continue;<br /> }<br />}<br /><br />int main (void)<br />{// add user source code <br /> volatile unsigned int size;<br /> unsigned int value;<br /> unsigned short int fdiv;<br /> //{21,23,43,53,54,65,76,67,78,34,34,34,34,54,45,32,31,0,0,0,0,5,23,34,0,0,0,0,0,0,0,255};<br /> // strcpy((char*)Name,"gwsino@landwind.com.cn
thank you for your going home!");<br /> fdiv = (Fpclk / 16)/9600;<br /> U0LCR = 0X83;<br /> U0DLM =(unsigned char)( fdiv / 256);<br /> U0DLL = (unsigned char)(fdiv % 256);<br /> U0LCR = 0X03;<br /><br /> PINSEL0 = (PINSEL0&0xFFFFFFF0)|0x00000005;<br /> <br /> U0FCR = 0X07;<br /> U0FCR |= 0xC0;<br /> VICIntSelect = 0x0000000;<br /> VICIntEnable |= (1<<6);<br /> VICVectCntl0 = 0x26;<br /> VICVectAddr0 = (int) UartHandler;<br /> U0IER = 0X07;<br /> U0THR = 0x00;<br /> <br /> //UartSendNBytes((unsigned char*)Name,(unsigned char)strlen((char*)Name));<br /> // OSRxFIFOReset(1);<br /> size = Size();<br /> if(size != 0)<br /> {<br /> value = value+size;<br /> }<br /> while(1)<br /> {<br /> }<br /> return value;<br />} |
|