From 95ecf218070c1ec2f49a2e37bdb554621de57ae3 Mon Sep 17 00:00:00 2001 From: Paul Goeser Date: Sat, 11 Dec 2010 21:53:35 +0100 Subject: [PATCH] temp state, debugging spi --- firmware/masterchip/main.c | 30 +++++++++++++++++++++++++++++- firmware/masterchip/usb.c | 2 +- firmware/shared/spi.c | 16 +++++++++++++++- firmware/shared/spi_proto.c | 7 ++++--- firmware/shared/spi_proto.h | 2 +- firmware/slavechip/main.c | 4 ++-- 6 files changed, 52 insertions(+), 9 deletions(-) diff --git a/firmware/masterchip/main.c b/firmware/masterchip/main.c index 632788a..06a9f49 100644 --- a/firmware/masterchip/main.c +++ b/firmware/masterchip/main.c @@ -68,6 +68,10 @@ int __attribute__((noreturn)) main(void) { usbDeviceConnect(); sei(); + display_gotoyx(0,0); + display_puts("\nstart"); + display_update(); + for(;;){ usbPoll(); @@ -80,7 +84,31 @@ int __attribute__((noreturn)) main(void) { } SOFTTIMER(1,250) { - updateTemperature(); + //updateTemperature(); + } + + SOFTTIMER(3,100) { +/* uint8_t foo[4]; + foo[0]=0x55; + foo[1]=0x88; + foo[3]=0x23; + spi_mst_write_read(2,foo); + spi_mst_start_packet(); + spi_mst_write_read(2,foo+2); + spi_mst_end_packet(); +*/ + uint16_t foo=0x3456; + foo=spi_master_communicate(3,5,foo); + display_gotoyx(0,0); +/* display_puthex(foo[0]); + display_puthex(foo[1]); + display_puthex(foo[2]); + display_puthex(foo[3]);*/ + display_puthex((foo>>8)&0xff); + display_puthex((foo)&0xff); + display_puts("\nfoo"); + display_update(); + } } diff --git a/firmware/masterchip/usb.c b/firmware/masterchip/usb.c index f5ac651..bc03667 100644 --- a/firmware/masterchip/usb.c +++ b/firmware/masterchip/usb.c @@ -32,7 +32,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) { uint8_t valL = (uint8_t) rq->wIndex.bytes[1]; uint16_t send = (valH << 8) | valL; - uint16_t recv = speak_raw(opcode, addr, spi_proto_needs(opcode), send); + uint16_t recv = spi_master_communicate(opcode, addr, send); dataBuffer[0] = (recv >> 8) & 0xff; dataBuffer[1] = recv & 0xff; diff --git a/firmware/shared/spi.c b/firmware/shared/spi.c index d5adbee..7d428b4 100644 --- a/firmware/shared/spi.c +++ b/firmware/shared/spi.c @@ -105,6 +105,14 @@ void spi_mst_read(uint8_t len, uint8_t *data){ } } +void spi_mst_write_read(uint8_t len, uint8_t *data){ + while(len>0){ + SPDR = *data; + len--; + SPI_WAIT; + *data++ = SPDR; + } +} #ifndef SPI_MASTER @@ -135,10 +143,16 @@ void __attribute__((always_inline)) spi_sla_handle_packet(){ } } + + ISR(SPI_STC_vect){ - SPCR &= ~(_BV(SPIE)); //disable spi interrupts + uint8_t a; + a = SPDR; + SPDR = ~a; +/* SPCR &= ~(_BV(SPIE)); //disable spi interrupts spi_sla_handle_packet(); SPCR |= _BV(SPIE); + */ } #endif //not SPI_MASTER diff --git a/firmware/shared/spi_proto.c b/firmware/shared/spi_proto.c index eb67db8..13cf067 100644 --- a/firmware/shared/spi_proto.c +++ b/firmware/shared/spi_proto.c @@ -11,16 +11,17 @@ void talk_to_slave(uint8_t opcode, uint8_t addr, uint8_t flags) write_data[0] = opcode; write_data[1] = addr; spi_mst_start_packet(); - spi_mst_write(flags & SPI_WRITE_DATA? 4 : 2, write_data); + spi_mst_write(flags & SPI_WRITE_DATA? 4 : 3, write_data); spi_mst_read(flags & SPI_READ_DATA? 2 : 0, read_data); spi_mst_end_packet(); } -uint16_t speak_raw(uint8_t opcode, uint8_t number, uint8_t flags, uint16_t value) +uint16_t spi_master_communicate(uint8_t opcode, uint8_t address, uint16_t value) { + uint8_t flags = spi_proto_needs(); write_data[2] = value >> 8; write_data[3] = value & 0xff; - talk_to_slave(opcode, number, flags); + talk_to_slave(opcode, address, flags); return (read_data[0] << 8) | read_data[1]; } diff --git a/firmware/shared/spi_proto.h b/firmware/shared/spi_proto.h index a9736b1..67afbf3 100644 --- a/firmware/shared/spi_proto.h +++ b/firmware/shared/spi_proto.h @@ -9,7 +9,7 @@ #define SPI_READ_DATA 0x10 #define SPI_NONE 0 -uint16_t speak_raw(uint8_t opcode, uint8_t number, uint8_t flags, uint16_t data); +uint16_t spi_master_communicate(uint8_t opcode, uint8_t address, uint16_t value) uint8_t spi_proto_needs(uint8_t opcode); diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index 033113f..836f802 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -1,8 +1,8 @@ #include "main.h" #include "spi.h" -uint16_t foo = 16; -uint8_t bar = 8; +uint16_t foo = 0xfefe; +uint8_t bar = 0xee; void baz() {