/*************************************** 以下、ソースのオリジナル作者様のサイトより転記。GREIF Softwareによる改変分もこれに準じます。 Copyright (C) 2007, Nobutaka Kito, all right reserved. * Network Appliance 2 ソフトウエアはフリー・ソフトウェアであり、また無保証です。 * 用途に制限はありません。あなたの責任の下において、個人的・非営利的な ものから商用製品の開発に及ぶ目的に使用・改変・再配布することができます。 * ソース・コードを再配布するときは、上記の著作権表示を保持しなければなりません。 ***************************************/ /*************************************** NA2/src/vs1011e_io.h MP3デコーダのピンアサインに合わせ、以下を変更 ***************************************/ /* --------------------------------------- dir vs1011e H8 Board EasyMP3 --------------------------------------- OUT SO PA0 CN1-25 no.4 IN SI PA1 CN1-26 no.5 IN SCLK PA2 CN1-27 no.6 IN NXCS PA3 CN1-28 no.7 IN NXRESET PA4 CN1-29 no.8 IN NXDCS PA5 CN1-30 no.9 OUT DREQ P80 CN1-20 no.11 --------------------------------------- */ #define VS1011E_BIT_RVOUT 0 // SO : PA0 #define VS1011E_BIT_VIN 1 // SI : PA1 #define VS1011E_BIT_CLK 2 // SCLK : PA2 #define VS1011E_BIT_DREQ 0 // DREQ : P80 #define VS1011E_BIT_nCS 3 // NXCS : PA3 #define VS1011E_BIT_nRESET 4 // NXRESET: PA4 #define VS1011E_BIT_nDCS 5 // NXDCS : PA5 … #define VS1011E_STAT_DREQ (P8DR.BYTE & VS1011E_DREQ) /*************************************** NA2/src/vs1011e_access.h #define _MACRO_ONLY の下に、以下を追加(ソースを継ぎはいだもので、型宣言が不統一です。必要なら合わせ込んで下さい。) ***************************************/ void vswrite(unsigned char s); int vsread(); /*************************************** NA2/src/vs1011e_access.c 全面変更(ソースを継ぎはいだもので、型宣言やピン指定が不統一です。必要なら合わせ込んで下さい。) ***************************************/ /* MP3データ送出部のオリジナルは、EasyMP3(ストロベリーリナックス製)サンプルプログラムによるものです。*/ /* * h8mp3 player [VS1001K] * Copyright (c) 2003 Masahiro Ochiai * * Ref. VLSI VS1001K data sheet. * * */ #include #include #include "kernel_id.h" #include "spi.h" #include "vs1011e_io.h" B vs1011e_spi_speed=4; #define BBR_SLOW ({sil_wrb_mem((VP)(H8SCI2 + H8BRR), 4); }) #define BBR_MID ({sil_wrb_mem((VP)(H8SCI2 + H8BRR), vs1011e_spi_speed); }) #define BBR_FAST ({sil_wrb_mem((VP)(H8SCI2 + H8BRR), 0x00); }) #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(&PADR, 1); \ } else { \ BITCLR(&PADR, 1); \ } \ BITSET(&PADR, 2); \ BITCLR(&PADR, 2); \ } void 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++){ PADR.BYTE = 0x14; dat = (dat<<1) + ((PADR.BYTE&1) ? 1 : 0); PADR.BYTE = 0x10; } return dat; } void sci_write(UB addr, UH dat) { while((P8DR.BYTE & 0x01) != 0x01); // Wait for DREQ High PADR.BYTE = 0x38; // xRESET High + xDCS High + xCS High PADR.BYTE = 0x30; // xCS Low vswrite(0x02); vswrite(addr); vswrite(dat>>8); vswrite(dat); PADR.BYTE = 0x38; // xCS High } UH sci_read(UB addr) { UH dat; while((P8DR.BYTE & 0x01) != 0x01); // Wait for DREQ High PADR.BYTE = 0x38; // xRESET High + xDCS High + xCS High PADR.BYTE = 0x30; // xCS Low vswrite(0x03); vswrite(addr); dat = vsread(); PADR.BYTE = 0x38; // xCS High return dat; } void sdi_write(UB s) { while((P8DR.BYTE & 0x01) != 0x01); // Wait for DREQ High PADR.BYTE = 0x38; // xRESET High + xDCS High + xCS High PADR.BYTE = 0x18; // xDCS Low vswrite(s); PADR.BYTE = 0x38; // xDCS High } void sdi_write_block(B *buf, UH size) { UH i; UH ii; for(i=0; i