使用UART輸入 FIFO Data給A8137 Tx發射,再由對端的A8137 RX接收後,經過Rx端的UART解析出來
系統概念圖

代碼:
RC_A8137_x0_Reference code for FIFO mode_1M_2Mbps CL=18pF V2.5 - Uart mode.zip
1. Tx端接線為P3_5=1 & P3_2=1時,為Uart mode(FIFO data需由外部Uart輸入進來),若將P3_2接GND時,為一般Easy FIFO mode(直接抓取MCU內建定義的FIFO Data),Uart的波特率為38400,這邊會使用UartCnt來判斷Uart RX Buffer是否滿64Byte,若滿了之後,會開始將Uart RX Buffer 內的資料依序填入A8137的Tx FIFO Address:0x900

if(P3_2==0) //P3_2=0=>Easy mode mode
{
WriteFIFO();
}
else //P3_2=1==>Uart FIFO mode
{
while(UartCnt!=64);
//Write FIFO
for(UartCnt = 0; UartCnt < 64; UartCnt++)
RFLIB_WriteReg(TXFIFO_REG + UartCnt , UartRXBuf[UartCnt]);
UartCnt=0;
}使用Timer2來計算波特率38400bps:
#define BaudRate38400 (65536-((16000000)/(32*38400))) //crystal=16MHz,timer2
void InitUart0Timer2(void)
{
IOSEL |= 0x01;//enable BBIOS + UART
PCON = 0x00;
SCON = 0x40;
T2CON = 0x30;
RCAP2H = BaudRate38400 / 256;
RCAP2L = BaudRate38400 % 256;
TR2=1;
REN = 1;
ES=1;//enable uart0 interrupt
}Uart Function Code:
void Uart0Isr(void) interrupt 4 using 3
{
if (TI==1)
{
TI=0;
UartSendCnt--;
if(UartSendCnt !=0)
{
Uartptr++;
SBUF = *Uartptr;
}
}
if (RI==1)
{
RI=0;
UartRXBuf[UartCnt]=SBUF;
UartCnt++;
}
} 2. 當Tx FIFO Buffer填滿64Byte後觸發 Cmd TX將 資料發射出去
RFLIB_StrobeCmd(CMD_TX); //entry tx & transmit Delay10us(1); while(RF_Flag == 0); //wait transmit completed Delay10ms(1);
3. 相反的RX端,會先啟動Cmd RX,等待對方Tx發射過來的資料,將它收下來,收完資料後,會將資料依序填入 SBUF,將資料將從A8137的Uart TX輸出
RFLIB_StrobeCmd(CMD_RX);
Delay10us(1);
while(RF_Flag == 0); //wait receive completed
RxPacket();
if(P3_2==1)
{
UartSendCnt=64;
Uartptr =& Tmpbuf[0];
SBUF=Tmpbuf[0];
while(UartSendCnt);
}