Merge branch 'master' of gitorious.ghostdub.de:avr/thermocouple

Conflicts:
	firmware/masterchip/spi_proto.c
	firmware/masterchip/spi_proto.h
master
Nidan 15 years ago
commit b882f9b6ea

@ -9,7 +9,7 @@ Software:
- irgendein Protokoll für SPI
- A/D-Wandler-Ansteuercode
- Check spi_proto include stuff?
- slave nicht aufhängen lassen wenn zu wenig gelesen
Später:
- PT1000

@ -67,24 +67,26 @@ int cnt, vid, pid;
int rxValue, rxIndex;
int value = 0, index = 0;
int i=0;
cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, 1, value, index, buffer, sizeof(buffer), 5000);
if(cnt < 0){
fprintf(stderr, "\nUSB error in iteration %d: %s\n", i, usb_strerror());
}
rxValue = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8);
rxIndex = ((int)buffer[3] & 0xff) | (((int)buffer[2] & 0xff) << 8);
fprintf(stderr, "%3d.%02d*C ", rxValue/100, rxValue%100);
fprintf(stderr, "%3d.%02d*C \n", rxIndex/100, rxIndex%100);
/* int i=0; */
/* cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, 100, value, index, buffer, sizeof(buffer), 5000); */
/* if(cnt < 0){ */
/* fprintf(stderr, "\nUSB error in iteration %d: %s\n", i, usb_strerror()); */
/* } */
/* rxValue = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); */
/* rxIndex = ((int)buffer[3] & 0xff) | (((int)buffer[2] & 0xff) << 8); */
/* fprintf(stderr, "%3d.%02d*C ", rxValue/100, rxValue%100); */
/* fprintf(stderr, "%3d.%02d*C \n", rxIndex/100, rxIndex%100); */
/* cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, 101, value, index, buffer, sizeof(buffer), 5000); */
/* if(cnt < 0){ */
/* fprintf(stderr, "\nUSB error in iteration %d: %s\n", i, usb_strerror()); */
/* } */
/* rxValue = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); */
/* rxIndex = ((int)buffer[3] & 0xff) | (((int)buffer[2] & 0xff) << 8); */
/* fprintf(stderr, "%3d.%02d*C ", rxValue/100, rxValue%100); */
/* fprintf(stderr, "%3d.%02d*C \n", rxIndex/100, rxIndex%100); */
cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, 2, value, index, buffer, sizeof(buffer), 5000);
if(cnt < 0){
fprintf(stderr, "\nUSB error in iteration %d: %s\n", i, usb_strerror());
}
rxValue = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8);
rxIndex = ((int)buffer[3] & 0xff) | (((int)buffer[2] & 0xff) << 8);
fprintf(stderr, "%3d.%02d*C ", rxValue/100, rxValue%100);
fprintf(stderr, "%3d.%02d*C \n", rxIndex/100, rxIndex%100);
usb_close(handle);

@ -6,7 +6,7 @@
Where following values are Valid:
|--------------------------------------------------------------------------------------------------------------------------|
| Binary Hex Name Address ValueL ValueH Reply Description|
| Decimal Hex Name Address ValueL ValueH Reply Description|
|--------------------------------------------------------------------------------------------------------------------------|
| 0000001 0x01 Read-Temp Number of zeroes/Rand zeroes/Rand A 16Bit Value Reads the |
| Thermometer Representing Temperature|
@ -24,7 +24,7 @@ Where following values are Valid:
| 0000005 0x05 Write-Var16 Number of the Value of Var Value of Var zeroes/Rand Writes 16 |
| var-DEFINE to write (HIGH) to write (LOW) Bit Var |
|--------------------------------------------------------------------------------------------------------------------------|
| 0000006 0x07 Call-Func Number of the zeroes/Rand zeroes/Rand zeroes/Rand Calls a |
| 0000006 0x06 Call-Func Number of the zeroes/Rand zeroes/Rand zeroes/Rand Calls a |
| func-DEFINE remote |
function |
|--------------------------------------------------------------------------------------------------------------------------|

@ -1,25 +1,44 @@
#include "main.h"
#include "spi.h"
#include "spi_proto.h"
#include "usb.h"
usbMsgLen_t usbFunctionSetup(uchar data[8]) {
usbRequest_t *rq = (void *)data;
static uchar dataBuffer[4];
if(rq->bRequest == 1){
if(rq->bRequest == 100) {
dataBuffer[0] = (thermoData [0] & 0xff00)>>8;
dataBuffer[1] = thermoData [0] & 0x00ff;
dataBuffer[2] = (thermoData [1] & 0xff00)>>8;
dataBuffer[3] = thermoData [1] & 0x00ff;
usbMsgPtr = dataBuffer;
return 4;
}
if(rq->bRequest == 2){
} else if(rq->bRequest == 101) {
dataBuffer[0] = (thermoData [2] & 0xff00)>>8;
dataBuffer[1] = thermoData [2] & 0x00ff;
dataBuffer[2] = (thermoData [3] & 0xff00)>>8;
dataBuffer[3] = thermoData [3] & 0x00ff;
usbMsgPtr = dataBuffer;
return 4;
} else {
uint8_t opcode = (uint8_t) ((rq->bRequest & 0xff00)>>8);
uint8_t addr = (uint8_t) rq->wValue.bytes[0];
uint8_t valH = (uint8_t) rq->wIndex.bytes[0];
uint8_t valL = (uint8_t) rq->wIndex.bytes[1];
uint8_t send[] = {opcode, addr, valH, valL};
uint8_t recv[2];
spi_mst_write(4, send);
if(!spi_proto_needswrite(opcode)) spi_mst_read(2, recv);
dataBuffer[0] = recv[0];
dataBuffer[1] = recv[1];
dataBuffer[2] = 0x0000;
dataBuffer[3] = 0x0000;
usbMsgPtr = dataBuffer;
return 4;
}
return 0;

@ -73,6 +73,9 @@ void spi_init(){
SPCR = spcr;
}
void spi_mst_start_packet(){
SPI_SSOUT &= ~(_BV(SPI_SS_PIN));
}
@ -100,7 +103,10 @@ void spi_mst_read(uint8_t len, uint8_t *data){
}
}
void spi_sla_handle_packet(){
// TODO: make slave not hangup in case of partial read
uint8_t opcode, addr, do_write;
uint16_t data;
SPI_WAIT;
@ -138,11 +144,3 @@ void spi_sla_handle_packet(){
#ifndef SPI_MASTER
ISR(SPI_vector){
}
#endif //SPI_MASTER

@ -9,6 +9,8 @@
#define SPI_SS_PORT D
#define SPI_SS_PIN 7
// copied/adapted from usbdrv.h
#define SPI_CONCAT(a, b) a ## b
@ -20,7 +22,12 @@
#define SPI_SSIN SPI_INPORT(SPI_SS_PORT)
#define SPI_SSDDR SPI_DDRPORT(SPI_SS_PORT)
uint8_t spi_write(uint8_t *data, uint8_t len);
void spi_init();
void spi_mst_start_packet();
void spi_mst_end_packet();
void spi_mst_write(uint8_t len, uint8_t *data);
void spi_mst_read(uint8_t len, uint8_t *data);
void spi_sla_handle_packet();
#endif

@ -24,7 +24,7 @@ flash: all
avrdude -c usbasp -p m88 -U flash:w:firmware.hex
fuses:
avrdude -c usbasp -p m88 -U lfuse:w:0xdf:m -U hfuse:w:0xde:m # external oscillator
avrdude -c usbasp -p m88 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xf9:m
## what are the source dependencies

Loading…
Cancel
Save