📄 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 + -