wav player für ARM LPC2148

OP #473188
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.
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.