Adding missing debug header.
This commit is contained in:
		
							parent
							
								
									a459263b5f
								
							
						
					
					
						commit
						e708a42d80
					
				
					 2 changed files with 282 additions and 0 deletions
				
			
		
							
								
								
									
										214
									
								
								Bootloader/debug.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										214
									
								
								Bootloader/debug.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||
| 
 | ||||
							
								
								
									
										68
									
								
								Bootloader/debug.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								Bootloader/debug.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||
| 
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jacob Alexander
						Jacob Alexander