projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altoslib: Check for negative tick wrap when importing flight records
[fw/altos]
/
src
/
drivers
/
ao_ads124s0x.c
diff --git
a/src/drivers/ao_ads124s0x.c
b/src/drivers/ao_ads124s0x.c
index 9ead34c1c5e4402bac27263c3af56c4c8567c35e..fa63ec062e252ef2b67e43d08c03f2d8c133087d 100644
(file)
--- a/
src/drivers/ao_ads124s0x.c
+++ b/
src/drivers/ao_ads124s0x.c
@@
-46,23
+46,24
@@
ao_ads124s0x_stop(void) {
AO_ADS124S0X_SPI_BUS);
}
AO_ADS124S0X_SPI_BUS);
}
-/*
static uint8_t
ao_ads124s0x_reg_read(uint8_t addr)
{
static uint8_t
ao_ads124s0x_reg_read(uint8_t addr)
{
- uint8_t d[
2
];
+ uint8_t d[
3
];
d[0] = addr | AO_ADS124S0X_RREG;
d[1] = 0;
d[0] = addr | AO_ADS124S0X_RREG;
d[1] = 0;
+ d[2] = 0;
ao_ads124s0x_start();
ao_ads124s0x_start();
- ao_spi_duplex(d, d,
2
, AO_ADS124S0X_SPI_BUS);
+ ao_spi_duplex(d, d,
3
, AO_ADS124S0X_SPI_BUS);
ao_ads124s0x_stop();
ao_ads124s0x_stop();
- PRINTD(DEBUG_LOW, "read %x = %x\n", addr, d);
+ PRINTD(DEBUG_LOW, "read %x = %x\n", addr, d
[0]
);
- return d[
1
];
+ return d[
2
];
}
}
+/*
static void
ao_ads124s0x_reg_write(uint8_t addr, uint8_t value)
{
static void
ao_ads124s0x_reg_write(uint8_t addr, uint8_t value)
{
@@
-76,32
+77,32
@@
ao_ads124s0x_reg_write(uint8_t addr, uint8_t value)
ao_spi_send(d, 3, AO_ADS124S0X_SPI_BUS);
ao_ads124s0x_stop();
ao_spi_send(d, 3, AO_ADS124S0X_SPI_BUS);
ao_ads124s0x_stop();
-#if DEBUG & DEBUG_LOW
- d[0] = addr | AO_ADS124S0X_RREG
- d[1] = 0;
- ao_ads124s0x_start();
- ao_spi_duplex(d, d, 2, AO_ADS124S0X_SPI_BUS);
- ao_ads124s0x_stop();
- PRINTD(DEBUG_LOW, "readback %x %x\n", d[0], d[1]);
-#endif
}
*/
}
*/
-// FIXME
-// We need to be in continuous conversion mode, and use the WREG
-// command to set the next conversion input while reading each
-// which I don't see an example for elsewhere?
+static void
+ao_ads124s0x_isr(void)
+{
+ ao_ads124s0x_drdy = 1;
+ ao_wakeup(&ao_ads124s0x_drdy);
+}
static void
ao_ads124s0x_setup(void)
{
uint8_t d[20];
static void
ao_ads124s0x_setup(void)
{
uint8_t d[20];
+ ao_delay(1);
+
+ ao_gpio_set(AO_ADS124S0X_RESET_PORT, AO_ADS124S0X_RESET_PIN, 1);
+
+ ao_delay(1);
+
uint8_t devid = ao_ads124s0x_reg_read(AO_ADS124S0X_ID);
uint8_t devid = ao_ads124s0x_reg_read(AO_ADS124S0X_ID);
- if (
devid
!= AO_ADS124S0X_ID_ADS124S06)
+ if (
(devid & 7)
!= AO_ADS124S0X_ID_ADS124S06)
ao_panic(AO_PANIC_SELF_TEST_ADS124S0X);
ao_panic(AO_PANIC_SELF_TEST_ADS124S0X);
- ao_exti_setup(AO_ADS124S0
x
_DRDY_PORT, AO_ADS124S0X_DRDY_PIN,
+ ao_exti_setup(AO_ADS124S0
X
_DRDY_PORT, AO_ADS124S0X_DRDY_PIN,
AO_EXTI_MODE_FALLING|AO_EXTI_PRIORITY_HIGH,
ao_ads124s0x_isr);
AO_EXTI_MODE_FALLING|AO_EXTI_PRIORITY_HIGH,
ao_ads124s0x_isr);
@@
-144,7
+145,11
@@
ao_ads124s0x(void)
ao_exti_enable(AO_ADS124S0X_DRDY_PORT, AO_ADS124S0X_DRDY_PIN);
for (;;) {
ao_exti_enable(AO_ADS124S0X_DRDY_PORT, AO_ADS124S0X_DRDY_PIN);
for (;;) {
- ao_sleep(&ao_ads124s0x_drdy);
+ ao_arch_block_interrupts();
+ ao_ads124s0x_drdy = 0;
+ while (ao_ads124s0x_drdy == 0)
+ ao_sleep(&ao_ads124s0x_drdy);
+ ao_arch_release_interrupts();
curchan = nextchan;
nextchan = (nextchan + 1) % AO_ADS124S0X_CHANNELS;
curchan = nextchan;
nextchan = (nextchan + 1) % AO_ADS124S0X_CHANNELS;
@@
-163,19
+168,22
@@
ao_ads124s0x(void)
// If nextchan == 0, we have a complete set of inputs
// and we need to log them somewhere
// If nextchan == 0, we have a complete set of inputs
// and we need to log them somewhere
+ ao_ads124s0x_drdy = 0;
}
}
}
}
-void ao_ads124s0x_isr(void)
-{
- ao_wakeup(&ao_ads124s0x_drdy);
-}
-
static struct ao_task ao_ads124s0x_task;
static void
static struct ao_task ao_ads124s0x_task;
static void
-ao_ads124s0x_dump(void)
// FIXME
+ao_ads124s0x_dump(void)
{
{
+ static int done;
+
+ if (!done) {
+ done = 1;
+ ao_add_task(&ao_ads124s0x_task, ao_ads124s0x, "ads124s0x");
+ }
+
printf ("ADS124S0X value %d %d %d %d\n",
ao_ads124s0x_current.ain[0],
ao_ads124s0x_current.ain[1],
printf ("ADS124S0X value %d %d %d %d\n",
ao_ads124s0x_current.ain[0],
ao_ads124s0x_current.ain[1],
@@
-193,8
+201,10
@@
ao_ads124s0x_init(void)
{
ao_cmd_register(ao_ads124s0x_cmds);
{
ao_cmd_register(ao_ads124s0x_cmds);
+ ao_enable_output(AO_ADS124S0X_RESET_PORT, AO_ADS124S0X_RESET_PIN, 0);
+
ao_spi_init_cs(AO_ADS124S0X_SPI_CS_PORT,
(1 << AO_ADS124S0X_SPI_CS_PIN));
ao_spi_init_cs(AO_ADS124S0X_SPI_CS_PORT,
(1 << AO_ADS124S0X_SPI_CS_PIN));
-
ao_add_task(&ao_ads124s0x_task, ao_ads124s0x, "ads124s0x");
+
//
ao_add_task(&ao_ads124s0x_task, ao_ads124s0x, "ads124s0x");
}
}