diff options
| author | Keith Packard <keithp@keithp.com> | 2009-04-21 02:07:08 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2009-04-21 02:07:08 -0700 | 
| commit | 1b333def5052d2ed47fdeaef23a897fe326f6340 (patch) | |
| tree | aea48be9fa977fb98e8211b6871b44f27db26ee8 | |
| parent | d1887ded41a5bfec8e10e9fd736fa9444b9b6222 (diff) | |
Add longer debug delays to reset/debug_mode entry
| -rw-r--r-- | ao_dbg.c | 37 | 
1 files changed, 31 insertions, 6 deletions
| @@ -29,10 +29,16 @@ static void  ao_dbg_send_bits(uint8_t msk, uint8_t val)  {  	P0 = (P0 & ~msk) | (val & msk); +	_asm +		nop +		nop +		nop +		nop +		nop +		nop +	_endasm;  } -#define ao_dbg_pause() do { _asm nop; nop; nop _endasm; } while (0); -  void  ao_dbg_send_byte(uint8_t byte)  { @@ -46,9 +52,7 @@ ao_dbg_send_byte(uint8_t byte)  			d = DBG_DATA;  		byte <<= 1;  		ao_dbg_send_bits(DBG_CLOCK|DBG_DATA, DBG_CLOCK|d); -		ao_dbg_pause();  		ao_dbg_send_bits(DBG_CLOCK|DBG_DATA,     0    |d); -		ao_dbg_pause();  	}  	P0DIR &= ~DBG_DATA;  } @@ -62,11 +66,9 @@ ao_dbg_recv_byte(void)  	for (b = 0; b < 8; b++) {  		byte = byte << 1;  		ao_dbg_send_bits(DBG_CLOCK, DBG_CLOCK); -		ao_dbg_pause();  		if (DBG_DATA_PIN)  			byte |= 1;  		ao_dbg_send_bits(DBG_CLOCK, 0); -		ao_dbg_pause();  	}  	return byte;  } @@ -189,28 +191,51 @@ ao_dbg_set_pins(void)  	P0DIR = DBG_RESET_N | DBG_CLOCK;  } +static void +ao_dbg_long_delay(void) +{ +	uint8_t	n; + +	for (n = 0; n < 20; n++) +		_asm nop _endasm; +} +  void  ao_dbg_debug_mode(void)  {  	ao_dbg_set_pins(); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|DBG_RESET_N); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N,     0    |DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N,     0    |DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N,     0    |DBG_DATA|DBG_RESET_N); +	ao_dbg_long_delay();  }  void  ao_dbg_reset(void)  {  	ao_dbg_set_pins(); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|DBG_RESET_N); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    ); +	ao_dbg_long_delay();  	ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|DBG_RESET_N); +	ao_dbg_long_delay();  }  static void | 
