1
0
mirror of git://projects.qi-hardware.com/antorcha.git synced 2024-11-01 13:15:55 +02:00

tornado/fw/tornado.c: experimental code to log ADC samples to memory card

For a yet unknown reason, writing to the card fails if also processing
the samples. Maybe it's some side-effect of switching the LEDs.
This commit is contained in:
Werner Almesberger 2012-12-09 17:28:19 -03:00
parent 2c7d7b78b0
commit 45f14d214a

View File

@ -8,6 +8,7 @@
#include "io.h" #include "io.h"
#include "led.h" #include "led.h"
#include "mmc.h"
#include "accel.h" #include "accel.h"
@ -106,10 +107,14 @@ static const uint8_t img[] PROGMEM = {
}; };
static void zxing(uint16_t x, uint16_t y)
{
static uint8_t one[LED_BYTES] = static uint8_t one[LED_BYTES] =
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
static volatile uint16_t sample_t = 0, sample_v;
static void zxing(uint16_t x, uint16_t y)
{
static uint16_t e = 512 << E_SHIFT; static uint16_t e = 512 << E_SHIFT;
static uint32_t m = 512 << M_SHIFT; static uint32_t m = 512 << M_SHIFT;
int16_t d; int16_t d;
@ -118,6 +123,10 @@ static void zxing(uint16_t x, uint16_t y)
static const prog_uint8_t *p; static const prog_uint8_t *p;
static uint16_t cols = 0; static uint16_t cols = 0;
sample_t++;
sample_v = x;
return;
e = y+(e-(e >> E_SHIFT)); e = y+(e-(e >> E_SHIFT));
m = y+(m-(m >> M_SHIFT)); m = y+(m-(m >> M_SHIFT));
d = (e >> E_SHIFT)-(m >> M_SHIFT); d = (e >> E_SHIFT)-(m >> M_SHIFT);
@ -142,6 +151,18 @@ static void zxing(uint16_t x, uint16_t y)
} }
static void panic(void)
{
cli();
while (1) {
led_show(one);
_delay_ms(100);
led_off();
_delay_ms(100);
}
}
int main(void) int main(void)
{ {
PORTB = HIGH(B); PORTB = HIGH(B);
@ -164,12 +185,85 @@ int main(void)
#endif #endif
led_init(); led_init();
#if 0
led_show(one);
if (!mmc_init())
panic();
if (!mmc_begin_write(0))
panic();
uint16_t n = 0;
for (n = 0; n != 512; n += 2) {
mmc_write(n);
mmc_write(n >> 8);
}
if (!mmc_end_write())
panic();
if (!mmc_begin_write(n))
panic();
for (; n != 1024; n += 2) {
mmc_write(n);
mmc_write(n >> 8);
}
if (!mmc_end_write())
panic();
_delay_ms(1000);
led_off();
while (1);
#endif
#if 1 #if 1
uint16_t last_t = 0;
uint32_t n = 0;
sample = zxing; sample = zxing;
if (!mmc_init())
panic();
accel_start(); accel_start();
sei(); sei();
while (1); while (1) {
uint16_t t, v;
if (!(n & 511)) {
if (n && !mmc_end_write())
panic();
if (!mmc_begin_write(n))
panic();
}
#if 0
t = n;
v = 0;
#else #else
do {
cli();
t = sample_t;
v = sample_v;
sei();
}
while (t == last_t);
#endif
last_t = t;
mmc_write(t);
mmc_write(t >> 8);
mmc_write(v);
mmc_write(v >> 8);
n += 4;
}
#endif
#if 0
static uint8_t p[LED_BYTES]; static uint8_t p[LED_BYTES];
uint8_t mode = 0; uint8_t mode = 0;
uint16_t n = 0, v; uint16_t n = 0, v;