void vs_init(void) { DEBUGOUT("VS: init\n"); vs_playing = 0; //reset vs buffer vs_bufreset(); //reset vs vs_reset(); //set volume, bass, treble vs_setvolume(DEFAULT_VOLUME); vs_setbassfreq(DEFAULT_BASSFREQ); vs_setbassamp(DEFAULT_BASSAMP); vs_settreblefreq(DEFAULT_TREBLEFREQ); vs_settrebleamp(DEFAULT_TREBLEAMP); //init pin interrupt GPIOIntTypeSet(GPIO_PORTA_BASE, GPIO_PIN_1, GPIO_HIGH_LEVEL); GPIOPortIntRegister(GPIO_PORTA_BASE, vs_requesthandler); return; }
void vs_init(int unit) { vs_status[unit].vs_playing = 0; //reset vs buffer vs_bufreset(unit); //reset vs vs_reset(); //set volume, bass, treble vs_setvolume(unit, DEFAULT_VOLUME); vs_setbassfreq(unit, DEFAULT_BASSFREQ); vs_setbassamp(unit, DEFAULT_BASSAMP); vs_settreblefreq(unit, DEFAULT_TREBLEFREQ); vs_settrebleamp(unit, DEFAULT_TREBLEAMP); //init pin interrupt //TODO: needs change - init interrupts by unit //GPIOIntTypeSet(GPIO_PORTA_BASE, GPIO_PIN_1, GPIO_HIGH_LEVEL); //GPIOPortIntRegister(GPIO_PORTA_BASE, vs_requesthandler); return; }
void vs_stopstream(void) { unsigned int i, timeout; vs_pause(); vs_ssi_wait(); //wait for transfer complete VS_DCS_DISABLE(); VS_CS_DISABLE(); //cancel playback vs_write_reg(VS_MODE, SM_SDINEW | SM_CANCEL); for(timeout=100; (timeout!=0) && (vs_read_reg(VS_MODE) & SM_CANCEL); timeout--) { VS_DCS_ENABLE(); for(i=32; i!=0; i--) { vs_ssi_write(vs_bufgetc()); } vs_ssi_wait(); VS_DCS_DISABLE(); } //flush buffer if(vs_read_reg(VS_HDAT0) || vs_read_reg(VS_HDAT1)) { for(timeout=12288/32; timeout!=0; timeout--) //for FLAC 12288 otherwise 2052 { VS_DCS_ENABLE(); for(i=32; i!=0; i--) { vs_ssi_write(0x00); } vs_ssi_wait(); VS_DCS_DISABLE(); } } //reset if(vs_read_reg(VS_HDAT0) || vs_read_reg(VS_HDAT1)) { vs_write_reg(VS_MODE, SM_SDINEW | SM_RESET); //soft-reset delay_ms(10); if(vs_read_reg(VS_HDAT0) || vs_read_reg(VS_HDAT1)) { vs_setvolume(0); //0 -> analog power off vs_reset(); //hard-reset } } return; }