diff options
author | px4dev <px4@purgatory.org> | 2013-01-23 18:56:58 -0800 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-01-23 18:56:58 -0800 |
commit | b34311915a04e9ec4d301930e4342f285b5c6cb4 (patch) | |
tree | c6462a4db7fc037592b01c1c6b62b10c590b56d5 /apps/px4io/i2c.c | |
parent | 3244bb83ea2656a20cc486205dd77d48f525c05c (diff) | |
download | px4-firmware-b34311915a04e9ec4d301930e4342f285b5c6cb4.tar.gz px4-firmware-b34311915a04e9ec4d301930e4342f285b5c6cb4.tar.bz2 px4-firmware-b34311915a04e9ec4d301930e4342f285b5c6cb4.zip |
Safeguard against back-to-back transactions while setting up to handle a register read request.
Diffstat (limited to 'apps/px4io/i2c.c')
-rw-r--r-- | apps/px4io/i2c.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/apps/px4io/i2c.c b/apps/px4io/i2c.c index cf6921179..174ec2813 100644 --- a/apps/px4io/i2c.c +++ b/apps/px4io/i2c.c @@ -242,6 +242,7 @@ i2c_rx_complete(void) uint16_t *regs; unsigned reg_count; + /* work out which registers are being addressed */ int ret = registers_get(selected_page, selected_offset, ®s, ®_count); if (ret == 0) { tx_buf = (uint8_t *)regs; @@ -250,6 +251,14 @@ i2c_rx_complete(void) tx_buf = junk_buf; tx_len = sizeof(junk_buf); } + + /* disable interrupts while reconfiguring DMA for the selected registers */ + irqstate_t flags = irqsave(); + + stm32_dmastop(tx_dma); + i2c_tx_setup(); + + irqrestore(flags); } } |