void uartInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_75V);
SysCtlClockSet(
SYSCTL_USE_PLL
// SYSCTL_USE_OSC
|SYSCTL_OSC_MAIN
|SYSCTL_XTAL_6MHZ
|SYSCTL_SYSDIV_5); // 设置晶振为时钟源
// |SYSCTL_SYSDIV_1); // 设置晶振为时钟源
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // 使能UART模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 使能RX/TX所在的GPIO端口
// UARTFIFOLevelSet(UART0_BASE,
// UART_FIFO_TX1_8,
// UART_FIFO_RX1_8);
GPIOPinTypeUART(GPIO_PORTA_BASE, // 配置RX/TX所在管脚为
GPIO_PIN_0 | GPIO_PIN_1); // UART收发功能
UARTConfigSet(UART0_BASE, // 配置UART端口
250000, // 波特率:250K
UART_CONFIG_WLEN_8 | // 数据位:8
UART_CONFIG_STOP_TWO | // 停止位:2
UART_CONFIG_PAR_NONE); // 校验位:无
UARTEnable(UART0_BASE); // 使能UART端口
UARTIntEnable(UART0_BASE,UART_INT_RX | UART_INT_RT | UART_INT_FE);
IntEnable(INT_UART0);
// IntPrioritySet(INT_UART0,0x00);
}
void UART0_ISR(void)
{
unsigned long ulStatus;
uchar i;
ulStatus = UARTIntStatus(UART0_BASE, true); // 读取当前中断状态
UARTIntClear(UART0_BASE, ulStatus); // 清除中断状态
if(ulStatus & UART_INT_FE){ //接收帧错误中断和暂停错误中断
RxAddr = 0;
RecFig = false;
HeadFig = true;
i = GPIOPinRead(GPIO_PORTA_BASE,PIN4);
GPIOPinWrite(GPIO_PORTA_BASE,PIN4,~i);
}
else if ((ulStatus & UART_INT_RX)||(ulStatus & UART_INT_RT)) // 若是接收中断
{
i = GPIOPinRead(GPIO_PORTA_BASE,PIN3);
GPIOPinWrite(GPIO_PORTA_BASE,PIN3,~i);
if(RecFig == true){
if(UARTCharsAvail(UART0_BASE)== true){
RxBuf[RxAddr] = UARTCharGetNonBlocking(UART0_BASE);
RxAddr++;
if(RxAddr > 512)
{
RxAddr = 0;
RecFig = false;
HeadFig = false;
}
}
}
else
{
if(HeadFig == true){
if(UARTCharsAvail(UART0_BASE)== true){
if( UARTCharGetNonBlocking(UART0_BASE) == 0){
RxAddr = 0;
RecFig = true;
Dmx_Sign = 200;
}
else {
RxAddr = 0;
RecFig = false;
}
HeadFig = false;
}
}
}
}
}
不知道问题出在哪里了,请大侠们帮我看看,谢谢了!!! |