diff options
| author | Keith Packard <keithp@keithp.com> | 2008-12-08 17:25:28 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2008-12-08 17:25:28 -0800 | 
| commit | e64b4dbf15e9ee1cb0de002985de7575e83d46e9 (patch) | |
| tree | b70d368028e430d3043c2f703391e63eeab81e6b | |
| parent | 4f38974a9941cddaba27c17c5a46f923db386c94 (diff) | |
Add support for input-only lines (-)
| -rw-r--r-- | ccdbg.c | 102 | ||||
| -rw-r--r-- | ccdbg.h | 2 | ||||
| -rw-r--r-- | chip_id | 107 | ||||
| -rw-r--r-- | get_status | 292 | ||||
| -rw-r--r-- | p1_1 | 123 | ||||
| -rw-r--r-- | rd_config | 18 | 
6 files changed, 428 insertions, 216 deletions
| @@ -18,40 +18,55 @@  #include "ccdbg.h" -static uint8_t -get_bit(char *line, int i, char on, uint8_t bit) +static void +get_bit(char *line, int i, char on, uint8_t bit, uint8_t *bits, uint8_t *masks)  { -	if (line[i] == on) -		return bit; -	if (line[i] == '.') -		return 0; +	if (line[i] == on) { +		*bits |= bit; +		*masks |= bit; +		return; +	} +	if (line[i] == '.') { +		*masks |= bit; +		return; +	} +	if (line[i] == '-') { +		return; +	}  	fprintf(stderr, "bad line %s\n", line);  	exit (1);  }  static char -is_bit(uint8_t get, char on, uint8_t bit) +is_bit(uint8_t get, uint8_t mask, char on, uint8_t bit)  { -	if (get&bit) -		return on; -	else -		return '.'; +	if (mask&bit) { +		if (get&bit) +			return on; +		else +			return '.'; +	} else +		return '-';  }  static uint8_t -ccdbg_write_read(struct ccdbg *dbg, uint8_t set) -{ -	uint8_t	get; - -	ccdbg_write(dbg, CC_DATA|CC_CLOCK|CC_RESET_N, set); -	get = ccdbg_read(dbg); -	printf("%c %c %c -> %c %c %c\n", -	       is_bit(set, 'C', CC_CLOCK), -	       is_bit(set, 'D', CC_DATA), -	       is_bit(set, 'R', CC_RESET_N), -	       is_bit(get, 'C', CC_CLOCK), -	       is_bit(get, 'D', CC_DATA), -	       is_bit(get, 'R', CC_RESET_N)); +ccdbg_write_read(struct ccdbg *dbg, uint8_t set, uint8_t mask) +{ +	uint8_t	get = set; + +	if (mask != (CC_DATA|CC_CLOCK|CC_RESET_N)) +		get = ccdbg_read(dbg); +	ccdbg_write(dbg, mask, set); +	printf ("%c %c %c", +		is_bit(set, mask, 'C', CC_CLOCK), +		is_bit(set, mask, 'D', CC_DATA), +		is_bit(set, mask, 'R', CC_RESET_N)); +	if (mask != (CC_DATA|CC_CLOCK|CC_RESET_N)) +		printf(" -> %c %c %c", +		       is_bit(get, 0xf, 'C', CC_CLOCK), +		       is_bit(get, 0xf, 'D', CC_DATA), +		       is_bit(get, 0xf, 'R', CC_RESET_N)); +	printf("\n");  	ccdbg_half_clock(dbg);  	return get;  } @@ -62,29 +77,29 @@ _ccdbg_debug_mode(struct ccdbg *dbg)  	printf ("#\n");  	printf ("# Debug mode\n");  	printf ("#\n"); -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N); -	ccdbg_write_read(dbg,          CC_DATA           ); -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           ); -	ccdbg_write_read(dbg,          CC_DATA           ); -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           ); -	ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg,          CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg,          CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);  }  static void  _ccdbg_reset(struct ccdbg *dbg)  { -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N); -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           ); -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           ); -	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA           , CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);  }  static void  _ccdbg_send_bit(struct ccdbg *dbg, uint8_t bit)  {  	if (bit) bit = CC_DATA; -	ccdbg_write_read(dbg, CC_CLOCK|bit|CC_RESET_N); -	ccdbg_write_read(dbg,          bit|CC_RESET_N); +	ccdbg_write_read(dbg, CC_CLOCK|bit|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N); +	ccdbg_write_read(dbg,          bit|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);  }  static void @@ -135,8 +150,8 @@ _ccdbg_read_bits(struct ccdbg *dbg, int bits)  	printf ("# Read %d bits\n", bits);  	printf ("#\n");  	for (bit = 0; bit < bits; bit++) { -		      ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N); -		get = ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N); +		      ccdbg_write_read(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_RESET_N); +		get = ccdbg_write_read(dbg,          CC_DATA|CC_RESET_N, CC_CLOCK|CC_RESET_N);  		val <<= 1;  		if (get & CC_DATA)  			val |= 1; @@ -208,7 +223,7 @@ static void  ccdbg_manual(struct ccdbg *dbg, FILE *input)  {  	char	line[80]; -	uint8_t	set; +	uint8_t	set, mask;  	while (fgets(line, sizeof line, input)) {  		if (line[0] == '#' || line[0] == '\n') { @@ -216,10 +231,11 @@ ccdbg_manual(struct ccdbg *dbg, FILE *input)  			continue;  		}  		set = 0; -		set |= get_bit(line, 0, 'C', CC_CLOCK); -		set |= get_bit(line, 2, 'D', CC_DATA); -		set |= get_bit(line, 4, 'R', CC_RESET_N); -		ccdbg_write_read(dbg, set); +		mask = 0; +		get_bit(line, 0, 'C', CC_CLOCK, &set, &mask); +		get_bit(line, 2, 'D', CC_DATA, &set, &mask); +		get_bit(line, 4, 'R', CC_RESET_N, &set, &mask); +		ccdbg_write_read(dbg, set, mask);  	}  } @@ -45,7 +45,7 @@  /* painfully slow for now */ -#define CC_CLOCK_US	(100 * 1000) +#define CC_CLOCK_US	(100)  struct ccdbg {  	usb_dev_handle	*usb_dev; @@ -33,82 +33,37 @@ C . R	0  # start reading again  C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R @@ -9,20 +9,61 @@ C D .  . D R  # -# GET_STATUS +# Halt 0x44  #  C . R	0  . . R +C D R	1 +. D R +C . R	0 +. . R +C . R	0 +. . R +  C . R	0  . . R  C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R + +# status byte + +C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +# Resume 0x4c +# + +C . R	0 +. . R  C D R	1  . D R -  C . R	0  . . R +C . R	0 +. . R + +C D R	1 +. D R  C D R	1  . D R  C . R	0 @@ -30,42 +71,259 @@ C . R	0  C . R	0  . . R +# status byte + +C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R +  # -# Now read for a while +# READ_STATUS  # -C D R -. D R -C D R -. D R -C D R +C . R	0 +. . R +C . R	0 +. . R +C D R	1  . D R -C D R +C D R	1  . D R -C D R +C . R	0 +. . R +C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R + +# +# status +# +  C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +# +# READ_STATUS +# + +C . R	0 +. . R +C . R	0 +. . R +C D R	1  . D R -C D R +C D R	1  . D R -C D R + +C . R	0 +. . R +C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R + +# +# status +#  C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +# +# READ_STATUS +# + +C . R	0 +. . R +C . R	0 +. . R +C D R	1  . D R -C D R +C D R	1  . D R -C D R + +C . R	0 +. . R +C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R + +# +# status +# +  C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +# +# Halt 0x44 +# + +C . R	0 +. . R +C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R -C D R +C . R	0 +. . R +C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R + +# status byte +  C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +# +# READ_STATUS +# + +C . R	0 +. . R +C . R	0 +. . R +C D R	1  . D R -C D R +C D R	1  . D R -C D R + +C . R	0 +. . R +C D R	1  . D R +C . R	0 +. . R +C . R	0 +. . R + +# +# status +# + +C D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + @@ -23,22 +23,22 @@ C . R	0  # status byte  C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R + +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R  #  # DEBUG_INSTR @@ -126,22 +126,22 @@ C . R	0  # status byte  C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R  #  # DEBUG_INSTR @@ -228,22 +228,22 @@ C D R	1  # status byte  C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R  #  # DEBUG_INSTR @@ -330,20 +330,21 @@ C D R	1  # status byte  C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +. - R +C - R +. - R +C - R +. - R +C - R +. - R -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R +C - R +. - R +C - R +. - R +C - R +. - R +C - R +. - R +C D R @@ -51,21 +51,3 @@ C D R  . D R  C D R  . D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R - -C D R -. D R -C D R -. D R -C D R -. D R -C D R -. D R | 
