projects
/
fw
/
altos
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
9b31f07
)
Wait for TX to finish sending data
author
Keith Packard
<keithp@keithp.com>
Sat, 31 Oct 2009 06:45:43 +0000
(23:45 -0700)
committer
Keith Packard
<keithp@keithp.com>
Sat, 31 Oct 2009 06:45:43 +0000
(23:45 -0700)
src/ao.h
patch
|
blob
|
history
src/ao_radio.c
patch
|
blob
|
history
diff --git
a/src/ao.h
b/src/ao.h
index e86b4bf99cf81840f95bd876a911deb31f842c31..84e92f35e77ced7eb5c581c6c43230f9eabc110f 100644
(file)
--- a/
src/ao.h
+++ b/
src/ao.h
@@
-804,8
+804,12
@@
ao_telemetry_init(void);
extern __xdata uint8_t ao_radio_dma;
extern __xdata uint8_t ao_radio_dma_done;
extern __xdata uint8_t ao_radio_dma;
extern __xdata uint8_t ao_radio_dma_done;
+extern __xdata uint8_t ao_radio_done;
extern __xdata uint8_t ao_radio_mutex;
extern __xdata uint8_t ao_radio_mutex;
+void
+ao_radio_general_isr(void) interrupt 16;
+
void
ao_radio_set_telemetry(void);
void
ao_radio_set_telemetry(void);
diff --git
a/src/ao_radio.c
b/src/ao_radio.c
index 55a0c297eda633431eb4c1a3638f77e62e02b441..43899f442ccac6ad197613a23ed0a79b918159f1 100644
(file)
--- a/
src/ao_radio.c
+++ b/
src/ao_radio.c
@@
-281,6
+281,24
@@
static __code uint8_t packet_setup[] = {
RF_PKTCTRL0_LENGTH_CONFIG_FIXED),
};
RF_PKTCTRL0_LENGTH_CONFIG_FIXED),
};
+__xdata uint8_t ao_radio_dma;
+__xdata uint8_t ao_radio_dma_done;
+__xdata uint8_t ao_radio_done;
+__xdata uint8_t ao_radio_mutex;
+
+void
+ao_radio_general_isr(void) interrupt 16
+{
+ S1CON &= ~0x03;
+ if (RFIF & RFIF_IM_TIMEOUT) {
+ ao_dma_abort(ao_radio_dma);
+ RFIF &= ~ RFIF_IM_TIMEOUT;
+ } else if (RFIF & RFIF_IM_DONE) {
+ ao_radio_done = 1;
+ ao_wakeup(&ao_radio_done);
+ RFIF &= ~RFIF_IM_DONE;
+ }
+}
void
ao_radio_set_telemetry(void)
void
ao_radio_set_telemetry(void)
@@
-306,10
+324,6
@@
ao_radio_set_rdf(void)
RF[rdf_setup[i]] = rdf_setup[i+1];
}
RF[rdf_setup[i]] = rdf_setup[i+1];
}
-__xdata uint8_t ao_radio_dma;
-__xdata uint8_t ao_radio_dma_done;
-__xdata uint8_t ao_radio_mutex;
-
void
ao_radio_idle(void)
{
void
ao_radio_idle(void)
{
@@
-328,6
+342,7
@@
ao_radio_send(__xdata struct ao_telemetry *telemetry) __reentrant
ao_config_get();
ao_mutex_get(&ao_radio_mutex);
ao_radio_idle();
ao_config_get();
ao_mutex_get(&ao_radio_mutex);
ao_radio_idle();
+ ao_radio_done = 0;
RF_CHANNR = ao_config.radio_channel;
ao_dma_set_transfer(ao_radio_dma,
telemetry,
RF_CHANNR = ao_config.radio_channel;
ao_dma_set_transfer(ao_radio_dma,
telemetry,
@@
-341,8
+356,8
@@
ao_radio_send(__xdata struct ao_telemetry *telemetry) __reentrant
DMA_CFG1_PRIORITY_HIGH);
ao_dma_start(ao_radio_dma);
RFST = RFST_STX;
DMA_CFG1_PRIORITY_HIGH);
ao_dma_start(ao_radio_dma);
RFST = RFST_STX;
- __critical while (!ao_radio_d
ma_d
one)
- ao_sleep(&ao_radio_d
ma_d
one);
+ __critical while (!ao_radio_done)
+ ao_sleep(&ao_radio_done);
ao_mutex_put(&ao_radio_mutex);
}
ao_mutex_put(&ao_radio_mutex);
}
@@
-462,5
+477,8
@@
ao_radio_init(void)
ao_radio_set_telemetry();
ao_radio_dma_done = 1;
ao_radio_dma = ao_dma_alloc(&ao_radio_dma_done);
ao_radio_set_telemetry();
ao_radio_dma_done = 1;
ao_radio_dma = ao_dma_alloc(&ao_radio_dma_done);
+ RFIF = 0;
+ RFIM = RFIM_IM_TIMEOUT|RFIM_IM_DONE;
+ IEN2 |= IEN2_RFIE;
ao_cmd_register(&ao_radio_cmds[0]);
}
ao_cmd_register(&ao_radio_cmds[0]);
}