forked from mfulz_github/qmk_firmware
		
	Make AVRISP-MKII clone project's software PDI/TPI mode more robust by keeping track of timeouts while waiting for a Tx/Rx to finish.
This commit is contained in:
		
							parent
							
								
									3c7ff36cfd
								
							
						
					
					
						commit
						85aaaf84ce
					
				@ -156,8 +156,7 @@ void XPROGTarget_EnableTargetPDI(void)
 | 
				
			|||||||
	PORTD |= (1 << 3);
 | 
						PORTD |= (1 << 3);
 | 
				
			||||||
	_delay_us(1);
 | 
						_delay_us(1);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* Set up the synchronous USART for XMEGA communications - 
 | 
						/* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */
 | 
				
			||||||
	   8 data bits, even parity, 2 stop bits */
 | 
					 | 
				
			||||||
	UBRR1  = (F_CPU / XPROG_HARDWARE_SPEED);
 | 
						UBRR1  = (F_CPU / XPROG_HARDWARE_SPEED);
 | 
				
			||||||
	UCSR1B = (1 << TXEN1);
 | 
						UCSR1B = (1 << TXEN1);
 | 
				
			||||||
	UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
 | 
						UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
 | 
				
			||||||
@ -172,7 +171,6 @@ void XPROGTarget_EnableTargetPDI(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Fire timer compare channel A ISR to manage the software USART */
 | 
						/* Fire timer compare channel A ISR to manage the software USART */
 | 
				
			||||||
	OCR1A  = BITS_BETWEEN_USART_CLOCKS;
 | 
						OCR1A  = BITS_BETWEEN_USART_CLOCKS;
 | 
				
			||||||
	OCR1B   = BITS_BETWEEN_USART_CLOCKS;
 | 
					 | 
				
			||||||
	TCCR1B = (1 << WGM12) | (1 << CS10);
 | 
						TCCR1B = (1 << WGM12) | (1 << CS10);
 | 
				
			||||||
	TIMSK1 = (1 << OCIE1A);
 | 
						TIMSK1 = (1 << OCIE1A);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -197,8 +195,7 @@ void XPROGTarget_EnableTargetTPI(void)
 | 
				
			|||||||
	DDRD |=  (1 << 5) | (1 << 3);
 | 
						DDRD |=  (1 << 5) | (1 << 3);
 | 
				
			||||||
	DDRD &= ~(1 << 2);
 | 
						DDRD &= ~(1 << 2);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	/* Set up the synchronous USART for TINY communications - 
 | 
						/* Set up the synchronous USART for TINY communications - 8 data bits, even parity, 2 stop bits */
 | 
				
			||||||
	   8 data bits, even parity, 2 stop bits */
 | 
					 | 
				
			||||||
	UBRR1  = (F_CPU / XPROG_HARDWARE_SPEED);
 | 
						UBRR1  = (F_CPU / XPROG_HARDWARE_SPEED);
 | 
				
			||||||
	UCSR1B = (1 << TXEN1);
 | 
						UCSR1B = (1 << TXEN1);
 | 
				
			||||||
	UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
 | 
						UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
 | 
				
			||||||
@ -402,7 +399,14 @@ static void XPROGTarget_SetTxMode(void)
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
	IsSending = true;
 | 
						IsSending = true;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	while (SoftUSART_BitCount);
 | 
						while (SoftUSART_BitCount && TimeoutMSRemaining)
 | 
				
			||||||
 | 
						{	
 | 
				
			||||||
 | 
							if (TIFR0 & (1 << OCF0A))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								TIFR0 |= (1 << OCF0A);
 | 
				
			||||||
 | 
								TimeoutMSRemaining--;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* Wait for a full cycle of the clock */
 | 
						/* Wait for a full cycle of the clock */
 | 
				
			||||||
	SoftUSART_Data     = 0x0001;
 | 
						SoftUSART_Data     = 0x0001;
 | 
				
			||||||
@ -436,7 +440,14 @@ static void XPROGTarget_SetRxMode(void)
 | 
				
			|||||||
	DDRD   &= ~(1 << 3);
 | 
						DDRD   &= ~(1 << 3);
 | 
				
			||||||
	PORTD  &= ~(1 << 3);
 | 
						PORTD  &= ~(1 << 3);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	while (SoftUSART_BitCount);
 | 
						while (SoftUSART_BitCount && TimeoutMSRemaining)
 | 
				
			||||||
 | 
						{	
 | 
				
			||||||
 | 
							if (TIFR0 & (1 << OCF0A))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								TIFR0 |= (1 << OCF0A);
 | 
				
			||||||
 | 
								TimeoutMSRemaining--;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)
 | 
						if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user