Compare commits

..

No commits in common. "8d99d529f5eeba36e87e7b1725878bdc77bb916a" and "6a2cc9a6ad333b8edd9c037617ea17ad69aeeae3" have entirely different histories.

View file

@ -26,7 +26,6 @@ const char revision[] = Id;
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <avr/sleep.h> #include <avr/sleep.h>
#include <avr/pgmspace.h>
#define SPI_Rx_SLEEP #define SPI_Rx_SLEEP
#include "spi_slave.h" #include "spi_slave.h"
@ -73,13 +72,10 @@ struct conf {
uint8_t reset; // 12 uint8_t reset; // 12
uint8_t dir; // 13 uint8_t dir; // 13
uint16_t n_steps; // 14 uint16_t n_steps; // 14
uint16_t dac_ramp; // 16 uint16_t dac_ramp; // 18
uint16_t dac_step; // 18 uint16_t dac_step; // 20
uint8_t adc_incr; // 20 uint8_t adc_incr; // 23
uint8_t adc_period; // 21 uint8_t adc_period; // 24
uint8_t awake; // 22
uint8_t ledoff; // 23
uint8_t disable; // 24
uint8_t pad[7]; // 25 uint8_t pad[7]; // 25
uint8_t adc_ch[16]; // 32 uint8_t adc_ch[16]; // 32
}; };
@ -123,9 +119,6 @@ const struct conf runcon = {
.lmask = LIMIT1 | LIMIT2 | FAULT1 | FAULT2, .lmask = LIMIT1 | LIMIT2 | FAULT1 | FAULT2,
.lval = FAULT1 | FAULT2, .lval = FAULT1 | FAULT2,
.enable = SLEEP | RESET, .enable = SLEEP | RESET,
.disable = ENABLE,
.ledoff = LEDON,
.awake = SLEEP,
.reset = RESET, .reset = RESET,
.adc_ch = { .adc_ch = {
ADC_BG|ADC_SR, ADC_BG|ADC_R, ADC_GND|ADC_R, ADC_BG|ADC_SR, ADC_BG|ADC_R, ADC_GND|ADC_R,
@ -137,7 +130,6 @@ const struct conf runcon = {
.adc_incr = 16, // one conversions per channel .adc_incr = 16, // one conversions per channel
.adc_period = TICK_NS(1000000), .adc_period = TICK_NS(1000000),
.dac_step = 0x20, .dac_step = 0x20,
.pad = "\xff\xff\xff\xff\xff\xff\xff"
}; };
void stepper_init() void stepper_init()
@ -681,21 +673,6 @@ uint8_t eeprom_load(uint16_t a)
return 0; return 0;
} }
static inline
uint8_t eeprom_read_byte(uint16_t a, uint8_t *r)
{
cli();
if (EECR & 1<<EEWE) {
sei();
return 1;
}
EEAR = a;
EECR |= 1<<EERE;
*r = EEDR;
sei();
return 0;
}
static inline static inline
void reg16(uint16_t *v, unsigned char *r, const unsigned char *c) void reg16(uint16_t *v, unsigned char *r, const unsigned char *c)
{ {
@ -886,21 +863,15 @@ int main()
v.conf.n_steps = cmd[2] << ((cmd[1]>>4) & 7); v.conf.n_steps = cmd[2] << ((cmd[1]>>4) & 7);
// fall through, return n_steps // fall through, return n_steps
case 's': reg16(&v.conf.n_steps, resp, cmd); break; case 's': reg16(&v.conf.n_steps, resp, cmd); break;
case 'r': resp[2] = cmd[2]; case 'r': reg8(&v.conf.reset, resp, cmd);
switch (cmd[2] & 0x3) { resp[2] = cmd[2];
case 0: reg8(&v.conf.reset, resp, cmd); if (cmd[2]) {
case 1: reg8(&v.conf.disable, resp, cmd); v.conf.step = 0;
case 2: reg8(&v.conf.awake, resp, cmd);
case 3: reg8(&v.conf.ledoff, resp, cmd);
}
if (up && cmd[2] & 0x3)
v.conf.enable = v.conf.awake | v.conf.ledoff | v.conf.disable;
if (cmd[2] & 0x40)
RESET_PORT = v.conf.enable;
if (cmd[2] & 0x80) if (cmd[2] & 0x80)
stepper_init(); stepper_init();
if (cmd[2] & 0x10) if (cmd[2] & 1)
stepper_start(v.conf.reset); stepper_start(v.conf.reset);
}
break; break;
case 'd': reg16(&v.stat.dac, resp, cmd); case 'd': reg16(&v.stat.dac, resp, cmd);
dac_ramp(v.stat.dac); dac_ramp(v.stat.dac);
@ -964,13 +935,8 @@ int main()
if (cmd[1] && upcase(cmd[1])) if (cmd[1] && upcase(cmd[1]))
conf_init(); conf_init();
break; break;
case 'x': // read/write conf Byte, read eeprom byte case 'x': // conf Byte
resp[2] = cmd[1]; resp[2] = cmd[1];
if (!up && cmd[2] & 0xf) {
if (eeprom_read_byte(frame2int(cmd+1) & 0x7ff, resp+1))
resp[0] = 'E';
break;
}
if (cmd[1] >= sizeof(struct vars)) { if (cmd[1] >= sizeof(struct vars)) {
resp[0] = 'E'; resp[0] = 'E';
resp[1] = sizeof(struct vars); resp[1] = sizeof(struct vars);
@ -980,17 +946,11 @@ int main()
if (up) if (up)
((unsigned char *)(&v))[cmd[1]] = cmd[2]; ((unsigned char *)(&v))[cmd[1]] = cmd[2];
break; break;
case 'y': // peek, poke IO space, read RAM, flash case 'y': // peek, poke
resp[2] = cmd[1]; resp[2] = cmd[1];
if (!up)
if (cmd[2]&0x80)
resp[1] = pgm_read_u8((uint8_t*)(frame2int(cmd+1)& 0x7fff));
else
resp[1] = *(unsigned char *)(frame2int(cmd+1));
else {
resp[1] = *(unsigned char *)(cmd[1]+0); resp[1] = *(unsigned char *)(cmd[1]+0);
if (up)
*(unsigned char *)(cmd[1]+0) = cmd[2]; *(unsigned char *)(cmd[1]+0) = cmd[2];
}
break; break;
} }
spi_slave_Tx(resp, 3); spi_slave_Tx(resp, 3);