From 52eb479110cbbeabaa7f82492496ce0ec83256ab Mon Sep 17 00:00:00 2001 From: Michael Dryden Date: Wed, 4 Feb 2015 17:44:02 -0500 Subject: [PATCH] ads1255: added function for single reads. Changed dummy SPI byte to avoid conflict with ADS1255 SDATAC command. --- DSTAT-temp/src/ads1255.c | 39 ++++++++++++++++++++++++++ DSTAT-temp/src/ads1255.h | 1 + DSTAT-temp/src/config/conf_usart_spi.h | 1 + 3 files changed, 41 insertions(+) diff --git a/DSTAT-temp/src/ads1255.c b/DSTAT-temp/src/ads1255.c index 745271f..2150910 100644 --- a/DSTAT-temp/src/ads1255.c +++ b/DSTAT-temp/src/ads1255.c @@ -244,6 +244,45 @@ int32_t ads1255_read_fast24(void){ input_buffer.uint[3] = 0x0; // printf("%x %x %x\n\r", input_buffer.uint[2],input_buffer.uint[1], input_buffer.uint[0]); + cpu_irq_restore(flags); + return input_buffer.int32; +} + +int32_t ads1255_read_single24(void){ + + union{ + uint8_t uint[4]; + int32_t int32; + } input_buffer; + + input_buffer.int32 = 0; + + irqflags_t flags; + flags = cpu_irq_save(); + + usart_spi_select_device(&USARTE1, &spi_device_conf); + usart_spi_transmit(&USARTE1, ADS_RDATA); + delay_us(6.5); + + for (int i = 2; i >= 0; --i){ + while (usart_data_register_is_empty(&USARTE1) == false) + ; + usart_put(&USARTE1, CONFIG_USART_SPI_DUMMY); + while (usart_rx_is_complete(&USARTE1) == false) + ; + input_buffer.uint[i] = usart_get(&USARTE1); + } + + while (!usart_tx_is_complete(&USARTE1)) + ; + usart_clear_tx_complete(&USARTE1); + usart_spi_deselect_device(&USARTE1, &spi_device_conf); + + if (input_buffer.uint[2] > 0x7F) + input_buffer.uint[3] = 0xFF; + else + input_buffer.uint[3] = 0x0; + cpu_irq_restore(flags); return input_buffer.int32; } \ No newline at end of file diff --git a/DSTAT-temp/src/ads1255.h b/DSTAT-temp/src/ads1255.h index f01d2d5..630ced5 100644 --- a/DSTAT-temp/src/ads1255.h +++ b/DSTAT-temp/src/ads1255.h @@ -68,6 +68,7 @@ void ads1255_init_module(void); int16_t ads1255_read_fast(void); int16_t ads1255_read_fast_single(void); int32_t ads1255_read_fast24(void); +int32_t ads1255_read_single24(void); void ads1255_reg_read(uint8_t address); void ads1255_reset(void); void ads1255_setup(uint8_t buff, uint8_t rate, uint8_t pga); diff --git a/DSTAT-temp/src/config/conf_usart_spi.h b/DSTAT-temp/src/config/conf_usart_spi.h index b5360e4..a759337 100644 --- a/DSTAT-temp/src/config/conf_usart_spi.h +++ b/DSTAT-temp/src/config/conf_usart_spi.h @@ -43,5 +43,6 @@ #ifndef CONF_USART_SPI_H_INCLUDED #define CONF_USART_SPI_H_INCLUDED +#define CONFIG_USART_SPI_DUMMY 0xFE #endif /* CONF_USART_SPI_H_INCLUDED */ -- GitLab