HI
Now I want to send and recieve vary date in uart4.
for example:
I recieve 8 byte date through uart4; I want to send demoRingBuffer[0] only one time.
how to chang it?
My configrations:
while (1)
{
/* Send data only when UART TX register is empty and ring buffer has data to send out. */
uint8_t aa;
// PRINTF("\r\n start \r\n");
while ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex))
{
UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]);
txIndex++;
txIndex %= DEMO_RING_BUFFER_SIZE;
}
if(demoRingBuffer[0]==0x23&demoRingBuffer[1]==0x41&demoRingBuffer[2]==0x55&demoRingBuffer[3]==0x66
&demoRingBuffer[4]==0x77&demoRingBuffer[5]==0x88&demoRingBuffer[6]==0x99&demoRingBuffer[7]==0xaa)
{
aa=0x01;
}
else
{
aa=0x02;
}
if((aa==0x01))
{
UART_WriteByte(DEMO_UART, demoRingBuffer[0]);
}
else
{
UART_WriteByte(DEMO_UART, demoRingBuffer[1]);
}
}
}
void DEMO_UART_IRQHandler(void)
{
uint8_t data;
/* If new data arrived. */
if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART))
{
data = UART_ReadByte(DEMO_UART);
/* If ring buffer is not full, add data to ring buffer. */
if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex)
{
demoRingBuffer[rxIndex] = data;
rxIndex++;
rxIndex %= DEMO_RING_BUFFER_SIZE;
}
}
}
I
It always send 0x23; I want to send only one time.How to chang it?
Thanks and regards
zhai
Hi, Zhao,
Regarding your code, that you want to output an array only once, you can change code cas follwoing:
while (1)
{
/* Send data only when UART TX register is empty and ring buffer has data to send out. */
uint8_t aa;
// PRINTF("\r\n start \r\n");
while ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex))
{
UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]);
txIndex++;
if(txIndex>=THRESHOLD) break; //Rong wrote, the line can jump out the loop while(1)
//txIndex %= DEMO_RING_BUFFER_SIZE;
}
BTW, it seems the code is incorrect:
if(demoRingBuffer[0]==0x23&demoRingBuffer[1]==0x41&demoRingBuffer[2]==0x55&demoRingBuffer[3]==0x66
&demoRingBuffer[4]==0x77&demoRingBuffer[5]==0x88&demoRingBuffer[6]==0x99&demoRingBuffer[7]==0xaa)
It should be:
if(demoRingBuffer[0]==0x23&&demoRingBuffer[1]==0x41&&demoRingBuffer[2]==0x55&&demoRingBuffer[3]==0x66
&&demoRingBuffer[4]==0x77&&demoRingBuffer[5]==0x88&&demoRingBuffer[6]==0x99&&demoRingBuffer[7]==0xaa)
Hope it can help you
BR
XiangJun Rong
Hi
I test your code,the rusult is the same to mine; I want to get 8 byte date from the uart rx ;
I will implent other function through the uart command and output command to upper machine.
Actualy I want to use the uart fifo function,But I don't have demo code.
Thanks
zhai
I want to finish the fuction like mcu51;
void Rcv_ISR () interrupt 4 using 1
{
INT8 data inchar;
if(RI)
{
inchar = SBUF;
if(inchar == '*')
{
RX_Index1 = 0;
}
if(RX_Index1 <= (RX_MAXBUF-1) )
{
RX_BUF1[RX_Index1] = inchar;
if(RX_BUF1[RX_Index1] == '$')
{
if(RX_BUF1[0] == '*')
{
if(RX_BUF1[2] == '2')
{
ACKflag = 1;
}
else
{
if(RX_FULL == 0)
{
RX_FULL = 1;
RX_Index2 = RX_Index1;
memcpy(RX_BUF2,RX_BUF1,RX_Index2+1);
}
else
{
//
}
}
RX_BUF1[0] = 0;
RX_BUF1[2] = 0;
RX_Index1 =0;
}
}
RX_Index1++;
}
else
{
RX_Index1 =0;
}
RI = 0;
}
if(TI)
{
if(TX_EN == 1)
{
if(TX_Tail == TX_Head)
{
if(TX_Full == 1)
{
SBUF = TX_BUF[TX_Tail];
TX_Tail = (TX_Tail+1)%TX_MAXBUF;
TX_Full = 0;
}
else
{
TX_Empty = 1;
}
}
else
{
SBUF = TX_BUF[TX_Tail];
TX_Tail = (TX_Tail+1)%TX_MAXBUF;
}
}
else
{
TX_Empty = 1;
TX_Full = 0;
}
TI = 0;
}
Thanks