Forum: Projekte & Code wav player für ARM LPC2148


von Kai K. (kjk)


Lesenswert?

Hallo,

ich versuche einen Wav player zu programmieren,
er sollte mit einem ARM7 LPC2148 laufen,

die kleine datei sollte im Speicher sein in einem array z.b. für einen 
tür gong.

die ausgabe soll mit einer PWM ausgegeben werden,
dann über ein analog filter auf ein piezo.

genutzt wird timer0 für die PWM erzeugung mit 44KHz

hat jemand etwas beizutragen ?
ein stück mehr code für die interrupt rutine.

danke
kai

/*********************************************************************** 
****
 * init pwm
 * 44 khz (43,86khz)
 *
 ************************************************************************ 
***/
void init_pwm(void){
  PWMTCR = PWMCR_RESET;  // reset PWM counter
  PWMPR  = PWM_PCLK_DIV; // set PWM Prescaler
  PWMMR0 = PWM_MR0INIT;  // set Match0 (for the Single Edge 
PWM-Channels)
  PWMLER |= (1<<0);     // Enable PWM Match0 Latch
  PWMMCR |= (1<<1);     // reset PWM Timer on PWMMR0 match
}

void sound_init(void)
{
        PINSEL0 = (PINSEL0 & ~(1<<16)) | (1<<17);//PWM4 function select 
// PWM Init
        PWMMR4 = 150;         //
        PWMPCR &= ~(1<<4);    // single edge mode for PWM4
  PWMPCR |= (1<<12);    // enable outputs for PWM4
        PWMLER |= (1<<4);     // Enable PWM Match4 Latch
        PWMMCR |= (1<<12);    // Interrupt on PWMMR4: An interrupt is 
generated when PWMMR4 matches the value
        PWMIR |= PWMIR_MR4I; // clears the interrupt.
}
/**********************************************************************
 * PWM Interrupt
***********************************************************************/
//static unsigned short int wert=1;
U32 wert=1;
U16 pwmzaehler = 0;
U16 zaehler2 = 0;

void PWM0ISR(void){
    switch(PWMIR) {
      default:
        break;
    case PWMIR_MR4I:
        if(pwmzaehler > 12){
          pwmzaehler = 0;
          // Wert toggeln
          if (wert == 1)
//            wert = wert??;
          else
            wert = 1;
          // Wert ausgeben
          PWMMR4 = wert??;
          PWMLER |= (1<<4);     // Enable PWM Match4 Latch
        } else {
          pwmzaehler ++;
        }
      break;
    }
    PWMIR |= 0xffff;  //PWMIR_MR4I; // clears the interrupt.
}


von Mario (Gast)


Lesenswert?

Hallo,

das was Du suchst hat man früher unter DOS gemacht, da keine 
Sound-Karte.

Such mal im G* nach "wav output on PC speaker" oder "sound output on PC 
speaker", da findest unter anderem sowas:

http://www.gamedev.net/reference/articles/article442.asp

BTW, hier sollten bereits die fertigen Projekte eingestellt werden.

Mario

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.