@@ -30,10 +30,6 | |||||
30 | #include <i2c.h> |
|
30 | #include <i2c.h> | |
31 | #include <core.h> |
|
31 | #include <core.h> | |
32 | #include <terminal.h> |
|
32 | #include <terminal.h> | |
33 | #include <sdcard-spi.h> |
|
|||
34 | #include <sdcard.h> |
|
|||
35 | #include <mbr.h> |
|
|||
36 | #include <VS10XX.h> |
|
|||
37 |
|
33 | |||
38 | uint32_t OSC0 =8000000; |
|
34 | uint32_t OSC0 =8000000; | |
39 | uint32_t INTOSC =16000000; |
|
35 | uint32_t INTOSC =16000000; | |
@@ -68,6 +64,17 volatile int8_t* lcd0_DATA=(volatile int | |||||
68 | float VREF0 =(float)3.3; |
|
64 | float VREF0 =(float)3.3; | |
69 | volatile vs10XXDev audioCodec0; |
|
65 | volatile vs10XXDev audioCodec0; | |
70 |
|
66 | |||
|
67 | sdcardDev sdcard2; | |||
|
68 | blkdevice sdcard2blkdev; | |||
|
69 | dikpartition sdcard2Part1; | |||
|
70 | FAT32fs sdcard2FAT32part1; | |||
|
71 | dikpartition sdcard2Part2; | |||
|
72 | FAT32fs sdcard2FAT32part2; | |||
|
73 | dikpartition sdcard2Part3; | |||
|
74 | FAT32fs sdcard2FAT32part3; | |||
|
75 | dikpartition sdcard2Part4; | |||
|
76 | FAT32fs sdcard2FAT32part4; | |||
|
77 | ||||
71 | int bsp_init() |
|
78 | int bsp_init() | |
72 | { |
|
79 | { | |
73 | int i=0; |
|
80 | int i=0; | |
@@ -100,8 +107,8 void bsp_GPIO_init() | |||||
100 | GPIO_init |= gpiohighspeed | gpiooutdir | gpiopushpulltype; |
|
107 | GPIO_init |= gpiohighspeed | gpiooutdir | gpiopushpulltype; | |
101 | gpiosetconfig(&GPIO_init); |
|
108 | gpiosetconfig(&GPIO_init); | |
102 | } |
|
109 | } | |
103 | gpio_t GPIO_In_init_List[]={VS1053DREQ,SDCARD2CD}; |
|
110 | gpio_t GPIO_In_init_List[]={VS1053DREQ,SDCARD2CD,BP3}; | |
104 |
for(int i=0;i< |
|
111 | for(int i=0;i<3;i++) | |
105 | { |
|
112 | { | |
106 | gpio_t GPIO_init = gpioopen(GPIO_In_init_List[i]); |
|
113 | gpio_t GPIO_init = gpioopen(GPIO_In_init_List[i]); | |
107 | GPIO_init |= gpiohighspeed | gpioindir; |
|
114 | GPIO_init |= gpiohighspeed | gpioindir; | |
@@ -199,15 +206,15 int bsp_FSMC_init() | |||||
199 |
|
206 | |||
200 | void bsp_spi_init() |
|
207 | void bsp_spi_init() | |
201 | { |
|
208 | { | |
202 |
|
|
209 | gpio_t VSSPI_DBxList[]={VS1053SCK,VS1053MOSI,VS1053MISO}; | |
203 |
|
|
210 | for(int i=0;i<3;i++) | |
204 |
|
|
211 | { | |
205 |
|
|
212 | gpio_t SPI_DBx = gpioopen(VSSPI_DBxList[i]); | |
206 |
|
|
213 | SPI_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; | |
207 |
|
|
214 | gpiosetconfig(&SPI_DBx); | |
208 |
|
|
215 | GPIO_PinAFConfig(GPIOGETPORT(SPI_DBx), (uint8_t)(SPI_DBx & 0xF), GPIO_AF_SPI1); | |
209 |
|
|
216 | } | |
210 |
|
|
217 | spiopenandconfig(VS1053SPI,spi8bits|spimaster|spimsbfirst,2*1000*1000,VS1053MOSI,VS1053MISO,VS1053SCK,-1); | |
211 |
|
218 | |||
212 | gpio_t SDSPI_DBxList[]={SDCARD2SCK,SDCARD2MOSI,SDCARD2MISO}; |
|
219 | gpio_t SDSPI_DBxList[]={SDCARD2SCK,SDCARD2MOSI,SDCARD2MISO}; | |
213 | for(int i=0;i<3;i++) |
|
220 | for(int i=0;i<3;i++) | |
@@ -231,17 +238,91 void bsp_iic_init() | |||||
231 | void bsp_Audio_init() |
|
238 | void bsp_Audio_init() | |
232 | { |
|
239 | { | |
233 | vs10XXopen(&audioCodec0,VS1053SPI,vs1052setXCS,vs1052setRST,vs1052setXDCS,vs10XXDREQ); |
|
240 | vs10XXopen(&audioCodec0,VS1053SPI,vs1052setXCS,vs1052setRST,vs1052setXDCS,vs10XXDREQ); | |
|
241 | if(audioCodec0.VERSION!=UNKNOWN) | |||
|
242 | { | |||
|
243 | printf("detected Audio codec "); | |||
|
244 | switch (audioCodec0.VERSION) { | |||
|
245 | case VS1001: | |||
|
246 | printf("VS1001\n"); | |||
|
247 | break; | |||
|
248 | case VS1011: | |||
|
249 | printf("VS1011\n"); | |||
|
250 | break; | |||
|
251 | case VS1002: | |||
|
252 | printf("VS1002\n"); | |||
|
253 | break; | |||
|
254 | case VS1003: | |||
|
255 | printf("VS1003\n"); | |||
|
256 | break; | |||
|
257 | case VS1053: | |||
|
258 | printf("VS1053\n"); | |||
|
259 | break; | |||
|
260 | case VS1033: | |||
|
261 | printf("VS1033\n"); | |||
|
262 | break; | |||
|
263 | case VS1103: | |||
|
264 | printf("VS1103\n"); | |||
|
265 | break; | |||
|
266 | default: | |||
|
267 | printf("Unknown device\n"); | |||
|
268 | break; | |||
|
269 | } | |||
|
270 | } | |||
234 | } |
|
271 | } | |
235 |
|
272 | |||
236 | void bsp_SD_init() |
|
273 | void bsp_SD_init() | |
237 | { |
|
274 | { | |
238 | // sdcardDev sdcard2; |
|
275 | if(bspsdcardpresent()) | |
239 | // blkdevice sdcard2blkdev; |
|
276 | { | |
240 | // dikpartition sdcard2Part1; |
|
277 | sdcardspimake(&sdcard2,(UHANDLE)SDCARD2SPI,spigetnc,spiputnc,spisetspeed,spigetspeed); | |
241 | // sdcardspimake(&sdcard2,(UHANDLE)SDCARD2SPI,spigetnc,spiputnc,spisetspeed,spigetspeed); |
|
278 | sdcardspimakeblkdev(&sdcard2blkdev,&sdcard2,bspsdcardselect,bsppowersdcard,bspsdcardpresent,bspsdcardwriteprotected); | |
242 | // sdcardspimakeblkdev(&sdcard2blkdev,&sdcard2,bspsdcardselect,bsppowersdcard,bspsdcardpresent,bspsdcardwriteprotected); |
|
279 | if(sdcard2blkdev.initialize(&sdcard2blkdev)!=STA_NOINIT) | |
243 | // sdcard2blkdev.initialize(&sdcard2blkdev); |
|
280 | { | |
244 |
|
|
281 | if(mbropen(&sdcard2blkdev,&sdcard2Part1,1)==MBRnoErr) | |
|
282 | { | |||
|
283 | if(FATnoErr!=fat32open(&sdcard2FAT32part1,&sdcard2Part1)) | |||
|
284 | printf("Can't open fat32 partition 1\n"); | |||
|
285 | } | |||
|
286 | else | |||
|
287 | { | |||
|
288 | printf("Can't open or read MBR\n"); | |||
|
289 | } | |||
|
290 | ||||
|
291 | if(mbropen(&sdcard2blkdev,&sdcard2Part2,2)==MBRnoErr) | |||
|
292 | { | |||
|
293 | if(FATnoErr!=fat32open(&sdcard2FAT32part2,&sdcard2Part2)) | |||
|
294 | printf("Can't open fat32 partition 2\n"); | |||
|
295 | } | |||
|
296 | else | |||
|
297 | { | |||
|
298 | printf("Can't open or read MBR\n"); | |||
|
299 | } | |||
|
300 | ||||
|
301 | if(mbropen(&sdcard2blkdev,&sdcard2Part3,3)==MBRnoErr) | |||
|
302 | { | |||
|
303 | if(FATnoErr!=fat32open(&sdcard2FAT32part3,&sdcard2Part3)) | |||
|
304 | printf("Can't open fat32 partition 3\n"); | |||
|
305 | } | |||
|
306 | else | |||
|
307 | { | |||
|
308 | printf("Can't open or read MBR\n"); | |||
|
309 | } | |||
|
310 | ||||
|
311 | if(mbropen(&sdcard2blkdev,&sdcard2Part4,4)==MBRnoErr) | |||
|
312 | { | |||
|
313 | if(FATnoErr!=fat32open(&sdcard2FAT32part4,&sdcard2Part4)) | |||
|
314 | printf("Can't open fat32 partition 4\n"); | |||
|
315 | } | |||
|
316 | else | |||
|
317 | { | |||
|
318 | printf("Can't open or read MBR\n"); | |||
|
319 | } | |||
|
320 | } | |||
|
321 | else | |||
|
322 | { | |||
|
323 | printf("Can't initialize SDCARD\n"); | |||
|
324 | } | |||
|
325 | } | |||
245 | } |
|
326 | } | |
246 |
|
327 | |||
247 | void vs1052setXCS(char val) |
|
328 | void vs1052setXCS(char val) | |
@@ -251,6 +332,7 void vs1052setXCS(char val) | |||||
251 |
|
332 | |||
252 | void vs1052setXDCS(char val) |
|
333 | void vs1052setXDCS(char val) | |
253 | { |
|
334 | { | |
|
335 | //gpiosetval(LED1,(int)val); | |||
254 | gpiosetval(VS1053xDCS,(int)val); |
|
336 | gpiosetval(VS1053xDCS,(int)val); | |
255 | } |
|
337 | } | |
256 |
|
338 | |||
@@ -285,6 +367,7 char bspsdcardwriteprotected() | |||||
285 |
|
367 | |||
286 | void bspsdcardselect(char YESNO) |
|
368 | void bspsdcardselect(char YESNO) | |
287 | { |
|
369 | { | |
|
370 | // gpiosetval(LED1,(int)YESNO); | |||
288 | if(YESNO) |
|
371 | if(YESNO) | |
289 | gpioclr(SDCARD2CS); |
|
372 | gpioclr(SDCARD2CS); | |
290 | else |
|
373 | else |
@@ -28,7 +28,11 | |||||
28 | #include <spi.h> |
|
28 | #include <spi.h> | |
29 | #include <ili9328.h> |
|
29 | #include <ili9328.h> | |
30 | #include <genericLCD_Controler.h> |
|
30 | #include <genericLCD_Controler.h> | |
|
31 | #include <sdcard-spi.h> | |||
|
32 | #include <sdcard.h> | |||
|
33 | #include <mbr.h> | |||
31 | #include <VS10XX.h> |
|
34 | #include <VS10XX.h> | |
|
35 | #include <fat32.h> | |||
32 |
|
36 | |||
33 | #define __MAX_OPENED_FILES__ 4 |
|
37 | #define __MAX_OPENED_FILES__ 4 | |
34 | #define __FS_ROOT_SIZE__ 4 |
|
38 | #define __FS_ROOT_SIZE__ 4 | |
@@ -37,6 +41,8 | |||||
37 | #define LED1 PC15 |
|
41 | #define LED1 PC15 | |
38 | #define LED2 PC14 |
|
42 | #define LED2 PC14 | |
39 |
|
43 | |||
|
44 | #define BP3 PA0 | |||
|
45 | ||||
40 | #define LCD_RESET PD10 |
|
46 | #define LCD_RESET PD10 | |
41 | #define LCD_BACKL PE11 |
|
47 | #define LCD_BACKL PE11 | |
42 |
|
48 | |||
@@ -65,6 +71,17 extern LCD_t lcd0; | |||||
65 |
|
71 | |||
66 | extern volatile vs10XXDev audioCodec0; |
|
72 | extern volatile vs10XXDev audioCodec0; | |
67 |
|
73 | |||
|
74 | extern sdcardDev sdcard2; | |||
|
75 | extern blkdevice sdcard2blkdev; | |||
|
76 | extern dikpartition sdcard2Part1; | |||
|
77 | extern FAT32fs sdcard2FAT32part1; | |||
|
78 | extern dikpartition sdcard2Part2; | |||
|
79 | extern FAT32fs sdcard2FAT32part2; | |||
|
80 | extern dikpartition sdcard2Part3; | |||
|
81 | extern FAT32fs sdcard2FAT32part3; | |||
|
82 | extern dikpartition sdcard2Part4; | |||
|
83 | extern FAT32fs sdcard2FAT32part4; | |||
|
84 | ||||
68 | extern int bsp_init(); |
|
85 | extern int bsp_init(); | |
69 |
|
86 | |||
70 | extern void bsp_GPIO_init(); |
|
87 | extern void bsp_GPIO_init(); |
@@ -13,9 +13,11 | |||||
13 | #include <fat32.h> |
|
13 | #include <fat32.h> | |
14 | #include <ucdirent.h> |
|
14 | #include <ucdirent.h> | |
15 | #include <string.h> |
|
15 | #include <string.h> | |
|
16 | #include <terminal.h> | |||
16 |
|
17 | |||
17 |
|
18 | |||
18 | extern streamdevice* __opnfiles__[]; |
|
19 | extern streamdevice* __opnfiles__[]; | |
|
20 | char buffer[512]; | |||
19 |
|
21 | |||
20 | void randBoxesDemo() |
|
22 | void randBoxesDemo() | |
21 | { |
|
23 | { | |
@@ -34,70 +36,142 void randBoxesDemo() | |||||
34 | //delay_100us(10); |
|
36 | //delay_100us(10); | |
35 | //for(volatile int i=0;i<(1024*2);i++); |
|
37 | //for(volatile int i=0;i<(1024*2);i++); | |
36 | } |
|
38 | } | |
|
39 | void tryToplay1() | |||
|
40 | { | |||
|
41 | ||||
|
42 | extern FAT32fs sdcard2FAT32part1; | |||
|
43 | extern volatile vs10XXDev audioCodec0; | |||
|
44 | ucdirent root; | |||
|
45 | char direntName[]=" \n"; | |||
|
46 | uint32_t fileLba,nextLba; | |||
|
47 | int i=0; | |||
|
48 | spisetspeed(audioCodec0.SPIdev,2000000); | |||
|
49 | if(DIRENT_noErr==fat32mkdirent(&sdcard2FAT32part1,&root)) | |||
|
50 | { | |||
|
51 | if(DIRENT_noErr==fat32getrootfirstent(&root)) | |||
|
52 | { | |||
|
53 | do{ | |||
|
54 | fat32getdirentname(&root,direntName); | |||
|
55 | printf("%s\n",direntName); | |||
|
56 | nextLba=fat32getdirentlba(&root); | |||
|
57 | printf("Streaming File\n"); | |||
|
58 | do | |||
|
59 | { | |||
|
60 | fileLba = nextLba; | |||
|
61 | if(sdcard2FAT32part1.part->phy->read(sdcard2FAT32part1.part->phy,buffer,fileLba,1)==RES_OK) | |||
|
62 | { | |||
|
63 | for(i=0;i<512;i+=32) | |||
|
64 | { | |||
|
65 | vs10XXstream32bytes(&audioCodec0,buffer+i); | |||
|
66 | } | |||
|
67 | } | |||
|
68 | }while ((fat32nextsectorlba(&sdcard2FAT32part1,fileLba,&nextLba)==DIRENT_noErr) && (!gpiogetval(BP3))); | |||
|
69 | //vs10XXsoftReset(&audioCodec0); | |||
|
70 | while (gpiogetval(BP3))delay_100us(1000); | |||
|
71 | printf("looking for next file\n"); | |||
|
72 | }while (DIRENT_noErr==fat32nextdirent(&root)); | |||
|
73 | } | |||
|
74 | } | |||
|
75 | if(DIRENT_noErr==fat32mkdirent(&sdcard2FAT32part2,&root)) | |||
|
76 | { | |||
|
77 | if(DIRENT_noErr==fat32getrootfirstent(&root)) | |||
|
78 | { | |||
|
79 | fat32getdirentname(&root,direntName); | |||
|
80 | printf("%s\n",direntName); | |||
|
81 | nextLba=fat32getdirentlba(&root); | |||
|
82 | printf("Streaming File\n"); | |||
|
83 | do | |||
|
84 | { | |||
|
85 | fileLba = nextLba; | |||
|
86 | if(sdcard2FAT32part2.part->phy->read(sdcard2FAT32part2.part->phy,buffer,fileLba,1)==RES_OK) | |||
|
87 | { | |||
|
88 | for(i=0;i<512;i+=32) | |||
|
89 | { | |||
|
90 | vs10XXstream32bytes(&audioCodec0,buffer+i); | |||
|
91 | } | |||
|
92 | } | |||
|
93 | }while ((fat32nextsectorlba(&sdcard2FAT32part2,fileLba,&nextLba)==DIRENT_noErr) && (!gpiogetval(BP3))); | |||
|
94 | while (gpiogetval(BP3))delay_100us(1000); | |||
|
95 | } | |||
|
96 | } | |||
|
97 | if(DIRENT_noErr==fat32mkdirent(&sdcard2FAT32part3,&root)) | |||
|
98 | { | |||
|
99 | if(DIRENT_noErr==fat32getrootfirstent(&root)) | |||
|
100 | { | |||
|
101 | fat32getdirentname(&root,direntName); | |||
|
102 | printf("%s\n",direntName); | |||
|
103 | nextLba=fat32getdirentlba(&root); | |||
|
104 | printf("Streaming File\n"); | |||
|
105 | do | |||
|
106 | { | |||
|
107 | fileLba = nextLba; | |||
|
108 | if(sdcard2FAT32part3.part->phy->read(sdcard2FAT32part3.part->phy,buffer,fileLba,1)==RES_OK) | |||
|
109 | { | |||
|
110 | for(i=0;i<512;i+=32) | |||
|
111 | { | |||
|
112 | vs10XXstream32bytes(&audioCodec0,buffer+i); | |||
|
113 | } | |||
|
114 | } | |||
|
115 | }while ((fat32nextsectorlba(&sdcard2FAT32part3,fileLba,&nextLba)==DIRENT_noErr) && (!gpiogetval(BP3))); | |||
|
116 | while (gpiogetval(BP3))delay_100us(1000); | |||
|
117 | } | |||
|
118 | } | |||
|
119 | if(DIRENT_noErr==fat32mkdirent(&sdcard2FAT32part4,&root)) | |||
|
120 | { | |||
|
121 | if(DIRENT_noErr==fat32getrootfirstent(&root)) | |||
|
122 | { | |||
|
123 | fat32getdirentname(&root,direntName); | |||
|
124 | printf("%s\n",direntName); | |||
|
125 | nextLba=fat32getdirentlba(&root); | |||
|
126 | printf("Streaming File\n"); | |||
|
127 | do | |||
|
128 | { | |||
|
129 | fileLba = nextLba; | |||
|
130 | if(sdcard2FAT32part4.part->phy->read(sdcard2FAT32part4.part->phy,buffer,fileLba,1)==RES_OK) | |||
|
131 | { | |||
|
132 | for(i=0;i<512;i+=32) | |||
|
133 | { | |||
|
134 | vs10XXstream32bytes(&audioCodec0,buffer+i); | |||
|
135 | } | |||
|
136 | } | |||
|
137 | }while ((fat32nextsectorlba(&sdcard2FAT32part4,fileLba,&nextLba)==DIRENT_noErr) && (!gpiogetval(BP3))); | |||
|
138 | while (gpiogetval(BP3))delay_100us(1000); | |||
|
139 | } | |||
|
140 | } | |||
|
141 | } | |||
|
142 | void tryToplay2() | |||
|
143 | { | |||
|
144 | ||||
|
145 | extern blkdevice sdcard2blkdev; | |||
|
146 | int i=0,l=0; | |||
|
147 | ||||
|
148 | spisetspeed(audioCodec0.SPIdev,4000000); | |||
|
149 | printf("Streaming File\n"); | |||
|
150 | ||||
|
151 | //printf("New LBA=0x%X\n",nextLba); | |||
|
152 | ||||
|
153 | while(sdcard2blkdev.read(&sdcard2blkdev,buffer,l++,1)==RES_OK) | |||
|
154 | { | |||
|
155 | ||||
|
156 | for(i=0;i<512;i+=32) | |||
|
157 | { | |||
|
158 | vs10XXstream32bytes(&audioCodec0,buffer+i); | |||
|
159 | } | |||
|
160 | } | |||
|
161 | } | |||
37 |
|
162 | |||
38 | int main() |
|
163 | int main() | |
39 | { |
|
164 | { | |
40 | while(!bspsdcardpresent()); |
|
165 | extern terminal_t terminal0; | |
41 | delay_100us(5000); |
|
166 | extern volatile vs10XXDev audioCodec0; | |
42 | printf("About to initialize SDCARD"); |
|
167 | printf("Volume=0x%x\n",vs10XXcmdread(&audioCodec0,VSVOL)); | |
43 | sdcardDev sdcard2; |
|
168 | vs10XXcmdwrite(&audioCodec0,VSCLOCKF,0x2000); | |
44 | blkdevice sdcard2blkdev; |
|
169 | vs10XXcmdwrite(&audioCodec0,VSVOL,0x2222); | |
45 | dikpartition sdcard2Part1; |
|
170 | printf("VSCLOCKF=0x%x\n",vs10XXcmdread(&audioCodec0,VSCLOCKF)); | |
46 | FAT32fs partoche; |
|
171 | printf("VSMODE=0x%x\n",vs10XXcmdread(&audioCodec0,VSMODE)); | |
47 | sdcardspimake(&sdcard2,(UHANDLE)SDCARD2SPI,spigetnc,spiputnc,spisetspeed,spigetspeed); |
|
172 | terminal_clear(&terminal0); | |
48 | sdcardspimakeblkdev(&sdcard2blkdev,&sdcard2,bspsdcardselect,bsppowersdcard,bspsdcardpresent,bspsdcardwriteprotected); |
|
173 | // tryToplay2(); | |
49 | sdcard2blkdev.initialize(&sdcard2blkdev); |
|
174 | tryToplay1(); | |
50 | mbropen(&sdcard2blkdev,&sdcard2Part1,1); |
|
|||
51 | if(FATnoErr==fat32open(&partoche,&sdcard2Part1)) |
|
|||
52 | { |
|
|||
53 | printf("FAT32 partition opened\n"); |
|
|||
54 | char test[]=" \n"; |
|
|||
55 | ucdirent root,folder; |
|
|||
56 | fat32mkdirent(&partoche,&root); |
|
|||
57 | fat32getrootfirstent(&root); |
|
|||
58 | fat32getVolName(&partoche,test); |
|
|||
59 | printf("Vol Name=%s\n",test); |
|
|||
60 | fat32getdirentname(&root,test); |
|
|||
61 | printf("%s\n",test); |
|
|||
62 | while (DIRENT_EndOfDir!=fat32nextdirent(&root)) |
|
|||
63 | { |
|
|||
64 | if(test[0]=='m') |
|
|||
65 | { |
|
|||
66 | printf("enter music folder\n"); |
|
|||
67 | fat32enterdirent(&root,&folder); |
|
|||
68 | while (DIRENT_EndOfDir!=fat32nextdirent(&folder)) |
|
|||
69 | { |
|
|||
70 | printf("%s\n",test); |
|
|||
71 | } |
|
|||
72 | } |
|
|||
73 | fat32getdirentname(&root,test); |
|
|||
74 | printf("%s\n",test); |
|
|||
75 | } |
|
|||
76 | if(test[0]=='m') |
|
|||
77 | { |
|
|||
78 | printf("enter music folder\n"); |
|
|||
79 | fat32enterdirent(&root,&folder); |
|
|||
80 | while (DIRENT_EndOfDir!=fat32nextdirent(&folder)) |
|
|||
81 | { |
|
|||
82 | printf("%s\n",test); |
|
|||
83 | } |
|
|||
84 | } |
|
|||
85 | } |
|
|||
86 | while(1) |
|
|||
87 | { |
|
|||
88 | // printf("Audio Codec reg0=0x%x\n",vs10XXcmdread(&audioCodec0,0)); |
|
|||
89 | // printf("hello "); |
|
|||
90 | // bsp_lcd0_write_reg(1,0x1234); |
|
|||
91 | // delay_100us(10000); |
|
|||
92 | // randBoxesDemo(); |
|
|||
93 |
|
||||
94 | gpioset(LED1); |
|
|||
95 | delay_100us(10000); |
|
|||
96 | gpioclr(LED1); |
|
|||
97 | delay_100us(10000); |
|
|||
98 |
|
||||
99 | } |
|
|||
100 | printf("hello world\n\r"); |
|
|||
101 | return 0; |
|
175 | return 0; | |
102 | } |
|
176 | } | |
103 |
|
177 |
@@ -22,6 +22,7 | |||||
22 | #include <spi.h> |
|
22 | #include <spi.h> | |
23 | #include <VS10XX.h> |
|
23 | #include <VS10XX.h> | |
24 | #include <core.h> |
|
24 | #include <core.h> | |
|
25 | #include <stdio.h> | |||
25 | //#include <bsp.h> |
|
26 | //#include <bsp.h> | |
26 |
|
27 | |||
27 | void vs10XXopen(vs10XXDev *codec, spi_t dev, void (*setxCS)(char), void (*setxRST)(char), void (*setxDCS)(char), int (*getDREQ)()) |
|
28 | void vs10XXopen(vs10XXDev *codec, spi_t dev, void (*setxCS)(char), void (*setxRST)(char), void (*setxDCS)(char), int (*getDREQ)()) | |
@@ -36,6 +37,38 void vs10XXopen(vs10XXDev *codec, spi_t | |||||
36 | codec->setxRST(0); |
|
37 | codec->setxRST(0); | |
37 | delay_100us(2); |
|
38 | delay_100us(2); | |
38 | codec->setxRST(1); |
|
39 | codec->setxRST(1); | |
|
40 | int status; | |||
|
41 | do{ | |||
|
42 | status= vs10XXcmdread(codec,VSSTATUS); | |||
|
43 | }while (status==0xc); | |||
|
44 | printf("Status=0x%x\n",status); | |||
|
45 | status = (status>>4) & 0xF; | |||
|
46 | switch (status) { | |||
|
47 | case 0: | |||
|
48 | codec->VERSION = VS1001; | |||
|
49 | break; | |||
|
50 | case 1: | |||
|
51 | codec->VERSION = VS1011; | |||
|
52 | break; | |||
|
53 | case 2: | |||
|
54 | codec->VERSION = VS1002; | |||
|
55 | break; | |||
|
56 | case 3: | |||
|
57 | codec->VERSION = VS1003; | |||
|
58 | break; | |||
|
59 | case 4: | |||
|
60 | codec->VERSION = VS1053; | |||
|
61 | break; | |||
|
62 | case 5: | |||
|
63 | codec->VERSION = VS1033; | |||
|
64 | break; | |||
|
65 | case 7: | |||
|
66 | codec->VERSION = VS1103; | |||
|
67 | break; | |||
|
68 | default: | |||
|
69 | codec->VERSION = UNKNOWN; | |||
|
70 | break; | |||
|
71 | } | |||
39 | } |
|
72 | } | |
40 |
|
73 | |||
41 | void vs10XXsoftreset(vs10XXDev* dev) |
|
74 | void vs10XXsoftreset(vs10XXDev* dev) | |
@@ -43,6 +76,24 void vs10XXsoftreset(vs10XXDev* dev) | |||||
43 | vs10XXcmdwrite(dev,VSMODE,(1<<2)); |
|
76 | vs10XXcmdwrite(dev,VSMODE,(1<<2)); | |
44 | } |
|
77 | } | |
45 |
|
78 | |||
|
79 | void vs10XXsetCansel(vs10XXDev* dev) | |||
|
80 | { | |||
|
81 | int mode=vs10XXcmdread(dev,VSMODE); | |||
|
82 | vs10XXcmdwrite(dev,VSMODE,mode|8); | |||
|
83 | } | |||
|
84 | ||||
|
85 | void vs10XXsoftReset(vs10XXDev* dev) | |||
|
86 | { | |||
|
87 | int mode=vs10XXcmdread(dev,VSMODE); | |||
|
88 | vs10XXcmdwrite(dev,VSMODE,mode|4); | |||
|
89 | } | |||
|
90 | ||||
|
91 | int vs10XXcanselAccepted(vs10XXDev* dev) | |||
|
92 | { | |||
|
93 | int mode=vs10XXcmdread(dev,VSMODE); | |||
|
94 | return ((mode & 8)!=8); | |||
|
95 | } | |||
|
96 | ||||
46 | int vs10XXcmdread(vs10XXDev* dev,char address) |
|
97 | int vs10XXcmdread(vs10XXDev* dev,char address) | |
47 | { |
|
98 | { | |
48 | int result; |
|
99 | int result; | |
@@ -68,5 +119,14 void vs10XXcmdwrite(vs10XXDev* dev,char | |||||
68 | } |
|
119 | } | |
69 |
|
120 | |||
70 |
|
121 | |||
|
122 | void vs10XXstream32bytes(vs10XXDev* dev,char* buffer) | |||
|
123 | { | |||
|
124 | while(!dev->getDREQ()); | |||
|
125 | dev->setxCS(1); | |||
|
126 | dev->setxDCS(0); | |||
|
127 | spiputnc(dev->SPIdev,buffer,32); | |||
|
128 | dev->setxDCS(1); | |||
|
129 | ||||
|
130 | } | |||
71 |
|
131 | |||
72 |
|
132 |
@@ -102,7 +102,7 int fat32enterdirent(ucdirent* currenten | |||||
102 | int fat32nextdirent(ucdirent* entry) |
|
102 | int fat32nextdirent(ucdirent* entry) | |
103 | { |
|
103 | { | |
104 | uint32_t n=0,res=DIRENT_noErr,k,j; |
|
104 | uint32_t n=0,res=DIRENT_noErr,k,j; | |
105 |
|
|
105 | k=(0xFF&((signed char)entry->Currententry)+1)*32; /*Restart at last dir entry*/ | |
106 | j=entry->CurrentSec;// /*Restart at last sector*/ |
|
106 | j=entry->CurrentSec;// /*Restart at last sector*/ | |
107 | do |
|
107 | do | |
108 | { |
|
108 | { | |
@@ -114,7 +114,7 int fat32nextdirent(ucdirent* entry) | |||||
114 | if(fat32buff[DIR_Nameoff+k]==(char)0) |
|
114 | if(fat32buff[DIR_Nameoff+k]==(char)0) | |
115 | return DIRENT_EndOfDir; /*0x00 = end of dir*/ |
|
115 | return DIRENT_EndOfDir; /*0x00 = end of dir*/ | |
116 | else |
|
116 | else | |
117 | if((fat32buff[DIR_Attroff + k]==ATTR_DIRECTORY)||(fat32buff[DIR_Attroff + k]==ATTR_ARCHIVE)||(fat32buff[DIR_Attroff + k]==(ATTR_READ_ONLY))) |
|
117 | if((fat32buff[DIR_Attroff + k]==(char)ATTR_DIRECTORY)||(fat32buff[DIR_Attroff + k]==(char)ATTR_ARCHIVE)||(fat32buff[DIR_Attroff + k]==(char)(ATTR_READ_ONLY))) | |
118 | { |
|
118 | { | |
119 | for(n=0;n<16;n++)entry->DIR_Name[n] = '\0'; |
|
119 | for(n=0;n<16;n++)entry->DIR_Name[n] = '\0'; | |
120 | for(n=0;n<11;n++)entry->DIR_Name[n] = fat32buff[n+DIR_Nameoff + k]; |
|
120 | for(n=0;n<11;n++)entry->DIR_Name[n] = fat32buff[n+DIR_Nameoff + k]; | |
@@ -233,18 +233,28 uint32_t fat32getdirentlba(ucdirent* ent | |||||
233 | int fat32nextsectorlba(FAT32fs* fs,uint32_t lastsector_lba,uint32_t *nextsector_lba) |
|
233 | int fat32nextsectorlba(FAT32fs* fs,uint32_t lastsector_lba,uint32_t *nextsector_lba) | |
234 | { |
|
234 | { | |
235 |
|
235 | |||
236 | if(((lastsector_lba + 1 - fs->cluster_begin_lba) & (fs->BPB_SecPerClus-1))!=0) /*Is it the last sector of the cluster?*/ |
|
236 | if(((lastsector_lba + 1 - fs->cluster_begin_lba) & ((uint32_t)(fs->BPB_SecPerClus)-1))!=0) /*Is it the last sector of the cluster?*/ | |
237 | { |
|
237 | { | |
238 | *nextsector_lba = lastsector_lba+1; /*if not just increment lba*/ |
|
238 | *nextsector_lba = lastsector_lba+1; /*if not just increment lba*/ | |
239 | return DIRENT_noErr; |
|
239 | return DIRENT_noErr; | |
240 | } |
|
240 | } | |
|
241 | ||||
241 | uint32_t clusternum=fat32sectorlbatoclusternum(fs,lastsector_lba); /*Get cluster Number from sector number*/ |
|
242 | uint32_t clusternum=fat32sectorlbatoclusternum(fs,lastsector_lba); /*Get cluster Number from sector number*/ | |
242 | uint32_t fatsec=fat32clusterinfatsect(fs,clusternum); /*Get FAT sector number*/ |
|
243 | uint32_t fatsec=fat32clusterinfatsect(fs,clusternum); /*Get FAT sector number*/ | |
243 | fat32sectorreadout(fs,fatsec); |
|
244 | fat32sectorreadout(fs,fatsec); | |
244 | int i= fat32clusterinfatoff(clusternum); |
|
245 | int i= fat32clusterinfatoff(clusternum); | |
245 | *nextsector_lba=fat32Ui8_2_Ui32(fat32buff,i); |
|
246 | *nextsector_lba=fat32Ui8_2_Ui32(fat32buff,i); | |
246 |
if(*nextsector_lba==0xFFFFFFF7) |
|
247 | if(*nextsector_lba==0xFFFFFFF7) | |
247 | if(*nextsector_lba>=0xFFFFFFF6)return DIRENT_LastSect; |
|
248 | { | |
|
249 | ||||
|
250 | printf("DIRENT_BadSect\n"); | |||
|
251 | return DIRENT_BadSect; | |||
|
252 | } | |||
|
253 | if((uint32_t)(*nextsector_lba)>=(uint32_t)0xFFFFFFF6) | |||
|
254 | { | |||
|
255 | printf("DIRENT_LastSect\n"); | |||
|
256 | return DIRENT_LastSect; | |||
|
257 | } | |||
248 | *nextsector_lba = clusterlba(fs,*nextsector_lba); |
|
258 | *nextsector_lba = clusterlba(fs,*nextsector_lba); | |
249 | return DIRENT_noErr; |
|
259 | return DIRENT_noErr; | |
250 | } |
|
260 | } |
@@ -15,3 +15,6 UCMODEL=stm32f4 | |||||
15 | target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL |
|
15 | target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL | |
16 | INSTALLS += target |
|
16 | INSTALLS += target | |
17 |
|
17 | |||
|
18 | HEADERS += \ | |||
|
19 | ../../../includes/fat32.h | |||
|
20 |
@@ -202,7 +202,7 DSTATUS sdcarddisk_initialize (blkdevice | |||||
202 | return ((sdcardDev*)_this->phy)->Stat; |
|
202 | return ((sdcardDev*)_this->phy)->Stat; | |
203 | } |
|
203 | } | |
204 | printf("SDCARD Detected\n"); |
|
204 | printf("SDCARD Detected\n"); | |
205 |
|
|
205 | for (n = 100; n; n--) ((sdcardDev*)_this->phy)->xmit_mmc(((sdcardDev*)_this->phy)->phy,&dummy, 1); /* Send 80 dummy clocks */ | |
206 |
|
206 | |||
207 | ty = 0; |
|
207 | ty = 0; | |
208 | if (sdcardsend_cmd(_this,CMD0, 0) == 1) { /* Put the card SPI/Idle state */ |
|
208 | if (sdcardsend_cmd(_this,CMD0, 0) == 1) { /* Put the card SPI/Idle state */ |
@@ -134,6 +134,7 int terminal_writenc(terminal_t* termina | |||||
134 | { |
|
134 | { | |
135 | terminal->line= (terminal->line+1) % terminal->lineCount; |
|
135 | terminal->line= (terminal->line+1) % terminal->lineCount; | |
136 | terminal->column = 0; |
|
136 | terminal->column = 0; | |
|
137 | terminal_clearCurentLine(terminal); | |||
137 | }else { |
|
138 | }else { | |
138 | if(buffer[0]=='\t') |
|
139 | if(buffer[0]=='\t') | |
139 | { |
|
140 | { |
@@ -41,6 +41,18 | |||||
41 | #define VSAICTRL2 0xE |
|
41 | #define VSAICTRL2 0xE | |
42 | #define VSAICTRL3 0xF |
|
42 | #define VSAICTRL3 0xF | |
43 |
|
43 | |||
|
44 | typedef enum VS10XXVER_en | |||
|
45 | { | |||
|
46 | UNKNOWN, | |||
|
47 | VS1001, | |||
|
48 | VS1011, | |||
|
49 | VS1002, | |||
|
50 | VS1003, | |||
|
51 | VS1053, | |||
|
52 | VS1033, | |||
|
53 | VS1103 | |||
|
54 | }VS10XXVER_en; | |||
|
55 | ||||
44 | typedef struct vs10XXDev |
|
56 | typedef struct vs10XXDev | |
45 | { |
|
57 | { | |
46 | spi_t SPIdev; |
|
58 | spi_t SPIdev; | |
@@ -48,7 +60,7 typedef struct vs10XXDev | |||||
48 | void (*setxRST)(char); |
|
60 | void (*setxRST)(char); | |
49 | void (*setxDCS)(char); |
|
61 | void (*setxDCS)(char); | |
50 | int (*getDREQ)(); |
|
62 | int (*getDREQ)(); | |
51 | int a; |
|
63 | VS10XXVER_en VERSION; | |
52 | }vs10XXDev; |
|
64 | }vs10XXDev; | |
53 |
|
65 | |||
54 |
|
66 | |||
@@ -56,10 +68,13 void vs10XXopen(vs10XXDev* codec,spi_t d | |||||
56 | void vs10XXsoftreset(vs10XXDev* dev); |
|
68 | void vs10XXsoftreset(vs10XXDev* dev); | |
57 | int vs10XXcmdread(vs10XXDev* dev,char address); |
|
69 | int vs10XXcmdread(vs10XXDev* dev,char address); | |
58 | void vs10XXcmdwrite(vs10XXDev* dev,char address,int value); |
|
70 | void vs10XXcmdwrite(vs10XXDev* dev,char address,int value); | |
59 |
|
71 | void vs10XXstream32bytes(vs10XXDev* dev,char* buffer); | ||
60 | extern void vs10XXclearXCS(); |
|
72 | void vs10XXsetCansel(vs10XXDev* dev); | |
61 | extern void vs10XXsetXCS(); |
|
73 | int vs10XXcanselAccepted(vs10XXDev* dev); | |
62 | extern int vs10XXDREQ(); |
|
74 | void vs10XXsoftReset(vs10XXDev* dev); | |
|
75 | //extern void vs10XXclearXCS(); | |||
|
76 | //extern void vs10XXsetXCS(); | |||
|
77 | //extern int vs10XXDREQ(); | |||
63 |
|
78 | |||
64 | #endif //VS10XX_H |
|
79 | #endif //VS10XX_H | |
65 |
|
80 |
@@ -116,7 +116,7 typedef struct FAT32fs | |||||
116 |
|
116 | |||
117 | //#define fat32clusterinfatsect(fs,cluster_number) ((((uint32_t)(cluster_number))>>6) + fs->fat_begin_lba) |
|
117 | //#define fat32clusterinfatsect(fs,cluster_number) ((((uint32_t)(cluster_number))>>6) + fs->fat_begin_lba) | |
118 | #define fat32clusterinfatsect(fs,cluster_number) ((((uint32_t)(cluster_number))>>7) + fs->fat_begin_lba) |
|
118 | #define fat32clusterinfatsect(fs,cluster_number) ((((uint32_t)(cluster_number))>>7) + fs->fat_begin_lba) | |
119 |
#define fat32clusterinfatoff(cluster_number) (((cluster_number)&0x |
|
119 | #define fat32clusterinfatoff(cluster_number) (((cluster_number)&0x7F)*4) | |
120 |
|
120 | |||
121 | /*Get cluster index in FAT Table from sector address*/ |
|
121 | /*Get cluster index in FAT Table from sector address*/ | |
122 | #define fat32masksectorlba(sectorlba,fs) (sectorlba & (castUI32(-1)^castUI32(fs->BPB_SecPerClus-1))) |
|
122 | #define fat32masksectorlba(sectorlba,fs) (sectorlba & (castUI32(-1)^castUI32(fs->BPB_SecPerClus-1))) |
General Comments 0
You need to be logged in to leave comments.
Login now