diff options
author | Keith Packard <keithp@keithp.com> | 2008-11-28 22:57:07 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2008-11-28 22:57:07 -0800 |
commit | 39801e6e9fb9388072ee414a447f74095a6ac960 (patch) | |
tree | f777ceba4c832a0bdc1a811c39109e5710a36729 /ccdbg-io.c | |
parent | 01cb2799875e086ee6096627c058ee235bbc33d5 (diff) |
Random hacking
Diffstat (limited to 'ccdbg-io.c')
-rw-r--r-- | ccdbg-io.c | 35 |
1 files changed, 29 insertions, 6 deletions
@@ -24,6 +24,12 @@ ccdbg_quarter_clock(struct ccdbg *dbg) usleep(CC_CLOCK_US / 4); } +void +ccdbg_half_clock(struct ccdbg *dbg) +{ + usleep(CC_CLOCK_US / 2); +} + struct ccdbg * ccdbg_open(char *file) { @@ -41,6 +47,8 @@ ccdbg_open(char *file) return NULL; } cccp_init(dbg); + cccp_write(dbg, CC_CLOCK, CC_CLOCK); + dbg->clock = 1; return dbg; } @@ -79,9 +87,17 @@ ccdbg_clock_0_1(struct ccdbg *dbg) void ccdbg_write_bit(struct ccdbg *dbg, uint8_t bit) { - ccdbg_clock_1_0(dbg); - cccp_write(dbg, CC_DATA, bit ? CC_DATA : 0); - ccdbg_clock_0_1(dbg); + uint8_t data; + + assert(dbg->clock == 1); + data = CC_CLOCK; + if (bit) + data |= CC_DATA; + ccdbg_half_clock(dbg); + cccp_write(dbg, CC_DATA|CC_CLOCK, data); + ccdbg_half_clock(dbg); + cccp_write(dbg, CC_CLOCK, 0); +// printf ("%d", bit); } void @@ -98,9 +114,11 @@ ccdbg_read_bit(struct ccdbg *dbg) { uint8_t data; - ccdbg_clock_1_0(dbg); + ccdbg_half_clock(dbg); + cccp_write(dbg, CC_CLOCK, CC_CLOCK); + ccdbg_half_clock(dbg); + cccp_write(dbg, CC_CLOCK, 0); data = cccp_read(dbg, CC_DATA); - ccdbg_clock_0_1(dbg); return data ? 1 : 0; } @@ -127,17 +145,22 @@ ccdbg_cmd_write(struct ccdbg *dbg, uint8_t cmd, uint8_t *data, int len) uint8_t ccdbg_cmd_write_read8(struct ccdbg *dbg, uint8_t cmd, uint8_t *data, int len) { + uint8_t ret; ccdbg_cmd_write(dbg, cmd, data, len); - return ccdbg_read_byte(dbg); + ret = ccdbg_read_byte(dbg); + return ret; } uint16_t ccdbg_cmd_write_read16(struct ccdbg *dbg, uint8_t cmd, uint8_t *data, int len) { uint8_t byte1, byte0; + int i; ccdbg_cmd_write(dbg, cmd, data, len); byte1 = ccdbg_read_byte(dbg); byte0 = ccdbg_read_byte(dbg); + for (i = 0; i < 4; i++) + (void) ccdbg_read_byte(dbg); return (byte1 << 8) | byte0; } |