Dialog DA7212 evaluating project DEVELOP branch
Dependencies: FXAS21002 TLV320 mbed sinelookup C12832 FXOS8700
Diff: main.cpp
- Revision:
- 14:c852e468923e
- Parent:
- 11:2fcbac0f72dd
- Child:
- 15:f9f642239cb6
--- a/main.cpp Mon Apr 24 17:47:00 2017 +0000 +++ b/main.cpp Mon Jun 05 16:25:29 2017 +0000 @@ -1,115 +1,161 @@ /** original: p07gbar/code/TLV320_Write_test/ * modify by k4zuki - * to control Dialog DA7212 codec + * to control Dialog DA7212 codec from FRDM-K64F/K66F + * - FRDM + * - https://developer.mbed.org/platforms/FRDM-K64F/ + * - I2S + * - I2S_TXD: PTC1 + * - I2S_TX_FS: PTB19 + * - I2S_TX_BCLK: PTB18 + * - FXOS8700CQ - Accelerometer and Magnetometer + * - SCL:SCL + * - SDA:SDA + * - 8-bit Address: 0x3A + * - https://developer.mbed.org/platforms/FRDM-K66F/ + * - I2S + * - I2S_TXD: PTC1 + * - I2S_TX_FS: PTE11 + * - I2S_TX_BCLK: PTE12 + * - FXOS8700CQ - Accelerometer and Magnetometer + * - SCL:SCL + * - SDA:SDA + * - 8-bit Address: 0x3A + * - FXAS21002 - Gyroscope + * - SCL:SCL + * - SDA:SDA + * - 8-bit Address: 0x42 + * - 2 user push-buttons + * - RGB LED + * - DA7212 (on-board(K66F) or off-board(K64F+ARD-AUDIO-7212)) + * - https://developer.mbed.org/components/ARD-AUDIO-DA7212/ + * - SCL:SCL + * - SDA:SDA + * - 8-bit address: 0x34 + * - Application Shield + * - https://developer.mbed.org/components/mbed-Application-Shield/ + * - 3 Axis +/1 1.5g Accelerometer,I2C Interface Freescale MMA7660 + * - SCL: SCL + * - SDA: SDA + * - 8-bit Address: 0x98 + * - Temperature sensor LM75B + * - SCL: SCL + * - SDA: SDA + * - 8-bit Address: 0x90 + * - 2 x Potentiometers Iskra PNZ10ZA, 10k + * - Pot 1 (left) : A0 + * - Pot 2 (right): A1 + * - 5 way Joystick ALPS SKRHADE010 + * - Up: A2 + * - Down: A3 + * - Left: A4 + * - Right: A5 + * - Centre: D4 + * - 128x32 Graphics LCD, SPI Interface Newhaven C12332A1Z + * - A0: D7 + * - nCS: D10 + * - MOSI: D11 + * - nRESET: D12 + * - SCK: D13 + * - RGB LED, PWM connected Cree Inc CLV1A-FKB + * - Red: D5 + * - Blue: D8 + * - Green: D9 + * - Speaker, PWM Connected MULTICOMP MCSMT-8030B-3717 + * - D6 + * - Xbee socket + * - Tx: D0 + * - Rx: D1 + * - Status: D2 + * - nReset: D3 */ + #include "mbed.h" + +AnalogIn pot1 (A0); +AnalogIn pot2 (A1); + +InterruptIn left(PTA4); +InterruptIn right(PTC6); + +#include "FXOS8700.h" +FXOS8700 acc(I2C_SDA, I2C_SCL, 0x3A); +FXOS8700 mag(I2C_SDA, I2C_SCL, 0x3A); + +#include "C12832.h" +C12832 lcd(D11, D13, D12, D7, D10); + + +#include "DA7212.h" +#include "FrdmI2s.h" +#define SAMPLERATE 32000 #include "sinelookup.h" -// #include "TLV320.h" -// #include "DA7212.h" -#include "I2S.h" -// #include "C12832.h" - -// C12832 lcd(PTD2, PTD1, PTD3, PTC3, PTD0); -// AnalogIn pot1 (PTB2); -// AnalogIn pot2 (PTB3); - -#define SAMPLERATE 32000 - //DA7212 codec(I2C_SDA, I2C_SCL); //TLV320 codec(I2C_SDA, I2C_SCL); -I2S i2s(I2S_TRANSMIT, PTC1, PTB19, PTB18); +FrdmI2s i2s(I2S_TRANSMIT, PTC1, PTE11, PTE12); -//AnalogIn aIn(p19); -//AnalogIn vol(p20); -// -//float phase_l; -//float phase_r; -//int minibuf[16]; -//float skipper; -//float volume; +uint16_t phase_l; +uint16_t phase_r; +int minibuf[16]; +unsigned short skipper; +unsigned short volume; + //float phase_kill; -// -// //extern "C" void HardFault_Handler() //{ // error("Hard Fault!\n"); //} -// -// -//void play(void) -//{ -// int to_write = i2s.max_fifo_points() - (i2s.fifo_points()); -// for(int i = 0; i < to_write; i+=2) { -// minibuf[i] = int(float(sine16lookup[int(phase_l)])*volume); -// //minibuf[i] = int(sine16lookup[int(phase_l)]); -// minibuf[i+1] = int(float(sine16lookup[int(phase_r)])*volume); -// phase_l+=skipper; -// phase_r = phase_l + phase_kill; -// while(phase_l >= SINE16LENGTH) { -// phase_l -= SINE16LENGTH; -// } -// -// while(phase_r >= SINE16LENGTH) { -// phase_r -= SINE16LENGTH; -// } -// while(phase_r< 0) phase_r += SINE16LENGTH; -// } -// i2s.write(minibuf, to_write); -//} + +void play(void) +{ + int to_write = i2s.max_fifo_points() - (i2s.fifo_points()); + for(int i = 0; i < to_write; i+=2) { + minibuf[i] = (int)sine16lookup[(SINE16LENGTH - 1) &( phase_l+skipper)]; + minibuf[i+1] = (int)sine16lookup[(SINE16LENGTH - 1) & (phase_r+skipper)]; + } + i2s.write(minibuf, to_write); +} + Serial pc(USBTX,USBRX); + /* main */ int main() { pc.baud(115200); - pc.printf("printf\n\r"); - // skipper = (aIn*49)+1; + skipper = pot1.read_u16() >> 8; + volume = pot2.read_u16() >> 10; + phase_l = 0; + phase_r = 512; - // codec.power(true); +// codec.power(true); // codec.frequency(SAMPLERATE); // codec.wordsize(16); // codec.master(false); // codec.headphone_volume(0.5); - // codec.start(); +// codec.start(); - // i2s.frequency(SAMPLERATE); - // i2s.wordsize(16); - // i2s.stereomono(I2S_STEREO); - // i2s.masterslave(I2S_MASTER); - // i2s.attach(&play); - // i2s.start(); - while(1) - { + i2s.frequency(SAMPLERATE); + i2s.wordsize(16); + i2s.stereomono(I2S_STEREO); + i2s.masterslave(I2S_MASTER); + i2s.attach(&play); + i2s.start(); + + while(1){ + wait_ms(500); + pc.printf("."); + } + while(1) { pc.printf("."); wait_ms(500); - // skipper = (aIn*30)+1; - - // volume = 1; - // phase_kill = (vol - 0.5) * 400; + skipper = pot1.read_u16() >> 8; + volume = pot2.read_u16() >> 10; // 6-bit unsigned int +// codec.headphone_volume((int)(volume)); - // printf("Skipper:%f, %i, %i\n\r",skipper, to_write,i2s.fifo_level()); - /*if(flag) - { - printf("."); - flag = false; - }*/ + lcd.locate(0,3); + lcd.printf("Volume: %+03d", (volume - 57)); + lcd.locate(0,15); + lcd.printf("Skipper: %04d", skipper); + } } -// #include "C12832.h" -// -// C12832 lcd(D11, D13, D12, D7, D10); -// -// AnalogIn pot1 (A0); -// AnalogIn pot2 (A1); -// -// int main() -// { -// while(1) { -// lcd.cls(); -// lcd.locate(0,3); -// lcd.printf("Pot 1 = %.2f", (float)pot1); -// lcd.locate(0,14); -// lcd.printf("Pot 2 = %.2f", (float)pot2); -// wait(0.1); -// } -// }