Simple driver for the 12-bit DAC DAC7311 from TI

Committer:
macgyveremir
Date:
Tue Oct 23 19:07:26 2012 +0000
Revision:
1:5497575badba
Parent:
0:ca49770e05b5
Correct and working implementation. Can easily be generalized to family devices DACx311

Who changed what in which revision?

UserRevisionLine numberNew contents of line
macgyveremir 0:ca49770e05b5 1 #ifndef __DAC7311_H__
macgyveremir 0:ca49770e05b5 2 #define __DAC7311_H__
macgyveremir 0:ca49770e05b5 3
macgyveremir 0:ca49770e05b5 4 #include "mbed.h"
macgyveremir 0:ca49770e05b5 5
macgyveremir 0:ca49770e05b5 6 #define DAC7311_SPI_MODE 1
macgyveremir 0:ca49770e05b5 7
macgyveremir 0:ca49770e05b5 8 // Bit masks and shifts
macgyveremir 0:ca49770e05b5 9 #define PD0 (1<<14)
macgyveremir 0:ca49770e05b5 10 #define PD1 (1<<15)
macgyveremir 0:ca49770e05b5 11 #define conf_data_12(x) ((unsigned short)(x << 2) & 0x3FFC)
macgyveremir 0:ca49770e05b5 12
macgyveremir 0:ca49770e05b5 13 // Operation modes
macgyveremir 0:ca49770e05b5 14 #define DAC7311_OP_NORMAL 0
macgyveremir 0:ca49770e05b5 15 #define DAC7311_OP_SHUTDOWN_1K (PD0)
macgyveremir 0:ca49770e05b5 16 #define DAC7311_OP_SHUTDOWN_100K (PD1)
macgyveremir 0:ca49770e05b5 17 #define DAC7311_OP_SHUTDOWN_HIZ ( PD0 | PD1 )
macgyveremir 0:ca49770e05b5 18
macgyveremir 0:ca49770e05b5 19 union UI16toC_t
macgyveremir 0:ca49770e05b5 20 {
macgyveremir 0:ca49770e05b5 21 char bytes[sizeof(unsigned short)];
macgyveremir 0:ca49770e05b5 22 unsigned short value;
macgyveremir 0:ca49770e05b5 23 };
macgyveremir 0:ca49770e05b5 24
macgyveremir 0:ca49770e05b5 25 class DAC7311
macgyveremir 0:ca49770e05b5 26 {
macgyveremir 0:ca49770e05b5 27 SPI *spi;
macgyveremir 0:ca49770e05b5 28 DigitalOut *sync;
macgyveremir 0:ca49770e05b5 29 unsigned short value;
macgyveremir 0:ca49770e05b5 30 unsigned short mode;
macgyveremir 0:ca49770e05b5 31
macgyveremir 0:ca49770e05b5 32 public:
macgyveremir 0:ca49770e05b5 33
macgyveremir 0:ca49770e05b5 34 DAC7311 (SPI *spi, DigitalOut *sync) : spi(spi), sync(sync), value(0), mode(DAC7311_OP_NORMAL)
macgyveremir 0:ca49770e05b5 35 { *sync = 1; }
macgyveremir 0:ca49770e05b5 36
macgyveremir 0:ca49770e05b5 37 void set_mode (unsigned short);
macgyveremir 0:ca49770e05b5 38 void set_value (unsigned short);
macgyveremir 0:ca49770e05b5 39 };
macgyveremir 0:ca49770e05b5 40
macgyveremir 0:ca49770e05b5 41
macgyveremir 0:ca49770e05b5 42 #endif /* __DAC7311_H__ */