?? uart.c
字號:
#include <csl.h>
#include "Tl16C752B.h"
static UartDelay(Uint32 Val)
{
Uint32 i;
for(i=0;i<Val;i++)
{
}
}
void UartAIRQClear()
{
Uint32 i;
i=TL16C752READ(TL16C752A_IIR_ADDR);
}
void UartBIRQClear()
{
Uint32 i;
i=TL16C752READ(TL16C752B_IIR_ADDR);
}
void UartInit(Uint32 Channel)
{
int i;
if(Channel==1)
{
// Divisor latch and EFR enable
TL16C752WRITE( TL16C752B_LCR_ADDR, 0x80 );
// 設置波特率
// Baud Rate : 000c - 9600
TL16C752WRITE( TL16C752B_DLL_ADDR, 0x78 );
TL16C752WRITE( TL16C752B_DLH_ADDR, 0x00 );
// Divisor latch and EFR disable
// 8bits data,1bit stop bit,no parity
TL16C752WRITE( TL16C752B_LCR_ADDR, 0x03 );
// 使能接收和發送中斷
TL16C752WRITE( TL16C752B_IER_ADDR, 0x03);
// 設置FIFO控制寄存器
// TX fifo trigger level 60 characters
// Rx fifo trigger level 60 characters
TL16C752WRITE( TL16C752B_FCR_ADDR, 0xf7 );
TL16C752WRITE( TL16C752B_MCR_ADDR, 0x08);
UartBIRQClear();
}
if(Channel==0)
{
// Divisor latch and EFR enable
TL16C752WRITE( TL16C752A_LCR_ADDR, 0x80 );
// 設置波特率
// Baud Rate : 000c - 9600
TL16C752WRITE(TL16C752A_DLL_ADDR, 0x78 );
TL16C752WRITE( TL16C752A_DLH_ADDR, 0x00 );
// Divisor latch and EFR disable
// 8bits data,1bit stop bit,no parity
TL16C752WRITE( TL16C752A_LCR_ADDR, 0x03 );
// 使能接收和發送中斷
TL16C752WRITE( TL16C752A_IER_ADDR, 0x03);
// 設置FIFO控制寄存器
// TX fifo trigger level 60 characters
// Rx fifo trigger level 60 characters
TL16C752WRITE( TL16C752A_FCR_ADDR, 0xf7 );
TL16C752WRITE( TL16C752A_MCR_ADDR, 0x08);
UartAIRQClear();
}
}
void UartASend(Uint8 *Data,Uint32 Len)
{
Uint32 i;
for(;;)
{
if(Len==0)
{
break;
}
while(TL16C752READ(TL16C752A_LSR_ADDR)&0x20==0); //TX FIFO is not empty;
for(i=0;i<64;i++)
{
if(Len==0)
{
break;
}
TL16C752WRITE(TL16C752A_THR_ADDR,*Data);
Data++;
UartDelay(10);
Len--;
}
}
}
void UartBSend(Uint8 *Data,Uint32 Len)
{
Uint32 i;
for(;;)
{
if(Len==0)
{
break;
}
while(TL16C752READ(TL16C752B_LSR_ADDR)&0x20==0); //TX FIFO is not empty;
for(i=0;i<64;i++)
{
if(Len==0)
{
break;
}
TL16C752WRITE(TL16C752B_THR_ADDR,*Data);
Data++;
UartDelay(10);
Len--;
}
}
}
Uint32 UartARecv(Uint8 *Data)
{
Uint32 i=0, j=0;
j=TL16C752READ(TL16C752A_LSR_ADDR);
while((j&0x01)==0x01) //RX FIFO has data;
{
*Data=TL16C752READ(TL16C752A_RHR_ADDR);
Data++;
i++;
UartDelay(10);
j=TL16C752READ(TL16C752A_LSR_ADDR);
}
return i;
}
Uint32 UartBRecv(Uint8 *Data)
{
Uint32 i=0,j=0;
j=TL16C752READ(TL16C752B_LSR_ADDR);
while((j&0x01)==0x01) //RX FIFO has data;
{
*Data=TL16C752READ(TL16C752B_RHR_ADDR);
Data++;
i++;
UartDelay(10);
j=TL16C752READ(TL16C752B_LSR_ADDR);
}
return i;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -