Library for TI's DRV2667

Revision:
0:faa5d89e9dac
Child:
1:a57042b30965
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DRV2667.h	Wed Feb 07 09:20:34 2018 +0000
@@ -0,0 +1,124 @@
+/*
+    Taku Hachisu 06/02/2018
+
+    Library for the TI DRV2667
+
+    References:
+    http://www.ti.com/product/DRV2667/description
+    http://www.tij.co.jp/jp/lit/ds/symlink/drv2667.pdf (Datasheet)
+*/
+
+#ifndef DRV2667_H
+#define DRV2667_H
+
+#include "mbed.h"
+
+/******************************************************************************
+***** DRV2667 Addresses
+******************************************************************************/
+#define SLAVE_ADDR_7_BIT 0x59 // 7-bit slave address 
+
+class DRV2667
+{
+
+public:
+    //// Selects the source to be played in register 0x01, bit 2
+    enum InputMux {
+        Digital = 0,    // Digital input source
+        Analog = 0x04,  // Analog input source
+    };
+
+    //// Selects the gain for the amplifier in register 0x01, bits [1:0]
+    enum Gain {
+        GNx1,    // 0x00:  50 Vpp - 28.8 dB
+        GNx2,    // 0x01: 100 Vpp - 34.8 dB
+        GNx3,    // 0x02: 150 Vpp - 38.4 dB
+        GNx4,    // 0x03: 200 Vpp - 40.7 dB
+    };
+
+    //// Time period when the FIFO runs empty and the device goes into idle
+    //// mode, powering down the boost converter and amplifier in register
+    //// 0x02, bits [3:2]
+    enum Timeout {
+        TOx1 = 0,    // 5 msec
+        TOx2 = 0x04,    // 10 msec
+        TOx3 = 0x08,    // 15 msec
+        TOx4 = 0x0C,    // 20 msec
+    };
+
+    /**
+    * Create a DRV2605 object
+    *
+    * @param &i2c pointer of I2C object
+    * @param isDigital true: digital input source, false: analog input source
+    * @param gn gain for the amplifier
+    * @param to timeout for FIFO interface (digital input only)
+    */
+    DRV2667(I2C &i2c, InputMux im = Digital, Gain gn = GNx1, Timeout to = TOx1);
+
+    /**
+        Write value to specified register of device
+        @param reg      The device register to write
+        @param value    The value to write to the register
+    */
+    void i2cWriteByte(char reg, char value);
+
+    /**
+        Read value from register of device
+        @param reg  The device register to read
+        @return     The result
+    */
+    uint8_t i2cReadByte(char reg);
+
+    /**
+        Starts waveform playback
+    */
+    void play();
+
+    /**
+        Cancel waveform playback
+    */
+    void stop();
+    
+    /**
+        Set sequencer to play waveform
+        
+        @param id array of waveform ID in RAM
+        @param setNum the number of waveform to set
+    */
+    void setWaveform(char* id, char setNum);
+
+    /**
+        Entry point for FIFO data read out automatically at an 8-kHz sampling rate
+        @param data     signed 8-bit data
+    */
+    void loadFIFO(signed char data, char size);
+
+    /**
+        Set internal wavefrom storage for the Waveform Synthesis Playback mode
+        @param data array of parameters of sinusoid, which are:
+                    0: Peak voltage = amp / 255  x Gain / 2
+                    1: Sinusoidal frequency in Herz
+                    2: Number of cycles to be played
+                    3: The envelope setting:
+                    bits [7:4] sets ramp-up rate
+                    bits [3:0] sets ramp-down rate
+                    0x00 NoEnvelope; 0x01 32ms; 0x02 64ms; 0x03 96ms; 0x04 128ms;
+                    0x05 160ms; 0x06 192ms; 0x07 224ms; 0x08 256ms; 0x09 512ms;
+                    0x0A 768ms; 0x0B 1024ms; 0xC 1280ms; 0x0D 1536ms; 0x0E 1792ms;
+                    0x0F 2048ms;
+        @param waveNum  the number of waveform
+    */
+    void setWSP(char data[][4], char waveNum);
+
+    ///**
+    //    Set internal wavefrom storage for the Direct Playback from RAM mode
+    //    To be implemented
+    //*/
+    //void setDPR(void);
+
+private:
+    I2C *_i2c;
+};
+
+#endif
\ No newline at end of file