mikrocontroller.net

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


Autor: Kai Klein (kjk)
Datum:

Bewertung
0 lesenswert
nicht 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.
}


Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.