// // filetest.c // Version 1.0 // // Created by GREIF Software on 08/12/01. // // MP3 Module Test Program // // あらかじめsample.mp3をH8に転送しておく必要があります。 // // ポートの割り付けは、以下のとおりです。 // 行きがかり上、DREQはPort8を使っていますが、Port4でも問題ないと思われます。 // 同じく行きがかり上、Port4_6が空きとなっていますが、必要なら詰めて下さい。 // // ポートの割り付け // Port4_0...SO // Port4_1...SI / SDATA // Port4_2...SCLK // Port4_3...xCS // Port4_4...xRESET // Port4_5...BSYNC // Port4_6...(NO USE) // Port4_7...DCLK // // Port8_0...DREQ(DREQはH8から見て入力なので、ほぼ、どこのポートでも使える。) // #include #include #include #include unsigned char mp3[500000]; #define BITSET(a, b) asm volatile ("bset.b %0,@%c1:8" ::"g" (b), "g" (a) ) #define BITCLR(a, b) asm volatile ("bclr.b %0,@%c1:8" ::"g" (b), "g" (a) ) #define BITOUT(x) { \ if(x){ \ BITSET(&P4DR, 1); \ } else { \ BITCLR(&P4DR, 1); \ } \ BITSET(&P4DR, 2); \ BITCLR(&P4DR, 2); \ } #define BITOUT2(x) { \ if(x){ \ BITSET(&P4DR, 1); \ } else { \ BITCLR(&P4DR, 1); \ } \ BITSET(&P4DR, 7); \ BITCLR(&P4DR, 7); \ BITCLR(&P4DR, 5); \ } int vswrite(unsigned char s) { BITOUT(s & 0x80); BITOUT(s & 0x40); BITOUT(s & 0x20); BITOUT(s & 0x10); BITOUT(s & 0x08); BITOUT(s & 0x04); BITOUT(s & 0x02); BITOUT(s & 0x01); } int vsread() { int i,dat; dat = 0; for(i=0;i<16;i++){ P4DR = 0x14; dat = (dat<<1) + ((P4DR&1) ? 1 : 0); P4DR = 0x10; } return dat; } int sci_write(unsigned int addr, unsigned int dat) { while((P8DR & 0x01) != 0x01); // Wait for DREQ High P4DR = 0x18; // BSYNC Low + xRESET High + xCS High P4DR = 0x10; // xCS Low vswrite(0x02); vswrite(addr); vswrite(dat>>8); vswrite(dat); P4DR = 0x18; // xCS High return 0; } int sci_read(unsigned int addr) { int dat; while((P8DR & 0x01) != 0x01); // Wait for DREQ High P4DR = 0x18; // BSYNC Low + xRESET High + xCS High P4DR = 0x10; // xCS Low vswrite(0x03); vswrite(addr); dat = vsread(); P4DR = 0x18; // xCS High return dat; } int sdi_write(unsigned char s) { while((P8DR & 0x01) != 0x01); // Wait for DREQ High P4DR = 0x38; // BSYNC High BITOUT2(s & 0x80); // ここの終了時点でBSYNCはLowに落ちている BITOUT2(s & 0x40); BITOUT2(s & 0x20); BITOUT2(s & 0x10); BITOUT2(s & 0x08); BITOUT2(s & 0x04); BITOUT2(s & 0x02); BITOUT2(s & 0x01); // BSYNCのLow化は、既に実行済みのため、ここでは行わない } wait(int n) { int i; for(i=0;i