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.
Showing posts with label UART. Show all posts
Showing posts with label UART. Show all posts
Wednesday, December 18, 2019
Thursday, October 19, 2017
Using CC13xx/CC26xx running Contiki OS to toggle LED from UART.
The following example shows how to using CC13xx/CC26xx running Contiki OS to toggle LED from UART.
1. Replace the following code into hell-world.c
#include "contiki.h"
#include "dev/cc26xx-uart.h"
#include "dev/serial-line.h"
#include "dev/leds.h"
#include < stdio.h >/* For printf() */
#include < string.h >
PROCESS(test_serial, "Serial line test process");
AUTOSTART_PROCESSES(&test_serial);
PROCESS_THREAD(test_serial, ev, data)
{
PROCESS_BEGIN();
cc26xx_uart_set_input(serial_line_input_byte);
printf("Hello, world Serial line test\n");
for(;;) {
PROCESS_YIELD();
if(ev == serial_line_event_message) {
printf("received line: %s\n", (char *)data);
if(strcmp(data,"ON")==0)
leds_on(LEDS_GREEN);
else if(strcmp(data,"OFF")==0)
leds_off(LEDS_GREEN);
}
}
PROCESS_END();
}
2. Build hello-world.bin for LAUNCHXL-CC1310 using "make TARGET=srf06-cc26xx BOARD=launchpad/cc1310 hello-world.bin"
3. Download hello-world.bin to LAUNCHXL-CC1310 using Flash Programmer 2.
4. Start a terminal tool like teraterm to connect to LAUNCHXL-CC1310 application virtual COM port..
5. Enter "ON" and "CTRL+Enter" to send ON command with end character "0x0A" to LAUNCHXL-CC1310 and you will see green led is turned on
6. Enter "OFF" and "CTRL+Enter" to send OFF command with end character "0x0A" to LAUNCHXL-CC1310 and you will see green led is turned on
1. Replace the following code into hell-world.c
#include "contiki.h"
#include "dev/cc26xx-uart.h"
#include "dev/serial-line.h"
#include "dev/leds.h"
#include
#include < string.h >
PROCESS(test_serial, "Serial line test process");
AUTOSTART_PROCESSES(&test_serial);
PROCESS_THREAD(test_serial, ev, data)
{
PROCESS_BEGIN();
cc26xx_uart_set_input(serial_line_input_byte);
printf("Hello, world Serial line test\n");
for(;;) {
PROCESS_YIELD();
if(ev == serial_line_event_message) {
printf("received line: %s\n", (char *)data);
if(strcmp(data,"ON")==0)
leds_on(LEDS_GREEN);
else if(strcmp(data,"OFF")==0)
leds_off(LEDS_GREEN);
}
}
PROCESS_END();
}
2. Build hello-world.bin for LAUNCHXL-CC1310 using "make TARGET=srf06-cc26xx BOARD=launchpad/cc1310 hello-world.bin"
3. Download hello-world.bin to LAUNCHXL-CC1310 using Flash Programmer 2.
4. Start a terminal tool like teraterm to connect to LAUNCHXL-CC1310 application virtual COM port..
5. Enter "ON" and "CTRL+Enter" to send ON command with end character "0x0A" to LAUNCHXL-CC1310 and you will see green led is turned on
6. Enter "OFF" and "CTRL+Enter" to send OFF command with end character "0x0A" to LAUNCHXL-CC1310 and you will see green led is turned on
Thursday, September 8, 2016
How to use two UART ports in CC2530 Z-Stack
The following steps show how to use two UART ports in CC2530 Z-Stack
1. Define HAL_UART=TRUE, HAL_UART_ISR=1, and HAL_UART_DMA=2 in compile options.
2. Initialize and use UART0 (P0_2 as RX/P0_3 as TX) as the followings:
void initUart0(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = pf;
HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}
void uart0RxCb( uint8 port, uint8 event )
{
uint8 ch;
while (Hal_UART_RxBufLen(port))
{
// Read one byte from UART to ch
HalUARTRead (port, &ch, 1);
}
}
initUart0(uart0RxCb);
//Output "UART0 output test" to P0.3
HalUARTWrite( HAL_UART_PORT_0, "UART0 output test", (byte)osal_strlen("UART0 output test"));
3. Initialize and use UART1 (P1_6 as TX/P1_7 as RX) as the followings:
void initUart1(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = pf;
HalUARTOpen (HAL_UART_PORT_1, &uartConfig);
}
void uart1RxCb( uint8 port, uint8 event )
{
uint8 ch;
while (Hal_UART_RxBufLen(port))
{
// Read one byte from UART to ch
HalUARTRead (port, &ch, 1);
}
}
initUart1(uart0RxCb);
//Output "UART1 output test" to P1.6
HalUARTWrite( HAL_UART_PORT_1, "UART1 output test", (byte)osal_strlen("UART1 output test"));
1. Define HAL_UART=TRUE, HAL_UART_ISR=1, and HAL_UART_DMA=2 in compile options.
2. Initialize and use UART0 (P0_2 as RX/P0_3 as TX) as the followings:
void initUart0(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = pf;
HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}
void uart0RxCb( uint8 port, uint8 event )
{
uint8 ch;
while (Hal_UART_RxBufLen(port))
{
// Read one byte from UART to ch
HalUARTRead (port, &ch, 1);
}
}
initUart0(uart0RxCb);
//Output "UART0 output test" to P0.3
HalUARTWrite( HAL_UART_PORT_0, "UART0 output test", (byte)osal_strlen("UART0 output test"));
3. Initialize and use UART1 (P1_6 as TX/P1_7 as RX) as the followings:
void initUart1(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = pf;
HalUARTOpen (HAL_UART_PORT_1, &uartConfig);
}
void uart1RxCb( uint8 port, uint8 event )
{
uint8 ch;
while (Hal_UART_RxBufLen(port))
{
// Read one byte from UART to ch
HalUARTRead (port, &ch, 1);
}
}
initUart1(uart0RxCb);
//Output "UART1 output test" to P1.6
HalUARTWrite( HAL_UART_PORT_1, "UART1 output test", (byte)osal_strlen("UART1 output test"));
Subscribe to:
Posts (Atom)