temp state, debugging spi

master
Paul Goeser 15 years ago
parent f00c4e24e1
commit 95ecf21807

@ -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();
}
}

@ -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;

@ -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

@ -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];
}

@ -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);

@ -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() {

Loading…
Cancel
Save