// Function to initialize UART void uart_init(void) // Enable clock for USART CMU_ClockEnable(UART_CLOCK, true);
// Interrupt handler for receiving data void USART0_RX_IRQHandler(void) if (USART_IntGet(UART_HANDLE) & USART_IF_RXDATAV) rx_byte = USART_Rx(UART_HANDLE); // Echo the character back USART_Tx(UART_HANDLE, rx_byte);
Create a new file main.c and add the following code:
Introduction
// Initialize USART USART_InitAsync(UART_HANDLE, &init);
// Buffers char tx_buffer[64]; char rx_byte;
while (1) // Main loop does nothing – everything is interrupt driven __WFI(); // Wait for interrupt simplicity studio uart example
#include "em_device.h" #include "em_chip.h" #include "em_cmu.h" #include "em_gpio.h" #include "em_usart.h" #include <string.h> // USART instance – change to your selected peripheral #define UART_HANDLE USART0 #define UART_CLOCK cmuClock_USART0
// Enable RX interrupt (optional but useful) USART_IntEnable(UART_HANDLE, USART_IEN_RXDATAV); NVIC_EnableIRQ(USART0_RX_IRQn);
// Configure USART pins (using location specific to your board) // For example: Route TX to PA0, RX to PA1 GPIO_PinModeSet(gpioPortA, 0, gpioModePushPull, 1); // TX GPIO_PinModeSet(gpioPortA, 1, gpioModeInput, 0); // RX // Function to initialize UART void uart_init(void) //
// Simple string transmit function void uart_send_string(const char *str) while (*str) USART_Tx(UART_HANDLE, *str++);
// Initialize UART uart_init();
int main(void) // Chip initialization (important for errata) CHIP_Init(); // Echo the character back USART_Tx(UART_HANDLE