saturn-examples/cdc/serial.c
2024-09-19 15:38:49 -05:00

51 lines
966 B
C

#include "serial.h"
#include "sh2.h"
void serial_char(const char c)
{
while ((sh2.reg.SSR & SSR__TDRE) == 0); // wait for transmit data empty
sh2.reg.TDR = c;
}
void serial_string(const char * s)
{
while (*s) {
while ((sh2.reg.SSR & SSR__TDRE) == 0); // wait for transmit data empty
sh2.reg.TDR = *s++;
}
}
void serial_bytes(const char * s, uint32_t length)
{
while (length > 0) {
while ((sh2.reg.SSR & SSR__TDRE) == 0); // wait for transmit data empty
sh2.reg.TDR = *s++;
length -= 1;
}
}
static void hex(char * c, uint32_t len, uint32_t n)
{
while (len > 0) {
uint32_t nib = n & 0xf;
n = n >> 4;
if (nib > 9) {
nib += (97 - 10);
} else {
nib += (48 - 0);
}
c[--len] = nib;
}
}
void serial_integer(const uint32_t n, const uint32_t length, const char end)
{
char num_buf[length];
hex(num_buf, length, n);
serial_string("0x");
serial_bytes(num_buf, length);
serial_char(end);
}