Да, точно. Хочу переделать под мегу, значит че понял, работают 2 функции load_header и Play
Код:
static
DWORD load_header (void) /* 0:Invalid format, 1:I/O error, >1:Number of samples */
Фунуция проверки и загрузки трека, и че она возвращяет 0- формат не тот, 1- не читается, больше 1 номера треков
Код:
res = pf_read(Buff, 256, &rb); /* Load file header (256 bytes) */
if (res) return 1;
читаем 256 байт
Код:
if (rb != 256 || LD_DWORD(Buff+8) != FCC('W','A','V','E')) return 0;
Тут либо не 256 байт, либо wawe не wawe
Код:
case FCC('f','m','t',' ') : /* 'fmt ' chunk */
if (sz > 100 || sz < 16) /* Размер масива в пределах... */
return 0;
if (Buff[i+0] != 1) /* Check coding type (1) */
return 0;
if (Buff[i+2] != 1 && Buff[i+2] != 2) /*проверка моно или стерео */
return 0;
GPIOR0 = Buff[i+2]; /* Тут не понятно */
if (Buff[i+14] != 8 && Buff[i+14] != 16) /* 8 или 16 бит */
return 0;
GPIOR0 |= Buff[i+14]; /* опять не понятно */
OCR0A = (BYTE)(F_CPU / 8 / LD_WORD(&Buff[i+4])) - 1; /* Sampling freq */
break;
Код:
case FCC('f','a','c','t') : /* 'fact' chunk (skip) */
break;
case FCC('d','a','t','a') : /* 'data'стартуем проигрывать */
fs.fptr = i;
return sz;
Вот не понятно , для чего WD включен в функции delay500, переключаться на следующий трек?
Код:
static
void delay500 (void)
{
TCCR1 = 0; GTCCR = 0; /* Stop TC1 */
TCCR0B = 0; TCCR0A = 0; /* Stop TC0 */
wdt_reset();
WDTCR = _BV(WDE) | _BV(WDIE) | 0b101; /* Enable WDT interrupt in timeout of 0.5s */
set_sleep_mode(SLEEP_MODE_PWR_DOWN); /* Enter power down mode */
sleep_mode();
WDTCR = _BV(WDE) | 0b110; /* Enable WDT reset in timeout of 1s */
}