Under construction

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed

Fork of vs1011e by Erick Cardenas

Committer:
swilliams346
Date:
Mon Dec 12 14:31:10 2016 +0000
Revision:
1:9c5643903657
Parent:
0:8a46c5988d62
Under construction

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ecardenas8 0:8a46c5988d62 1 #include "mbed.h"
ecardenas8 0:8a46c5988d62 2 #include "SDFileSystem.h"
swilliams346 1:9c5643903657 3 #include "uLCD_4DGL.h"
swilliams346 1:9c5643903657 4 #include "VS1002.h"
ecardenas8 0:8a46c5988d62 5
swilliams346 1:9c5643903657 6 uLCD_4DGL uLCD(p28, p27, p30);
ecardenas8 0:8a46c5988d62 7
ecardenas8 0:8a46c5988d62 8 DigitalIn Dreq(p26);
ecardenas8 0:8a46c5988d62 9 DigitalOut XDCS(p25);
ecardenas8 0:8a46c5988d62 10 DigitalOut reset(p23);
ecardenas8 0:8a46c5988d62 11 DigitalOut XCS(p22);
ecardenas8 0:8a46c5988d62 12
swilliams346 1:9c5643903657 13 SPI mp3Board(p11, p12, p13); // mosi, miso, sclk
swilliams346 1:9c5643903657 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); // DI, DO, SCK, CS
ecardenas8 0:8a46c5988d62 15
ecardenas8 0:8a46c5988d62 16 int killLoop = 1;
ecardenas8 0:8a46c5988d62 17 int mp3Chunk;
ecardenas8 0:8a46c5988d62 18 int fileSize;
ecardenas8 0:8a46c5988d62 19
ecardenas8 0:8a46c5988d62 20 long getFileSize(FILE *fp) {
ecardenas8 0:8a46c5988d62 21 fseek(fp, 0, SEEK_END);
ecardenas8 0:8a46c5988d62 22 int size = ftell(fp);
ecardenas8 0:8a46c5988d62 23 fseek(fp, 0, SEEK_SET);
ecardenas8 0:8a46c5988d62 24 return size;
ecardenas8 0:8a46c5988d62 25 }
ecardenas8 0:8a46c5988d62 26
swilliams346 1:9c5643903657 27 void sdi_write(unsigned char datum)
swilliams346 1:9c5643903657 28 {
swilliams346 1:9c5643903657 29 XCS = 1;
swilliams346 1:9c5643903657 30 XDCS = 1;
swilliams346 1:9c5643903657 31 XCS = 0;
swilliams346 1:9c5643903657 32 while(!Dreq);
swilliams346 1:9c5643903657 33 mp3Board.write(datum);
swilliams346 1:9c5643903657 34 XCS = 1;
swilliams346 1:9c5643903657 35 }
swilliams346 1:9c5643903657 36
swilliams346 1:9c5643903657 37 /*
swilliams346 1:9c5643903657 38 void sdi_write(unsigned char datum)
swilliams346 1:9c5643903657 39 {
swilliams346 1:9c5643903657 40 _CS = 1;
swilliams346 1:9c5643903657 41 _DCS = 1;
swilliams346 1:9c5643903657 42 _CS = 0;
swilliams346 1:9c5643903657 43 while(!_DREQ);
swilliams346 1:9c5643903657 44 _spi.write(datum);
swilliams346 1:9c5643903657 45 _CS = 1;
swilliams346 1:9c5643903657 46 }
swilliams346 1:9c5643903657 47 ////////////////////////////////////////////////////////////////////////////
swilliams346 1:9c5643903657 48 VS1002::VS1002(
swilliams346 1:9c5643903657 49 PinName mmosi, PinName mmiso, PinName ssck, PinName ccs, const char *name,
swilliams346 1:9c5643903657 50 PinName mosi, PinName miso, PinName sck, PinName cs, PinName rst,
swilliams346 1:9c5643903657 51 PinName dreq, PinName dcs, PinName vol)
swilliams346 1:9c5643903657 52 :
swilliams346 1:9c5643903657 53 _sd(mmosi, mmiso, ssck, ccs, name),
swilliams346 1:9c5643903657 54 _spi(mosi, miso, sck),
swilliams346 1:9c5643903657 55 _CS(cs),
swilliams346 1:9c5643903657 56 _RST(rst),
swilliams346 1:9c5643903657 57 _DREQ(dreq),
swilliams346 1:9c5643903657 58 _DCS(dcs),
swilliams346 1:9c5643903657 59 _VOL(vol) {
swilliams346 1:9c5643903657 60
swilliams346 1:9c5643903657 61 } */
swilliams346 1:9c5643903657 62 ///////////////////////////////////////////////////////////////////////////
swilliams346 1:9c5643903657 63
ecardenas8 0:8a46c5988d62 64 int main() {
swilliams346 1:9c5643903657 65 reset = 1;
swilliams346 1:9c5643903657 66 //Sine test // So, the simplified procedure is:
swilliams346 1:9c5643903657 67 XDCS = 1; //1) Always keep XDCS at logical 1.
swilliams346 1:9c5643903657 68 XCS = 0; //2) Set XCS to 0,
swilliams346 1:9c5643903657 69 mp3Board.write(0x02); //0x02 is the write opcode
swilliams346 1:9c5643903657 70 mp3Board.write(0x00); //0x00 is the address of the sci mode register
swilliams346 1:9c5643903657 71 mp3Board.write(0x0A); //0x0A (11 in dec) is the SM_SDINEW bit //send SCI command to set SCI_MODE with SM_SHARED and SM_SDINEW set to 1,
swilliams346 1:9c5643903657 72 XCS = 1; //then set XCS back to 1.
swilliams346 1:9c5643903657 73 mp3Board.write(0x53); //3) While XCS is 1, send sine test activation bytes, e.g. 0x53 0xef 0x6e 0x7e 0x00 0x00 0x00 0x00.
swilliams346 1:9c5643903657 74 mp3Board.write(0xEF);
swilliams346 1:9c5643903657 75 mp3Board.write(0x6E);
swilliams346 1:9c5643903657 76 mp3Board.write(0x44);
swilliams346 1:9c5643903657 77 mp3Board.write(0x00);
swilliams346 1:9c5643903657 78 mp3Board.write(0x00);
swilliams346 1:9c5643903657 79 mp3Board.write(0x00);
swilliams346 1:9c5643903657 80 mp3Board.write(0x00);
ecardenas8 0:8a46c5988d62 81
ecardenas8 0:8a46c5988d62 82
swilliams346 1:9c5643903657 83 /*
swilliams346 1:9c5643903657 84 mp3Board.frequency(12000000);
ecardenas8 0:8a46c5988d62 85 XCS=1;
ecardenas8 0:8a46c5988d62 86 XCS=0; //pull xcs low to begin sci write. Sets mode to vs1002,
ecardenas8 0:8a46c5988d62 87 mp3Board.write(0x02); //0x02 is the write opcode
ecardenas8 0:8a46c5988d62 88 mp3Board.write(0x00); //0x00 is the address of the sci mode register
ecardenas8 0:8a46c5988d62 89 mp3Board.write(0x0A); //0x0A (11 in dec) is the SM_SDINEW bit
ecardenas8 0:8a46c5988d62 90 XCS=1; //pulled high to end write sequence
ecardenas8 0:8a46c5988d62 91
swilliams346 1:9c5643903657 92 uLCD.locate(0,0);
swilliams346 1:9c5643903657 93 uLCD.printf("Initialized...");
ecardenas8 0:8a46c5988d62 94
ecardenas8 0:8a46c5988d62 95 FILE *mp3_file;
swilliams346 1:9c5643903657 96 unsigned char mp3Chunk[512];
swilliams346 1:9c5643903657 97 mp3_file = fopen("/sd/GGW.mp3","rb");
ecardenas8 0:8a46c5988d62 98
swilliams346 1:9c5643903657 99 if (mp3_file !=NULL)
swilliams346 1:9c5643903657 100 {
swilliams346 1:9c5643903657 101 uLCD.locate(0,1);
swilliams346 1:9c5643903657 102 uLCD.printf("File found");
swilliams346 1:9c5643903657 103 XDCS = 1;
swilliams346 1:9c5643903657 104 XDCS = 0;
swilliams346 1:9c5643903657 105 fileSize=getFileSize(mp3_file);
swilliams346 1:9c5643903657 106 uLCD.locate(0,3);
swilliams346 1:9c5643903657 107 uLCD.printf("Filesize: ");
swilliams346 1:9c5643903657 108 uLCD.locate(0,4);
swilliams346 1:9c5643903657 109 uLCD.printf(" %i", fileSize);
swilliams346 1:9c5643903657 110 //fread(&mp3Chunk, 1, 1, mp3_file);
swilliams346 1:9c5643903657 111 uLCD.locate(0,5);
swilliams346 1:9c5643903657 112 uLCD.printf("mp3 file: ");
swilliams346 1:9c5643903657 113 uLCD.locate(0,6);
swilliams346 1:9c5643903657 114 uLCD.printf(" %i", mp3_file);
swilliams346 1:9c5643903657 115 uLCD.locate(0,7);
swilliams346 1:9c5643903657 116 //uLCD.printf("mp3 chunk: ");
swilliams346 1:9c5643903657 117 //uLCD.locate(0,8);
swilliams346 1:9c5643903657 118 //uLCD.printf(" %i", mp3Chunk);
swilliams346 1:9c5643903657 119 //would have funtion here passing the 8 bits to arm assembler code, hence the necessatity for 8 btis only!
swilliams346 1:9c5643903657 120 //mp3Board.write(mp3Chunk);
swilliams346 1:9c5643903657 121 uLCD.locate(0,10);
swilliams346 1:9c5643903657 122 uLCD.printf("File writing...");
swilliams346 1:9c5643903657 123 //////////////////////////////////////////////////////////////////////////////
swilliams346 1:9c5643903657 124 fread(&mp3Chunk, 1, 512, mp3_file);
swilliams346 1:9c5643903657 125 for(int i=0; i<512; i++)
swilliams346 1:9c5643903657 126 {
swilliams346 1:9c5643903657 127 #ifndef FS_ONLY
swilliams346 1:9c5643903657 128 //mp3Board.write(mp3Chunk[i]);
swilliams346 1:9c5643903657 129 sdi_write(mp3Chunk[i]);
swilliams346 1:9c5643903657 130 uLCD.locate(0,11);
swilliams346 1:9c5643903657 131 uLCD.printf("... %i", i);
swilliams346 1:9c5643903657 132 uLCD.locate(0,12);
swilliams346 1:9c5643903657 133 uLCD.printf(".. %i", mp3Chunk[i]);
swilliams346 1:9c5643903657 134 #endif
swilliams346 1:9c5643903657 135 }
swilliams346 1:9c5643903657 136 #ifndef FS_ONLY
swilliams346 1:9c5643903657 137 //Volume set to 0 dB
swilliams346 1:9c5643903657 138 XCS = 1;
swilliams346 1:9c5643903657 139 XDCS = 1;
swilliams346 1:9c5643903657 140 XCS = 0; //enables SCI/disables SDI
swilliams346 1:9c5643903657 141 while(!Dreq); //wait unitl data request is high
swilliams346 1:9c5643903657 142 mp3Board.write(0x02); //SCI write
swilliams346 1:9c5643903657 143 mp3Board.write(0x0B); //register address
swilliams346 1:9c5643903657 144 mp3Board.write((0 >> 8) & 0xFF); //write out first half of data word
swilliams346 1:9c5643903657 145 mp3Board.write(0 & 0xFF); //write out second half of data word
swilliams346 1:9c5643903657 146 XCS = 1; //enables SDI/disables SCI
swilliams346 1:9c5643903657 147 wait_us(5);
swilliams346 1:9c5643903657 148 #endif
swilliams346 1:9c5643903657 149 for(int n=0; n<2048; n++)
swilliams346 1:9c5643903657 150 {
swilliams346 1:9c5643903657 151 #ifndef FS_ONLY
swilliams346 1:9c5643903657 152 sdi_write(0x00);
swilliams346 1:9c5643903657 153 uLCD.locate(0,13);
swilliams346 1:9c5643903657 154 uLCD.printf("... %i", n);
swilliams346 1:9c5643903657 155 #endif
swilliams346 1:9c5643903657 156 }
swilliams346 1:9c5643903657 157 ////////////////////////////////////////////////////////////////////////
swilliams346 1:9c5643903657 158 fclose(mp3_file);
swilliams346 1:9c5643903657 159 XDCS=1;
swilliams346 1:9c5643903657 160 uLCD.locate(0,14);
swilliams346 1:9c5643903657 161 uLCD.printf("File closing.");
swilliams346 1:9c5643903657 162 }
swilliams346 1:9c5643903657 163 else
swilliams346 1:9c5643903657 164 {
swilliams346 1:9c5643903657 165 uLCD.locate(0,2);
swilliams346 1:9c5643903657 166 uLCD.printf("File not found");
swilliams346 1:9c5643903657 167 }
swilliams346 1:9c5643903657 168 return 0;*/
swilliams346 1:9c5643903657 169 }