# HG changeset patch # User Paul Boddie # Date 1360527508 0 # Node ID 744300c992341587ab3b1240de2cdd148b50ef11 # Parent 07f93271609e46547fb1f388b34ce04200c298b7 Introduced register reading and writing functions. diff -r 07f93271609e -r 744300c99234 test.c --- a/test.c Sun Feb 10 20:12:04 2013 +0000 +++ b/test.c Sun Feb 10 20:18:28 2013 +0000 @@ -143,6 +143,35 @@ return result; } +uint8_t max_read(uint8_t reg, uint8_t *status) +{ + uint8_t result = 0, tmpstatus = 0; + + tmpstatus = 0; + + spi_begin(); + tmpstatus = spi_sendrecv(max_reg_read(reg)); + result = spi_sendrecv(0); + spi_end(); + + if (status != NULL) + *status = tmpstatus; + + return result; +} + +uint8_t max_write(uint8_t reg, uint8_t value) +{ + uint8_t status = 0; + + spi_begin(); + status = spi_sendrecv(max_reg_write(reg)); + spi_sendrecv(value); + spi_end(); + + return status; +} + void reset() { SET(MAX_RESET); @@ -153,26 +182,17 @@ void chipreset() { printf("Resetting...\n"); - spi_begin(); - spi_sendrecv(max_reg_write(MAX_REG_USBCTL)); - spi_sendrecv(MAX_USBCTL_CHIPRES); - spi_end(); + max_write(MAX_REG_USBCTL, MAX_USBCTL_CHIPRES); printf("Clearing the reset...\n"); - spi_begin(); - spi_sendrecv(max_reg_write(MAX_REG_USBCTL)); - spi_sendrecv(0); - spi_end(); + max_write(MAX_REG_USBCTL, 0); } uint8_t check() { - uint8_t oscillator = 0; + uint8_t oscillator; - spi_begin(); - spi_sendrecv(max_reg_read(MAX_REG_USBIRQ)); - oscillator = spi_sendrecv(0); - spi_end(); + oscillator = max_read(MAX_REG_USBIRQ, NULL); return (oscillator & ~(MAX_USBIRQ_NOVBUSIRQ | MAX_USBIRQ_VBUSIRQ)) == MAX_USBIRQ_OSCOKIRQ; } @@ -209,10 +229,7 @@ /* Set full-duplex, interrupt signalling. */ printf("Setting pin control...\n"); - spi_begin(); - spi_sendrecv(max_reg_write(MAX_REG_PINCTL)); - spi_sendrecv(MAX_PINCTL_INTLEVEL_LEVEL | MAX_PINCTL_FDUPSPI_FULL); - spi_end(); + max_write(MAX_REG_PINCTL, MAX_PINCTL_INTLEVEL_LEVEL | MAX_PINCTL_FDUPSPI_FULL); reset(); chipreset(); @@ -221,28 +238,20 @@ /* Set host mode. */ printf("Setting mode...\n"); - spi_begin(); - spi_sendrecv(max_reg_write(MAX_REG_MODE)); - spi_sendrecv(MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN); - spi_end(); + status = max_write(MAX_REG_MODE, MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN); + printf("Status = %x\n", status); printf("Ready? %d\n", check()); /* Read from the REVISION register. */ printf("Reading...\n"); - spi_begin(); - status = spi_sendrecv(max_reg_read(MAX_REG_REVISION)); - revision = spi_sendrecv(0); - spi_end(); + revision = max_read(MAX_REG_REVISION, &status); printf("Status = %x\n", status); printf("Revision = %x\n", revision); printf("Ready? %d\n", check()); printf("HRSL...\n"); - spi_begin(); - status = spi_sendrecv(max_reg_read(MAX_REG_HRSL)); - hrsl = spi_sendrecv(0); - spi_end(); + hrsl = max_read(MAX_REG_HRSL, &status); printf("Status = %x\n", status); printf("HRSL = %x\n", hrsl); printf("Ready? %d\n", check());