|
- #include "debug/printf.h"
-
- #ifdef PRINT_DEBUG_STUFF
-
- #include "avr/pgmspace.h"
- #include <stdarg.h>
- #include "imxrt.h"
-
- void putchar_debug(char c);
- static void puint_debug(unsigned int num);
-
-
- FLASHMEM void printf_debug(const char *format, ...)
- {
- va_list args;
- unsigned int val;
- int n;
-
- va_start(args, format);
- for (; *format != 0; format++) { // no-frills stand-alone printf
- if (*format == '%') {
- ++format;
- if (*format == '%') goto out;
- if (*format == '-') format++; // ignore size
- while (*format >= '0' && *format <= '9') format++; // ignore size
- if (*format == 'l') format++; // ignore long
- if (*format == '\0') break;
- if (*format == 's') {
- printf_debug((char *)va_arg(args, int));
- } else if (*format == 'd') {
- n = va_arg(args, int);
- if (n < 0) {
- n = -n;
- putchar_debug('-');
- }
- puint_debug(n);
- } else if (*format == 'u') {
- puint_debug(va_arg(args, unsigned int));
- } else if (*format == 'x' || *format == 'X') {
- val = va_arg(args, unsigned int);
- for (n=0; n < 8; n++) {
- unsigned int d = (val >> 28) & 15;
- putchar_debug((d < 10) ? d + '0' : d - 10 + 'A');
- val <<= 4;
- }
- } else if (*format == 'c' ) {
- putchar_debug((char)va_arg(args, int));
- }
- } else {
- out:
- if (*format == '\n') putchar_debug('\r');
- putchar_debug(*format);
- }
- }
- va_end(args);
- }
-
- static void puint_debug(unsigned int num)
- {
- char buf[12];
- unsigned int i = sizeof(buf)-2;
-
- buf[sizeof(buf)-1] = 0;
- while (1) {
- buf[i] = (num % 10) + '0';
- num /= 10;
- if (num == 0) break;
- i--;
- }
- printf_debug(buf + i);
- }
-
- FLASHMEM void putchar_debug(char c)
- {
- while (!(LPUART3_STAT & LPUART_STAT_TDRE)) ; // wait
- LPUART3_DATA = c;
- }
-
- FLASHMEM void printf_debug_init(void)
- {
- CCM_CCGR0 |= CCM_CCGR0_LPUART3(CCM_CCGR_ON); // turn on Serial4
- IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_06 = 2; // Arduino pin 17
- LPUART3_BAUD = LPUART_BAUD_OSR(25) | LPUART_BAUD_SBR(8); // ~115200 baud
- LPUART3_CTRL = LPUART_CTRL_TE;
- }
-
-
-
-
-
- #endif // PRINT_DEBUG_STUFF
|