nlgplay for mbed
Dependencies: SDFileSystemEx mbed
Diff: main.cpp
- Revision:
- 7:7e183b33c3f9
- Parent:
- 6:e48296dca6bb
- Child:
- 8:88c89fd324bd
--- a/main.cpp Mon Aug 18 00:59:38 2014 +0000 +++ b/main.cpp Mon Aug 18 22:32:46 2014 +0000 @@ -2,6 +2,8 @@ #include "SDFileSystem.h" #include "lcd.h" +// #define USE_NBV3 + // (pinname, initial value) DigitalOut io01(dp13, 0); DigitalOut io02(dp26, 0); @@ -55,10 +57,14 @@ #define DBS io01 #define CTS io02 +#define IO_A0 io05 +#define IO_WR io06 + + #define _WAIT for(int wcnt=0; wcnt < 2; wcnt++) // 16bit output -void ioShiftOut(unsigned int data) +inline void ioShiftOut(unsigned int data) { int i; @@ -101,8 +107,29 @@ /* アクティブローの制御信号 */ #define ACTLOW (CS_PSG | CS_FM1 | CS_FM2 | WR | ICL) +#ifdef USE_NBV3 +/* 16bit出力 */ +void regOutBase(int addr, int data,int select) +{ + /* アドレスを出力 */ + /* A0をローにして待つ */ + IO_A0 = 0; + ioShiftOut((addr << 8) | (ACTLOW & ~(select | WR))); + ioShiftOut((addr << 8) | (ACTLOW)); + + + /* チップ側の処理を待つ */ + + /* データを出力 */ + /* A0をハイにして待つ */ + IO_A0 = 1; + ioShiftOut((data << 8) | (ACTLOW & ~(select | WR))); + ioShiftOut((data << 8) | (ACTLOW)); -/* 出力 */ + /* 処理を待つ */ +} +#else +/* NBV2互換出力 */ void regOutBase(int addr, int data,int select) { /* アドレスを出力 */ @@ -111,11 +138,7 @@ ioShiftOut((addr << 8) | (ACTLOW & ~(select | WR))); ioShiftOut((addr << 8) | (ACTLOW)); - - /* チップ側の処理を待つ */ - // if (!(select & CS_PSG)) - // wait_us(10); - + /* チップ処理待ち */ /* データを出力 */ /* A0をハイにして待つ */ @@ -123,10 +146,9 @@ ioShiftOut((data << 8) | A0 | (ACTLOW & ~(select | WR))); ioShiftOut((data << 8) | A0 | (ACTLOW)); - /* wait if FM */ - // if (!(select & CS_PSG)) - // wait_us(10); + /* チップ処理待ち */ } +#endif /* PSG出力 */ void regPSGOut(int addr, int data) @@ -161,19 +183,26 @@ regPSGOut(0x09, 0x00); // CH.B 0 regPSGOut(0x0a, 0x00); // CH.C 0 - /* FM音源初期化 */ + /* MUTE(disable) */ for(i = 0x20; i < 0x28; i++) { regFMOut(i, 0x00); regFM2Out(i, 0x00); } - // key off + // KEYOFF for(i = 0x00; i < 0x08; i++) { regFMOut(0x08, i & 0x07); regFM2Out(0x08, i & 0x07); } + + // FORCE RELEASE + for(i= 0x00; i < 0x20; i++) + { + regFMOut(0xE0 + i, 0x0f); + regFM2Out(0xE0 + i, 0x0f); + } } @@ -691,9 +720,7 @@ /* NLGの初期化 */ if (initNLG(&n, nlg_file) < 0) { - lcd_setCursor(0,1); - lcd_printStr("ERROR!!"); - + lcd_printStrY(1, " ERROR!!"); printf("Failed to init.\n"); return -1; } @@ -768,8 +795,8 @@ // void putTitle() { - lcd_printStr2("NBCTRL", "Ver 1.10"); - wait(3); + lcd_printStr2("NBCTRL", "Ver 1.11"); + wait(1.5); } // @@ -786,7 +813,7 @@ wait_ms(20); // reset SHIFT REGISTER - ioShiftOut(( 0xFF << 8) | (ACTLOW)); + ioShiftOut((0xFF << 8) | (ACTLOW)); lcd_init(); @@ -810,13 +837,8 @@ t.reset(); t.start(); - ioShiftOut(( 0x68 << 8) | (ACTLOW)); - ioShiftOut(( 0x68 << 8) | (ACTLOW)); - ioShiftOut(( 0x68 << 8) | (ACTLOW)); - - ioShiftOut(( 0x68 << 8) | (ACTLOW)); - ioShiftOut(( 0x68 << 8) | (ACTLOW)); - ioShiftOut(( 0x68 << 8) | (ACTLOW)); + // actual timing + regFMOut(0x20, 0x00); result_us = t.read_us(); t.stop(); @@ -835,7 +857,6 @@ lcd_printStrY(1, buf); wait(3); - if (files < 0) lcd_printStrY(1, "NO FILES"); else @@ -848,6 +869,7 @@ lcd_cls(); } + bool repeat_flag = false; int idx = 0; while(files > 0) { @@ -883,13 +905,20 @@ // wait any button is pressed waitButtonPress(); - if (!sw_play) { + // + if (!sw_prev) { lcd_printStrY(1, " PREV "); g_prev = true; } - else + if (!sw_play) + { + lcd_printStrY(1, " PLAY "); + repeat_flag = true; + } + if (!sw_next) { lcd_printStrY(1, " NEXT "); + repeat_flag = false; } // wait release @@ -908,13 +937,17 @@ idx--; else idx = files - 1; + + continue; } - else + + if (!repeat_flag) { if (idx + 1 < files) idx++; else idx = 0; } + repeat_flag = false; } }