1 #ifdef DeviceFamily_CC13X0
8 #include <ti/devices/DeviceFamily.h>
9 #include DeviceFamily_constructPath(driverlib/sys_ctrl.h)
10 #include <ti/drivers/GPIO.h>
12 #include "SEGGER_RTT.h"
23 static uint8_t serialNumber[6];
25 static uint8_t NVS_buffer[KNX_FLASH_SIZE];
27 static UART_Handle uart;
29 static NVS_Handle nvsHandle;
31 static ClockP_Handle clk0Handle;
32 static ClockP_Struct clk0Struct;
33 static volatile uint32_t msCounter = 0;
35 static void clk0Fxn(uintptr_t arg0)
40 static void setupClock()
42 ClockP_Params clkParams;
43 ClockP_Params_init(&clkParams);
44 clkParams.period = 1000 / ClockP_tickPeriod;
45 clkParams.startFlag =
true;
46 ClockP_construct(&clk0Struct, (ClockP_Fxn)clk0Fxn, 1000 / ClockP_tickPeriod, &clkParams);
47 clk0Handle = ClockP_handle(&clk0Struct);
50 static void setupGPIO()
53 GPIO_setConfig(Board_GPIO_LED0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
54 GPIO_setConfig(Board_GPIO_LED1, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
55 GPIO_setConfig(Board_GPIO_BUTTON0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
56 GPIO_setConfig(Board_GPIO_BUTTON1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
59 static void setupUART()
61 UART_Params uartParams;
62 UART_Params_init(&uartParams);
63 uartParams.writeDataMode = UART_DATA_BINARY;
64 uartParams.readDataMode = UART_DATA_BINARY;
65 uartParams.readReturnMode = UART_RETURN_FULL;
66 uartParams.readEcho = UART_ECHO_OFF;
67 uartParams.baudRate = 115200;
68 uart = UART_open(Board_UART0, &uartParams);
77 static void setupNVS()
80 NVS_Params_init(&nvsParams);
81 nvsHandle = NVS_open(Board_NVSINTERNAL, &nvsParams);
83 if (nvsHandle == NULL)
90 NVS_getAttrs(nvsHandle, &attrs);
91 print(
"NVS flash size: ");
93 print(
"NVS flash sector size: ");
96 if (GPIO_read(Board_GPIO_BUTTON1) == 0)
98 println(
"Button1 is pressed. Erasing flash...");
99 int_fast16_t result = NVS_erase(nvsHandle, 0, attrs.regionSize);
101 if (result != NVS_STATUS_SUCCESS)
103 print(
"Error erasing NVS, result: ");
108 println(
"NVS successfully erased.");
133 ClockP_usleep(ms * 1000);
140 ClockP_usleep(howLong);
146 #if defined(PRINT_UART)
147 uint8_t buffer[1] = {c};
148 return UART_write(uart, buffer,
sizeof(buffer));
149 #elif defined (PRINT_RTT)
150 return SEGGER_RTT_PutChar(0, (
char)c);
157 size_t write(
const uint8_t* buffer,
size_t size)
163 if (
write(*buffer++))
176 size_t write(
const uint8_t* buffer,
size_t size)
178 #if defined(PRINT_UART)
179 return UART_write(uart, buffer, size);
180 #elif defined (PRINT_RTT)
181 return SEGGER_RTT_Write(0, buffer, size);
188 size_t write(
const char* buffer,
size_t size)
190 return write((
const uint8_t*)buffer, size);
209 char buf[8 *
sizeof(uint64_t) + 1];
210 char* str = &buf[
sizeof(buf) - 1];
220 *--str = c < 10 ? c +
'0' : c +
'A' - 10;
253 void print(
unsigned long long num,
int base)
267 void print(
unsigned char num,
int base)
269 print((
unsigned long long)num, base);
274 print((
long long)num, base);
277 void print(
unsigned int num,
int base)
279 print((
unsigned long long)num, base);
284 print((
long long)num, base);
287 void print(
unsigned long num,
int base)
289 print((
unsigned long long)num, base);
294 if (std::isnan(number))
300 if (std::isinf(number))
306 if (number > 4294967040.0)
312 if (number < -4294967040.0)
326 double rounding = 0.5;
328 for (uint8_t i = 0; i < digits; ++i)
334 unsigned long int_part = (
unsigned long)number;
335 double remainder = number - (double)int_part;
348 unsigned int toPrint = (
unsigned int)(remainder);
350 remainder -= toPrint;
354 void print(
double num,
int digits = 2)
405 void println(
unsigned long long num,
int base)
426 print(
"ignoring digitalRead: pin: ");
434 if (pin == Board_GPIO_LED0)
438 GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON);
442 GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_OFF);
447 print(
"dummy digitalWrite: pin: ");
454 void pinMode(
unsigned long pin,
unsigned long mode)
456 print(
"ignoring pinMode: pin: ");
464 static void gpioButtonFxn0(uint_least8_t index)
471 if (pin == Board_GPIO_BUTTON0)
473 gpioCallback = callback;
475 GPIO_setCallback(Board_GPIO_BUTTON0, gpioButtonFxn0);
478 GPIO_enableInt(Board_GPIO_BUTTON0);
482 print(
"dummy attachInterrupt: pin: ");
492 *(uint32_t*)(serialNumber + 2) = HWREG(FCFG1_BASE + FCFG1_O_MAC_15_4_0) ^ HWREG(FCFG1_BASE + FCFG1_O_MAC_15_4_1);
523 if (size > KNX_FLASH_SIZE)
528 NVS_read(nvsHandle, 0, (
void*) NVS_buffer, size);
530 for (
int i = 0; i < size; i++)
532 if (NVS_buffer[i] != 0)
538 memset(NVS_buffer, 0xff, size);
545 println(
"CC1310Platform::commitToEeprom() ...");
547 int_fast16_t result = NVS_write(nvsHandle, 0, (
void*)NVS_buffer, KNX_FLASH_SIZE, NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
549 if (result != NVS_STATUS_SUCCESS)
551 print(
"Error writing to NVS, result: ");
556 println(
"NVS successfully written");
564 println(
"System restart in 500ms.");
566 SysCtrlSystemReset();
573 println(
"A fatal error occured. Stopped.");
578 GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_OFF);
579 GPIO_write(Board_GPIO_LED1, Board_GPIO_LED_ON);
581 GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON);
582 GPIO_write(Board_GPIO_LED1, Board_GPIO_LED_OFF);