UART

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

UART

620 次查看
khalid11
Contributor I
#include "pin_mux.h"
#include "board.h"
#include "fsl_usart.h"
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
 
/* Definitions */
#define EXAMPLE_USART          USART0
#define EXAMPLE_USART_CLK_SRC  kCLOCK_MainClk
#define EXAMPLE_USART_CLK_FREQ CLOCK_GetFreq(EXAMPLE_USART_CLK_SRC)
 
#define RX_RING_BUFFER_SIZE 8U
#define ECHO_BUFFER_SIZE    1024U
 
/* Prototypes */
static void EXAMPLE_USARTUserCallback(USART_Type *base, usart_handle_t *handle, status_t status, void *userData);
static void EXAMPLE_USARTInit(void);
static void EXAMPLE_USARTPrepareTransfer(void);
 
/* Variables */
usart_handle_t g_uartHandle;
uint8_t g_tipString[] = "USART RX ring buffer example.\r\nSend back received data.\r\nEcho every 8 bytes.\r\n";
uint8_t g_rxRingBuffer[RX_RING_BUFFER_SIZE] = {0}; /* RX ring buffer. */
uint8_t rxBuffer[ECHO_BUFFER_SIZE] = {0}; /* Buffer for receive data to echo. */
uint8_t txBuffer[ECHO_BUFFER_SIZE] = {0}; /* Buffer for send data to echo. */
volatile bool rxBufferEmpty = true;
volatile bool txBufferFull = false;
volatile bool txOnGoing = false;
volatile bool rxOnGoing = false;
usart_transfer_t sendXfer;
usart_transfer_t receiveXfer;
 
/* USART user callback */
void EXAMPLE_USARTUserCallback(USART_Type *base, usart_handle_t *handle, status_t status, void *userData)
{
    userData = userData;
 
    if (kStatus_USART_TxIdle == status)
    {
        txBufferFull = false;
        txOnGoing = false;
    }
 
    if (kStatus_USART_RxIdle == status)
    {
        rxBufferEmpty = false;
        rxOnGoing = false;
    }
}
 
void transmitData()
{
    // Fill rxBuffer with 'A'
    for (int i = 0; i < ECHO_BUFFER_SIZE; ++i) {
 
              txBuffer[i] = 'A';
    }
}
 
/*void receivedata()
{
for (int i = 0; i < ECHO_BUFFER_SIZE; ++i) {
 
              rxBuffer[i] = 'A';
    }
}*/
 
/*!
 * @brief Main function
 */
int main(void)
{
    size_t receivedBytes;
 
    /* Initialize the hardware. */
    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    CLOCK_Select(kUART0_Clk_From_MainClk);
 
    /* Initialize the USART instance. */
    EXAMPLE_USARTInit();
 
    /* Prepare for transactional transmission. */
    EXAMPLE_USARTPrepareTransfer();
 
    /* Send tip information. */
    txOnGoing = true;
    USART_TransferSendNonBlocking(EXAMPLE_USART, &g_uartHandle, &sendXfer);
    transmitData();
 
    /* Wait for transmission to complete. */
    while (txOnGoing)
    {
    }
 
    while (1)
    {
        /* If txBuffer is empty and rxBuffer is full, copy rxBuffer to txBuffer. */
        if ((!rxBufferEmpty) && (!txBufferFull))
        {
            memcpy(txBuffer, rxBuffer, ECHO_BUFFER_SIZE);
            rxBufferEmpty = true;
            txBufferFull = true;
        }
 
        /* If RX is idle and rxBuffer is empty, start to read data to rxBuffer. */
        if ((!rxOnGoing) && rxBufferEmpty)
        {
            rxOnGoing = true;
            USART_ReadByte(EXAMPLE_USART);
            receivedata();
 
 
            if (ECHO_BUFFER_SIZE == receivedBytes)
            {
                rxBufferEmpty = false;
                rxOnGoing = false;
            }
        }
 
        /* If TX is idle and txBuffer is full, start to send data. */
        if ((!txOnGoing) && txBufferFull)
        {
            txOnGoing = true;
            USART_TransferSendNonBlocking(EXAMPLE_USART, &g_uartHandle, &sendXfer);
            transmitData();
        }
    }
}
 
static void EXAMPLE_USARTInit(void)
{
    usart_config_t config;
    USART_GetDefaultConfig(&config);
    config.baudRate_Bps = BOARD_DEBUG_USART_BAUDRATE;
    config.enableRx = true;
    config.enableTx = true;
    USART_Init(EXAMPLE_USART, &config, EXAMPLE_USART_CLK_FREQ);
}
 
static void EXAMPLE_USARTPrepareTransfer(void)
{
    /* Create USART handle and install callback function. */
    USART_TransferCreateHandle(EXAMPLE_USART, &g_uartHandle, EXAMPLE_USARTUserCallback, NULL);
    /* Start ring buffer. */
    USART_TransferStartRingBuffer(EXAMPLE_USART, &g_uartHandle, g_rxRingBuffer, RX_RING_BUFFER_SIZE);
 
    /* Prepare transfer for sending the received characters. */
    sendXfer.data = txBuffer;
    sendXfer.dataSize = ECHO_BUFFER_SIZE;
 
    /* Prepare transfer for receiving characters. */
    receiveXfer.data = rxBuffer;
    receiveXfer.dataSize = ECHO_BUFFER_SIZE;
}

 

I AM USING LPC804

USING THIS CODE I AM TRYING TO SEND THE CONTINEOUS DATA AND I WANT TO  RECEIVE THE SAME TRANSMITTED DATA IN rxBUFFER. HERE I AM TRANSMITTIND DATA 'A' CONTINEOUSLY AND I WANT RECEIVE THE SAME DATA IN rxBUFFER THAT TOO CONTINEOUSLY. IT WILL BE GREAT IF I GET PROPER CODE AND METHOD .

 

THANK YOU

0 项奖励
回复
1 回复

595 次查看
Pavel_Hernandez
NXP TechSupport
NXP TechSupport

Hello, my name is Pavel, and I will be supporting your case, I recommend review the available examples on the SDK, if the issue persist, please let me know.

Pavel_Hernandez_0-1709928771017.png

Select Board | MCUXpresso SDK Builder (nxp.com)

Best regards,
Pavel

0 项奖励
回复