3 #include "inc/hw_memmap.h"
4 #include "driverlib/pin_map.h"
5 #include "driverlib/interrupt.h"
6 #include "driverlib/sysctl.h"
7 #include "driverlib/rom_map.h"
9 #include "driverlib/gpio.h"
10 #include "driverlib/uart.h"
17 while(s[len]) { ++len; }
25 uint32_t uart_baud_rate) {
31 SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0 +
32 (uart_channel - UART0_BASE) / 0x1000);
35 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
36 GPIOPinConfigure(GPIO_PA0_U0RX);
37 GPIOPinConfigure(GPIO_PA1_U0TX);
38 GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
41 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
42 UART_CONFIG_PAR_NONE));
46 printf(
"\n\rWelcome to RRTOS v0\n\r");
52 char* ptr = (
char*)str;
55 while(!UARTSpaceAvail(
channel)) {}
61 static const char *
const g_pcHex =
"0123456789abcdef";
70 for(uIdx = 0; uIdx < ui32Len; uIdx++) {
73 if(pcBuf[uIdx] ==
'\n') {
75 g_pcUARTTxBuffer[g_ui32UARTTxWriteIndex] =
'\r';
76 ADVANCE_TX_BUFFER_INDEX(g_ui32UARTTxWriteIndex);
85 g_pcUARTTxBuffer[g_ui32UARTTxWriteIndex] = pcBuf[uIdx];
86 ADVANCE_TX_BUFFER_INDEX(g_ui32UARTTxWriteIndex);
95 if(!TX_BUFFER_EMPTY) {
97 UARTIntEnable(channel, UART_INT_TX);
106 for(uIdx = 0; uIdx < ui32Len; uIdx++) {
109 if(pcBuf[uIdx] ==
'\n') {
110 UARTCharPut(channel,
'\r');
114 UARTCharPut(channel, pcBuf[uIdx]);
123 uint32_t ui32Idx, ui32Value, ui32Pos, ui32Count, ui32Base, ui32Neg;
124 char *pcStr, pcBuf[16], cFill;
131 (pcString[ui32Idx] !=
'%') && (pcString[ui32Idx] !=
'\0');
141 if(*pcString ==
'%') {
157 switch(*pcString++) {
172 if((pcString[-1] ==
'0') && (ui32Count == 0)) {
178 ui32Count += pcString[-1] -
'0';
186 ui32Value = va_arg(vaArgP, uint32_t);
198 ui32Value = va_arg(vaArgP, uint32_t);
205 if((int32_t)ui32Value < 0) {
208 ui32Value = -(int32_t)ui32Value;
226 pcStr = va_arg(vaArgP,
char *);
229 for(ui32Idx = 0; pcStr[ui32Idx] !=
'\0'; ui32Idx++) {}
235 if(ui32Count > ui32Idx) {
236 ui32Count -= ui32Idx;
246 ui32Value = va_arg(vaArgP, uint32_t);
269 ui32Value = va_arg(vaArgP, uint32_t);
285 (((ui32Idx * ui32Base) <= ui32Value) &&
286 (((ui32Idx * ui32Base) / ui32Base) == ui32Idx));
287 ui32Idx *= ui32Base, ui32Count--) {}
297 if(ui32Neg && (cFill ==
'0')) {
299 pcBuf[ui32Pos++] =
'-';
308 if((ui32Count > 1) && (ui32Count < 16)) {
309 for(ui32Count--; ui32Count; ui32Count--) {
310 pcBuf[ui32Pos++] = cFill;
318 pcBuf[ui32Pos++] =
'-';
322 for(; ui32Idx; ui32Idx /= ui32Base) {
324 g_pcHex[(ui32Value / ui32Idx) % ui32Base];
351 va_start(vaArgP, pcString);
363 va_start(vaArgP, pcString);
383 return UARTCharGet(
channel) & 0xFF;
389 ui32Status = UARTIntStatus(
channel,
true);
390 UARTIntClear(
channel, ui32Status);
396 uint32_t remaining_chars = (uint32_t) length;
400 while(UARTCharsAvail(
channel) && (remaining_chars > 0)) {
411 UARTIntEnable(
channel, UART_INT_RX | UART_INT_RT);
417 UARTIntDisable(
channel, UART_INT_RX | UART_INT_RT);
void EndCritical(uint32_t primask)
uint32_t memory_address_t
memory_address_t interrupt
void atomic_printf(const char *pcString,...)
uint32_t StartCritical(void)
void send_string(const char *)
char buffer[UART_DEFAULT_MAX_GET_STRING_LENGTH]
char * get_string(const uint32_t length)
void printf(const char *pcString,...)
void vprintf(const char *pcString, va_list vaArgP)
uint32_t ustrlen(const char *s)
void send_char(const char)
int UARTwrite(memory_address_t channel, const char *pcBuf, uint32_t ui32Len)
virtual uint32_t ack(void)
static uint32_t g_ui32Base
static const char *const g_pcHex