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 | |
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')
-rw-r--r-- | apps/px4io/i2c.c | 9 | ||||
-rw-r--r-- | apps/px4io/registers.c | 6 |
2 files changed, 12 insertions, 3 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); } } diff --git a/apps/px4io/registers.c b/apps/px4io/registers.c index 0206e0db0..6b7ef015f 100644 --- a/apps/px4io/registers.c +++ b/apps/px4io/registers.c @@ -80,9 +80,9 @@ volatile uint16_t r_page_controls[PX4IO_CONTROL_CHANNELS]; * Static configuration parameters. */ static const uint16_t r_page_config[] = { - [PX4IO_P_CONFIG_PROTOCOL_VERSION] = 0, - [PX4IO_P_CONFIG_SOFTWARE_VERSION] = 0, - [PX4IO_P_CONFIG_BOOTLOADER_VERSION] = 0, + [PX4IO_P_CONFIG_PROTOCOL_VERSION] = 1, /* XXX hardcoded magic number */ + [PX4IO_P_CONFIG_SOFTWARE_VERSION] = 1, /* XXX hardcoded magic number */ + [PX4IO_P_CONFIG_BOOTLOADER_VERSION] = 3, /* XXX hardcoded magic number */ [PX4IO_P_CONFIG_MAX_TRANSFER] = 64, /* XXX hardcoded magic number */ [PX4IO_P_CONFIG_CONTROL_COUNT] = PX4IO_CONTROL_CHANNELS, [PX4IO_P_CONFIG_ACTUATOR_COUNT] = IO_SERVO_COUNT, |