This commit is contained in:
Pascal Brisset
2005-08-20 19:25:34 +00:00
parent 1f1638bdf3
commit 265eac8e92
2 changed files with 0 additions and 169 deletions
-113
View File
@@ -1,113 +0,0 @@
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "std.h"
#include "ad7714.h"
#include "spi.h"
/* unipolar, 16 bits, current boost, filter 4000 */
//#define AD_HIGH_FILTER_CFG 0xAF
//#define AD_LOW_FILTER_CFG 0xA0
/* filter 2000 */
#define AD_HIGH_FILTER_CFG 0xA7
#define AD_LOW_FILTER_CFG 0xD0
/* filter 19 */
//const uint8_t AD_HIGH_FILTER_CFG = 0xA0;
//const uint8_t AD_LOW_FILTER_CFG = 0x13;
struct AdMsg {
uint8_t len;
const uint8_t* data;
};
#define AD7714_SETUP_LEN 6
const uint8_t ad7714_setup_data[AD7714_SETUP_LEN] = {
AD_F_HIGH_REG + AD_FD0, /* select high filter register */
AD_HIGH_FILTER_CFG,
AD_F_LOW_REG + AD_FD0, /* select low filter register */
AD_LOW_FILTER_CFG,
AD_MODE_REG + AD_FD0, /* select com register */
AD_SELFCAL_MOD + AD_GAIN_128,
};
const struct AdMsg ad7714_setup = {AD7714_SETUP_LEN, ad7714_setup_data};
#define AD7714_READ_LEN 3
const uint8_t ad7714_read_data[] = {
AD_DATA_REG + AD_WR + AD_FD0, /* transmit read request */
0x00, /* transmit a dumb value just to get the result */
0xAA /* transmit a dumb value just to get the result */
};
const struct AdMsg ad7714_read = {AD7714_READ_LEN, ad7714_read_data};
#define AD7714_SELECT_CHANNEL_LEN 2
const uint8_t ad7714_select_channel_data[AD7714_SELECT_CHANNEL_LEN] = {
AD_MODE_REG + AD_FD0,
// AD_BG_CAL_MOD + AD_GAIN_128
AD_NOR_MOD + AD_GAIN_128
};
const struct AdMsg ad7714_select_channel = {AD7714_SELECT_CHANNEL_LEN, ad7714_select_channel_data};
static struct AdMsg* msg;
static uint8_t idx;
uint16_t ad7714_sample;
uint8_t ad7714_sample_read;
void ad7714_start_transmitting (const struct AdMsg *amsg) {
/* Enable SPI, Master, MSB first, clock idle high, sample on trailing edge, clock rate fck/128 */
SPI_START(_BV(SPE)| _BV(MSTR) | _BV(SPR1) | _BV(CPOL) | _BV(CPHA)| _BV(SPR0)); //| _BV(SPR0)
SPI_SELECT_SLAVE1();
msg = (struct AdMsg*)amsg;
SPDR = msg->data[0];
idx = 0;
}
void ad7714_on_spi_it( void ) {
uint8_t spi_read = SPDR;
if (msg == &ad7714_read) {
if (idx==1)
ad7714_sample = spi_read<<8;
else if (idx==2) {
ad7714_sample += spi_read;
ad7714_sample_read = TRUE;
}
}
idx++;
if (idx < msg->len) {
SPI_SEND(msg->data[idx]);
}
else {
SPI_UNSELECT_SLAVE1();
SPI_STOP();
}
}
uint8_t ad7714_status = 0;
void ad7714_on_it( void ) {
if (ad7714_status == 0)
ad7714_start_transmitting(&ad7714_setup);
else if (ad7714_status == 1)
ad7714_start_transmitting(&ad7714_select_channel);
else
ad7714_start_transmitting(&ad7714_read);
ad7714_status++;
}
void ad7714_init( void ) {
/* setupt interrupt on falling edge */
cbi(EICRB, ISC60);
sbi(EICRB, ISC61);
/* clear interrupt flag */
// if (bit_is_set(EIFR, INTF6))
// EIFR != _BV(INTF6);
Ad7714_Enable_It();
}
SIGNAL(SIG_INTERRUPT6) {
ad7714_on_it();
}
-56
View File
@@ -1,56 +0,0 @@
#ifndef AD_7714_H
#define AD_7714_H
#include <inttypes.h>
/* AD7714 COM register */
#define AD_COM_REG (0<<4)
#define AD_MODE_REG (1<<4)
#define AD_F_HIGH_REG (2<<4)
#define AD_F_LOW_REG (3<<4)
#define AD_TEST_REG (4<<4)
#define AD_DATA_REG (5<<4)
#define AD_ZS_CAL_REG (6<<4)
#define AD_FS_CAL_REG (7<<4)
#define AD_WR (1<<3)
#define AD_FD0 (4<<0)
#define AD_FD1 (5<<0)
#define AD_FD2 (6<<0)
/* AD7714 MODE register */
#define AD_NOR_MOD (0<<5)
#define AD_SELFCAL_MOD (1<<5)
#define AD_ZS_SYSCAL_MOD (2<<5)
#define AD_FS_SYSCAL_MOD (3<<5)
#define AD_SYSOFFCAL_MOD (4<<5)
#define AD_BG_CAL_MOD (5<<5)
#define AD_ZS_SELFCAL_MOD (6<<5)
#define AD_FS_SELFCAL_MOD (7<<5)
#define AD_GAIN_1 (0<<2)
#define AD_GAIN_2 (1<<2)
#define AD_GAIN_4 (2<<2)
#define AD_GAIN_8 (3<<2)
#define AD_GAIN_16 (4<<2)
#define AD_GAIN_32 (5<<2)
#define AD_GAIN_64 (6<<2)
#define AD_GAIN_128 (7<<2)
#define AD_BO (1<<1)
#define AD_FSYNC (1<<0)
#define Ad7714_Disable_It() { cbi(EIMSK, INT6); }
#define Ad7714_Enable_It() { sbi(EIMSK, INT6); }
#define Ad7714_Ready() (bit_is_clear(EIFR, INTF6))
extern uint16_t ad7714_sample;
extern uint8_t ad7714_sample_read;
void ad7714_init( void );
void ad7714_on_spi_it( void );
void ad7714_on_it( void );
#endif /* AD_7714_H */