|
|
@@ -25,10 +25,16 @@ |
|
|
#ifdef MOD_TRILOGY |
|
|
#define AD7923_CMD_BASE ( AD7923_CTL_WRITE | AD7923_CTL_PM0 | AD7923_CTL_PM1 | AD7923_CTL_CODING) |
|
|
#endif |
|
|
|
|
|
#ifdef MOD_TELETYPE |
|
|
#define AD7923_CMD_BASE ( AD7923_CTL_WRITE | AD7923_CTL_PM0 | AD7923_CTL_PM1 | AD7923_CTL_CODING | AD7923_CTL_RANGE) |
|
|
#endif |
|
|
|
|
|
#ifdef MOD_ALEPH |
|
|
#define AD7923_CMD_BASE \ |
|
|
(AD7923_CTL_WRITE | AD7923_CTL_PM0 | AD7923_CTL_PM1 | AD7923_CTL_CODING) |
|
|
#endif |
|
|
|
|
|
|
|
|
// // adc events |
|
|
// static const etype adctypes[4] = { |
|
|
@@ -45,40 +51,40 @@ void adc_convert(U16 (*dst)[4]) { |
|
|
// data into AD7923 is a left-justified 12-bit value in a 16-bit word |
|
|
// so, always lshift the command before sending |
|
|
cmd = ( AD7923_CMD_BASE ) << 4; |
|
|
spi_selectChip(SPI, ADC_SPI); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS); |
|
|
spi_write(SPI, cmd); |
|
|
spi_unselectChip(SPI, ADC_SPI); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS); |
|
|
|
|
|
// get channel 0, setup channel 1 |
|
|
cmd = ( AD7923_CMD_BASE | AD7923_CTL_ADD0 ) << 4; |
|
|
spi_selectChip(SPI, ADC_SPI); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS); |
|
|
spi_write(SPI, cmd); |
|
|
spi_read(SPI, &val); |
|
|
spi_unselectChip(SPI, ADC_SPI); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS); |
|
|
(*dst)[0] = val & 0xfff; |
|
|
|
|
|
// get channel 1, setup channel 2 |
|
|
cmd = ( AD7923_CMD_BASE | AD7923_CTL_ADD1 ) << 4; |
|
|
spi_selectChip(SPI, ADC_SPI); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS); |
|
|
spi_write(SPI, cmd); |
|
|
spi_read(SPI, &val); |
|
|
spi_unselectChip(SPI, ADC_SPI); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS); |
|
|
(*dst)[1] = val & 0xfff; |
|
|
|
|
|
// get channel 2, setup channel 3 |
|
|
cmd = ( AD7923_CMD_BASE | AD7923_CTL_ADD1 | AD7923_CTL_ADD0 ) << 4; |
|
|
spi_selectChip(SPI, ADC_SPI); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS); |
|
|
spi_write(SPI, cmd); |
|
|
spi_read(SPI, &val); |
|
|
spi_unselectChip(SPI, ADC_SPI); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS); |
|
|
(*dst)[2] = val & 0xfff; |
|
|
|
|
|
// get channel 3, dummy write |
|
|
cmd = ( AD7923_CMD_BASE ) << 4; |
|
|
spi_selectChip(SPI, ADC_SPI); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS); |
|
|
spi_write(SPI, cmd); |
|
|
spi_read(SPI, &val); |
|
|
spi_unselectChip(SPI, ADC_SPI); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS); |
|
|
(*dst)[3] = val & 0xfff; |
|
|
|
|
|
} |
|
|
@@ -88,18 +94,18 @@ void init_adc(void) { |
|
|
u16 cmd; |
|
|
|
|
|
// at powerup, the part wants a dummy conversion with DIN high |
|
|
spi_selectChip(SPI, ADC_SPI); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS); |
|
|
spi_write(SPI, 0xffff); |
|
|
spi_unselectChip(SPI, ADC_SPI); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS); |
|
|
|
|
|
// wait for powerup time (5us in datasheet) |
|
|
delay_us(5); |
|
|
|
|
|
// write base configuration |
|
|
cmd = AD7923_CMD_BASE << 4; |
|
|
spi_selectChip(SPI, ADC_SPI ); |
|
|
spi_selectChip(SPI, ADC_SPI_NPCS ); |
|
|
spi_write(SPI, cmd ); |
|
|
spi_unselectChip(SPI, ADC_SPI ); |
|
|
spi_unselectChip(SPI, ADC_SPI_NPCS ); |
|
|
|
|
|
} |
|
|
|
|
|
|