]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Adding missing debug header.
authorJacob Alexander <haata@kiibohd.com>
Tue, 9 Jun 2015 17:02:05 +0000 (10:02 -0700)
committerJacob Alexander <haata@kiibohd.com>
Sun, 14 Jun 2015 21:33:40 +0000 (14:33 -0700)
Bootloader/debug.c [new file with mode: 0644]
Bootloader/debug.h [new file with mode: 0644]

diff --git a/Bootloader/debug.c b/Bootloader/debug.c
new file mode 100644 (file)
index 0000000..041a3ce
--- /dev/null
@@ -0,0 +1,214 @@
+/* Copyright (C) 2015 by Jacob Alexander
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+// ----- Includes -----
+
+// Local Includes
+#include "mchck.h"
+
+
+
+// ----- Defines -----
+
+// UART Configuration
+#if defined(_mk20dx256vlh7_) // UART2 Debug
+#define UART_BDH    UART2_BDH
+#define UART_BDL    UART2_BDL
+#define UART_C1     UART2_C1
+#define UART_C2     UART2_C2
+#define UART_C3     UART2_C3
+#define UART_C4     UART2_C4
+#define UART_CFIFO  UART2_CFIFO
+#define UART_D      UART2_D
+#define UART_PFIFO  UART2_PFIFO
+#define UART_RCFIFO UART2_RCFIFO
+#define UART_RWFIFO UART2_RWFIFO
+#define UART_S1     UART2_S1
+#define UART_S2     UART2_S2
+#define UART_SFIFO  UART2_SFIFO
+#define UART_TWFIFO UART2_TWFIFO
+
+#define SIM_SCGC4_UART  SIM_SCGC4_UART2
+#define IRQ_UART_STATUS IRQ_UART2_STATUS
+
+#else
+#error "Bootloader UART Debug unsupported"
+#endif
+
+
+
+// ----- Functions -----
+
+#if defined(_mk20dx256vlh7_)
+
+void uart_serial_setup()
+{
+       // Setup the the UART interface for keyboard data input
+       SIM_SCGC4 |= SIM_SCGC4_UART; // Disable clock gating
+
+// Kiibohd-dfu
+#if defined(_mk20dx256vlh7_)
+       // Pin Setup for UART2
+       PORTD_PCR3 = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); // TX Pin
+#endif
+
+
+#if defined(_mk20dx256vlh7_) // UART2 Debug
+       // Setup baud rate - 115200 Baud
+       // Uses Bus Clock
+       // 36 MHz / ( 16 * Baud ) = BDH/L
+       // Baud: 115200 -> 36 MHz / ( 16 * 115200 ) = 19.53125
+       // Thus baud setting = 19
+       // NOTE: If finer baud adjustment is needed see UARTx_C4 -> BRFA in the datasheet
+       uint16_t baud = 19; // Max setting of 8191
+       UART_BDH = (uint8_t)(baud >> 8);
+       UART_BDL = (uint8_t)baud;
+       UART_C4 = 0x11;
+
+#endif
+
+       // 8 bit, No Parity, Idle Character bit after stop
+       UART_C1 = UART_C1_ILT;
+
+       // TX FIFO Enabled, TX FIFO Size 1 (Max 8 datawords)
+       // TX/RX FIFO Size:
+       //  0x0 - 1 dataword
+       //  0x1 - 4 dataword
+       //  0x2 - 8 dataword
+       UART_PFIFO = UART_PFIFO_TXFE;
+
+       // TX Enabled, RX Enabled, RX Interrupt Enabled, Generate idles
+       // UART_C2_TE UART_C2_RE UART_C2_RIE UART_C2_ILIE
+       UART_C2 = UART_C2_TE | UART_C2_ILIE;
+}
+
+
+int uart_serial_write( const void *buffer, uint32_t size )
+{
+       const uint8_t *data = (const uint8_t *)buffer;
+       uint32_t position = 0;
+
+       // While buffer is not empty and transmit buffer is
+       while ( position < size )
+       {
+               while ( !( UART_SFIFO & UART_SFIFO_TXEMPT ) ); // Wait till there is room to send
+               UART_D = data[position++];
+       }
+
+       return 0;
+}
+
+
+int Output_putstr( char* str )
+{
+       uint32_t count = 0;
+
+       // Count characters until NULL character, then send the amount counted
+       while ( str[count] != '\0' )
+               count++;
+
+       return uart_serial_write( str, count );
+}
+
+
+uint16_t lenStr( char* in )
+{
+       // Iterator
+       char *pos;
+
+       // Loop until null is found
+       for ( pos = in; *pos; pos++ );
+
+       // Return the difference between the pointers of in and pos (which is the string length)
+       return (pos - in);
+}
+
+
+void revsStr( char* in )
+{
+       // Iterators
+       int i, j;
+
+       // Temp storage
+       char c;
+
+       // Loop through the string, and reverse the order of the characters
+       for ( i = 0, j = lenStr( in ) - 1; i < j; i++, j-- )
+       {
+               c = in[i];
+               in[i] = in[j];
+               in[j] = c;
+       }
+}
+
+
+void hexToStr_op( uint32_t in, char* out, uint8_t op )
+{
+       // Position container
+       uint32_t pos = 0;
+
+       // Evaluate through digits as hex
+       do
+       {
+               uint32_t cur = in % 16;
+               out[pos++] = cur + (( cur < 10 ) ? '0' : 'A' - 10);
+       }
+       while ( (in /= 16) > 0 );
+
+       // Output formatting options
+       switch ( op )
+       {
+       case 1: // Add 0x
+               out[pos++] = 'x';
+               out[pos++] = '0';
+               break;
+       case 2: //  8-bit padding
+       case 4: // 16-bit padding
+       case 8: // 32-bit padding
+               while ( pos < op )
+                       out[pos++] = '0';
+               break;
+       }
+
+       // Append null
+       out[pos] = '\0';
+
+       // Reverse the string to the correct order
+       revsStr( out );
+}
+
+
+void printHex_op( uint32_t in, uint8_t op )
+{
+       // With an op of 1, the max number of characters is 6 + 1 for null
+       // e.g. "0xFFFF\0"
+       // op 2 and 4 require fewer characters (2+1 and 4+1 respectively)
+       char tmpStr[7];
+
+       // Convert number
+       hexToStr_op( in, tmpStr, op );
+
+       // Print number
+       Output_putstr( tmpStr );
+}
+
+#endif
+
diff --git a/Bootloader/debug.h b/Bootloader/debug.h
new file mode 100644 (file)
index 0000000..d73395a
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright (C) 2015 by Jacob Alexander
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef debug_h__
+#define debug_h__
+
+// ----- Includes -----
+
+// Compiler Includes
+
+// Project Includes
+
+
+// ----- Defines -----
+
+#define NL "\r\n"
+//#define FLASH_DEBUG // XXX: Use when there are USB flashing issues
+
+
+
+// ----- Macros -----
+
+#define print(str)   Output_putstr(str)
+#define printNL(str) Output_putstr(str NL)
+
+
+
+// ----- Functions -----
+
+#if defined(_mk20dx256vlh7_)
+int Output_putstr( char* str );
+
+int uart_serial_write( const void *buffer, uint32_t size );
+
+void uart_serial_setup();
+
+// Convenience
+#define printHex(hex) printHex_op(hex, 1)
+void printHex_op( uint32_t in, uint8_t op );
+
+#else
+#define Output_putstr(str)
+#define uart_serial_write(buf,size)
+#define uart_serial_setup()
+#define printHex(hex)
+#define printHex_op(in,op)
+#endif
+
+#endif
+