mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	Added new JTAG_ENABLE() macro for the AVR8 architecture. Fixed the JTAG_DISABLE() macro clearing all other bits in MCUSR when called.
Moved the XPLAIN board specific bootloader entry condition code to the Application_Jump_Check() function of the DFU bootloader, added support for the original XPLAIN board to the CDC class bootloader.
This commit is contained in:
		
							parent
							
								
									7abaafb3ca
								
							
						
					
					
						commit
						cd0bd7bf90
					
				| @ -70,8 +70,29 @@ uint32_t MagicBootKey ATTR_NO_INIT; | |||||||
|  */ |  */ | ||||||
| void Application_Jump_Check(void) | void Application_Jump_Check(void) | ||||||
| { | { | ||||||
|  | 	bool JumpToApplication = false; | ||||||
|  | 
 | ||||||
|  | 	#if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) | ||||||
|  | 		/* Disable JTAG debugging */ | ||||||
|  | 		JTAG_DISABLE(); | ||||||
|  | 
 | ||||||
|  | 		/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ | ||||||
|  | 		PORTF |= (1 << 4); | ||||||
|  | 		Delay_MS(10); | ||||||
|  | 
 | ||||||
|  | 		/* If the TCK pin is not jumpered to ground, start the user application instead */ | ||||||
|  | 		JumpToApplication |= ((PINF & (1 << 4)) != 0); | ||||||
|  | 
 | ||||||
|  | 		/* Re-enable JTAG debugging */ | ||||||
|  | 		JTAG_ENABLE(); | ||||||
|  | 	#endif | ||||||
|  | 
 | ||||||
| 	/* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ | 	/* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ | ||||||
| 	if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) | 	if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) | ||||||
|  | 	  JumpToApplication |= true; | ||||||
|  | 
 | ||||||
|  | 	/* If a request has been made to jump to the user application, honor it */ | ||||||
|  | 	if (JumpToApplication) | ||||||
| 	{ | 	{ | ||||||
| 		/* Turn off the watchdog */ | 		/* Turn off the watchdog */ | ||||||
| 		MCUSR &= ~(1<<WDRF); | 		MCUSR &= ~(1<<WDRF); | ||||||
|  | |||||||
| @ -106,8 +106,29 @@ uint32_t MagicBootKey ATTR_NO_INIT; | |||||||
|  */ |  */ | ||||||
| void Application_Jump_Check(void) | void Application_Jump_Check(void) | ||||||
| { | { | ||||||
|  | 	bool JumpToApplication = false; | ||||||
|  | 
 | ||||||
|  | 	#if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) | ||||||
|  | 		/* Disable JTAG debugging */ | ||||||
|  | 		JTAG_DISABLE(); | ||||||
|  | 
 | ||||||
|  | 		/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ | ||||||
|  | 		PORTF |= (1 << 4); | ||||||
|  | 		Delay_MS(10); | ||||||
|  | 
 | ||||||
|  | 		/* If the TCK pin is not jumpered to ground, start the user application instead */ | ||||||
|  | 		JumpToApplication |= ((PINF & (1 << 4)) != 0); | ||||||
|  | 
 | ||||||
|  | 		/* Re-enable JTAG debugging */ | ||||||
|  | 		JTAG_ENABLE(); | ||||||
|  | 	#endif | ||||||
|  | 
 | ||||||
| 	/* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ | 	/* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ | ||||||
| 	if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) | 	if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) | ||||||
|  | 	  JumpToApplication |= true; | ||||||
|  | 
 | ||||||
|  | 	/* If a request has been made to jump to the user application, honor it */ | ||||||
|  | 	if (JumpToApplication) | ||||||
| 	{ | 	{ | ||||||
| 		/* Turn off the watchdog */ | 		/* Turn off the watchdog */ | ||||||
| 		MCUSR &= ~(1<<WDRF); | 		MCUSR &= ~(1<<WDRF); | ||||||
| @ -130,23 +151,6 @@ int main(void) | |||||||
| 	/* Configure hardware required by the bootloader */ | 	/* Configure hardware required by the bootloader */ | ||||||
| 	SetupHardware(); | 	SetupHardware(); | ||||||
| 
 | 
 | ||||||
| 	#if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) |  | ||||||
| 	/* Disable JTAG debugging */ |  | ||||||
| 	MCUCR |= (1 << JTD); |  | ||||||
| 	MCUCR |= (1 << JTD); |  | ||||||
| 
 |  | ||||||
| 	/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ |  | ||||||
| 	PORTF |= (1 << 4); |  | ||||||
| 	Delay_MS(10); |  | ||||||
| 
 |  | ||||||
| 	/* If the TCK pin is not jumpered to ground, start the user application instead */ |  | ||||||
| 	RunBootloader = (!(PINF & (1 << 4))); |  | ||||||
| 
 |  | ||||||
| 	/* Re-enable JTAG debugging */ |  | ||||||
| 	MCUCR &= ~(1 << JTD); |  | ||||||
| 	MCUCR &= ~(1 << JTD); |  | ||||||
| 	#endif |  | ||||||
| 
 |  | ||||||
| 	/* Turn on first LED on the board to indicate that the bootloader has started */ | 	/* Turn on first LED on the board to indicate that the bootloader has started */ | ||||||
| 	LEDs_SetAllLEDs(LEDS_LED1); | 	LEDs_SetAllLEDs(LEDS_LED1); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -65,6 +65,24 @@ | |||||||
| 		/* Macros: */ | 		/* Macros: */ | ||||||
| 			#if (ARCH == ARCH_AVR8) || (ARCH == ARCH_XMEGA) || defined(__DOXYGEN__) | 			#if (ARCH == ARCH_AVR8) || (ARCH == ARCH_XMEGA) || defined(__DOXYGEN__) | ||||||
| 				#if (ARCH == ARCH_AVR8) || defined(__DOXYGEN__) | 				#if (ARCH == ARCH_AVR8) || defined(__DOXYGEN__) | ||||||
|  | 					/** Re-enables the AVR's JTAG bus in software, until a system reset. This will re-enable JTAG debugging
 | ||||||
|  | 					 *  interface after is has been disbled in software via \ref JTAG_DISABLE(). | ||||||
|  | 					 * | ||||||
|  | 					 *  \note This macro is not available for all architectures. | ||||||
|  | 					 */ | ||||||
|  | 					#define JTAG_ENABLE()                  MACROS{                                      \ | ||||||
|  | 																	__asm__ __volatile__ (               \ | ||||||
|  | 																	"in __tmp_reg__,__SREG__" "\n\t"     \ | ||||||
|  | 																	"cli" "\n\t"                         \ | ||||||
|  | 																	"out %1, %0" "\n\t"                  \ | ||||||
|  | 																	"out __SREG__, __tmp_reg__" "\n\t"   \ | ||||||
|  | 																	"out %1, %0" "\n\t"                  \ | ||||||
|  | 																	:                                    \ | ||||||
|  | 																	: "r" (MCUCR & ~(1 << JTD)),         \ | ||||||
|  | 																	  "M" (_SFR_IO_ADDR(MCUCR))          \ | ||||||
|  | 																	: "r0");                             \ | ||||||
|  | 															}MACROE | ||||||
|  | 
 | ||||||
| 					/** Disables the AVR's JTAG bus in software, until a system reset. This will override the current JTAG
 | 					/** Disables the AVR's JTAG bus in software, until a system reset. This will override the current JTAG
 | ||||||
| 					 *  status as set by the JTAGEN fuse, disabling JTAG debugging and reverting the JTAG pins back to GPIO | 					 *  status as set by the JTAGEN fuse, disabling JTAG debugging and reverting the JTAG pins back to GPIO | ||||||
| 					 *  mode. | 					 *  mode. | ||||||
| @ -79,7 +97,7 @@ | |||||||
| 																	"out __SREG__, __tmp_reg__" "\n\t"   \ | 																	"out __SREG__, __tmp_reg__" "\n\t"   \ | ||||||
| 																	"out %1, %0" "\n\t"                  \ | 																	"out %1, %0" "\n\t"                  \ | ||||||
| 																	:                                    \ | 																	:                                    \ | ||||||
| 																	: "r" (1 << JTD),                    \ | 																	: "r" (MCUCR | (1 << JTD)),          \ | ||||||
| 																	  "M" (_SFR_IO_ADDR(MCUCR))          \ | 																	  "M" (_SFR_IO_ADDR(MCUCR))          \ | ||||||
| 																	: "r0");                             \ | 																	: "r0");                             \ | ||||||
| 															}MACROE | 															}MACROE | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ | |||||||
|   *   - Added build test to verify correct compilation of all board drivers using all driver APIs |   *   - Added build test to verify correct compilation of all board drivers using all driver APIs | ||||||
|   *   - Added build test to verify correct compilation of all bootloaders using all supported devices   |   *   - Added build test to verify correct compilation of all bootloaders using all supported devices   | ||||||
|   *   - Added build test to verify that there are no detectable errors in the codebase via static analysis |   *   - Added build test to verify that there are no detectable errors in the codebase via static analysis | ||||||
|  |   *   - Added new JTAG_ENABLE() macro for the AVR8 architecture | ||||||
|   *  - Library Applications: |   *  - Library Applications: | ||||||
|   *   - Modified the CDC Host demos to set a default CDC Line Encoding on enumerated devices |   *   - Modified the CDC Host demos to set a default CDC Line Encoding on enumerated devices | ||||||
|   *   - Added Dataflash operational checks and aborts to all projects using the Dataflash to ensure it is working correctly before use |   *   - Added Dataflash operational checks and aborts to all projects using the Dataflash to ensure it is working correctly before use | ||||||
| @ -66,6 +67,7 @@ | |||||||
|   *     the stack (thanks to Jonathan Hudgins) |   *     the stack (thanks to Jonathan Hudgins) | ||||||
|   *   - Fixed broken MIDI host driver MIDI_Host_ReceiveEventPacket() function due to not unfreezing the MIDI data IN pipe before use (thanks to Michael Brown) |   *   - Fixed broken MIDI host driver MIDI_Host_ReceiveEventPacket() function due to not unfreezing the MIDI data IN pipe before use (thanks to Michael Brown) | ||||||
|   *   - Fixed swapped Little Endian/Big Endian endpoint and pipe write code for the UC3 devices (thanks to Andrew Chu) |   *   - Fixed swapped Little Endian/Big Endian endpoint and pipe write code for the UC3 devices (thanks to Andrew Chu) | ||||||
|  |   *   - Fixed the JTAG_DISABLE() macro clearing all other bits in MCUSR when called | ||||||
|   *  - Library Applications: |   *  - Library Applications: | ||||||
|   *   - Fixed error in the AVRISP-MKII programmer when ISP mode is used at 64KHz (thanks to Ben R. Porter) |   *   - Fixed error in the AVRISP-MKII programmer when ISP mode is used at 64KHz (thanks to Ben R. Porter) | ||||||
|   *   - Fixed AVRISP-MKII programmer project failing to compile for the U4 chips when VTARGET_ADC_CHANNEL is defined to an invalid channel and NO_VTARGET_DETECT is |   *   - Fixed AVRISP-MKII programmer project failing to compile for the U4 chips when VTARGET_ADC_CHANNEL is defined to an invalid channel and NO_VTARGET_DETECT is | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera