The following steps show you how to change CC26xx/CC13xx UART baudrate dynamically in your application.
1. In port pininterrupt example into your CCS.
2. Add the following header files for UART and task related stuffs.
#include <ti/sysbios/knl/Task.h>
#include <ti/drivers/UART.h>
#include <stdint.h>
3. Add the following defines and global variables for UART and task related stuffs.
#define TASKSTACKSIZE 768
uint32_t baudrate=115200;
bool baudrate_change=false;
UART_Handle uart;
UART_Params uartParams;
Task_Struct task0Struct;
Char task0Stack[TASKSTACKSIZE];
4. Add the following red codes into buttonCallbackFxn to change baudrate when BTN1 is pressed.
case Board_BUTTON1:
currVal = PIN_getOutputValue(Board_LED1);
PIN_setOutputValue(ledPinHandle, Board_LED1, !currVal);
if(baudrate==115200){
const char echoBaudrateChange[] = "\fChange Baudrate to 9600:\r\n";
UART_write(uart, echoBaudrateChange, sizeof(echoBaudrateChange));
baudrate=9600;
}else{
const char echoBaudrateChange[] = "\fChange Baudrate to 115200:\r\n";
UART_write(uart, echoBaudrateChange, sizeof(echoBaudrateChange));
baudrate=115200;
}
baudrate_change=true; break;
5. Add the following function echoFxn()
Void echoFxn(UArg arg0, UArg arg1)
{
char input;
const char echoPrompt[] = "\fEchoing characters:\r\n";
/* Create a UART with data processing off. */
UART_Params_init(&uartParams);
RESTART_UART:
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudRate = baudrate;
uart = UART_open(Board_UART0, &uartParams);
if (uart == NULL) {
System_abort("Error opening the UART");
}
UART_write(uart, echoPrompt, sizeof(echoPrompt));
/* Loop forever echoing */
while (1) {
if(baudrate_change){
UART_close(uart);
uart=NULL;
baudrate_change=false;
goto RESTART_UART;
}
UART_read(uart, &input, 1);
UART_write(uart, &input, 1);
}
}
6. Add the following red codes in main function to start UART task.
int main(void)
{
Task_Params taskParams;
/* Call board init functions */
Board_initGeneral();
Board_initUART();
/* Construct BIOS objects */
Task_Params_init(&taskParams);
taskParams.stackSize = TASKSTACKSIZE;
taskParams.stack = &task0Stack;
Task_construct(&task0Struct, (Task_FuncPtr)echoFxn, &taskParams, NULL);...
}
7. Build and download firmware into LaunchPad to test it.
No comments:
Post a Comment