Fixed PDI programming mode in the AVRISP programmer project not exiting programming mode correctly (clear target Reset key twice, set /RESET pin to pullup).
Add newlines to the MIDI event printf() statements in the MIDI host demos.
This commit is contained in:
parent
b2bdfe4377
commit
39d56aeffe
5 changed files with 23 additions and 22 deletions
|
@ -119,7 +119,7 @@ static void XPROGProtocol_EnterXPROGMode(void)
|
|||
{
|
||||
/* Enable PDI programming mode with the attached target */
|
||||
XPROGTarget_EnableTargetPDI();
|
||||
|
||||
|
||||
/* Store the RESET key into the RESET PDI register to keep the XMEGA in reset */
|
||||
XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);
|
||||
XPROGTarget_SendByte(PDI_RESET_KEY);
|
||||
|
@ -170,14 +170,22 @@ static void XPROGProtocol_LeaveXPROGMode(void)
|
|||
|
||||
if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)
|
||||
{
|
||||
XMEGANVM_WaitWhileNVMBusBusy();
|
||||
|
||||
/* Clear the RESET key in the RESET PDI register to allow the XMEGA to run */
|
||||
XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);
|
||||
XPROGTarget_SendByte(0x00);
|
||||
|
||||
/* Clear /RESET key twice (for some reason this needs to be done twice to take effect) */
|
||||
XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);
|
||||
XPROGTarget_SendByte(0x00);
|
||||
|
||||
XPROGTarget_DisableTargetPDI();
|
||||
}
|
||||
else
|
||||
{
|
||||
TINYNVM_WaitWhileNVMBusBusy();
|
||||
|
||||
/* Clear the NVMEN bit in the TPI CONTROL register to disable TPI mode */
|
||||
XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG);
|
||||
XPROGTarget_SendByte(0x00);
|
||||
|
|
|
@ -232,33 +232,24 @@ void XPROGTarget_DisableTargetPDI(void)
|
|||
XPROGTarget_SetRxMode();
|
||||
|
||||
#if defined(XPROG_VIA_HARDWARE_USART)
|
||||
/* Set /RESET high for a one millisecond to ensure target device is restarted */
|
||||
PORTD |= (1 << 5);
|
||||
_delay_ms(1);
|
||||
|
||||
/* Turn off receiver and transmitter of the USART, clear settings */
|
||||
UCSR1A |= (1 << TXC1) | (1 << RXC1);
|
||||
UCSR1A = ((1 << TXC1) | (1 << RXC1));
|
||||
UCSR1B = 0;
|
||||
UCSR1C = 0;
|
||||
|
||||
/* Set all USART lines as input, tristate */
|
||||
/* Make Reset input with pullup to take target out of /RESET, tristate all other pins */
|
||||
DDRD &= ~((1 << 5) | (1 << 3));
|
||||
PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
|
||||
PORTD &= ~((1 << 3) | (1 << 2));
|
||||
PORTD |= (1 << 5);
|
||||
#else
|
||||
/* Turn off software USART management timer */
|
||||
TCCR1B = 0;
|
||||
|
||||
/* Set /RESET high for a one millisecond to ensure target device is restarted */
|
||||
BITBANG_PDICLOCK_PORT |= BITBANG_PDICLOCK_MASK;
|
||||
_delay_ms(1);
|
||||
|
||||
/* Set DATA and CLOCK lines to inputs */
|
||||
/* Make Reset input with pullup to take target out of /RESET, tristate all other pins */
|
||||
BITBANG_PDIDATA_DDR &= ~BITBANG_PDIDATA_MASK;
|
||||
BITBANG_PDICLOCK_DDR &= ~BITBANG_PDICLOCK_MASK;
|
||||
|
||||
/* Tristate DATA and CLOCK lines */
|
||||
BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;
|
||||
BITBANG_PDICLOCK_PORT &= ~BITBANG_PDICLOCK_MASK;
|
||||
BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue