Forum: Mikrocontroller und Digitale Elektronik STM32F4 Discovery Audio DAC CS43L22


von Moritz M. (avrprogger)


Lesenswert?

Hallo,

hat jemand Erfahrung mit dem Audio DAC (CS43L22) auf dem STM32F4 
Discovery-Board?
Es gibt dazu zwei Dateien unter

STM32F4-Discovery_FW_V1.1.0\Utilities\STM32F4-Discovery

stm32f4_discovery_audio_codec *.h und *.c

Leider bekomme ich die "Lib" nicht richtig zum Laufen. Hat jemand vllt. 
ein Beispiel für mich? Die Bsp. von ST funktionieren irgendwie anders.

Moritz

von holger (Gast)


Lesenswert?

STM32F4-Discovery_FW_V1.1.0\Project\Audio_playback_and_record

Da findest du alles was du brauchst.

von Moritz M. (avrprogger)


Angehängte Dateien:

Lesenswert?

Hallo,

ja das Beispiel kenne ich aber da werden die EVAL_AUDIO Funktionen nicht 
direkt verwendet. Ich poste einfach mal meinen ersten Versuch vllt. 
findet ja jemand den Fehler.
1
#include "stm32f4xx.h"
2
#include "stm32f4_discovery_audio_codec/stm32f4_discovery_audio_codec.h"
3
#include "audio_sample.h"
4
5
6
7
int main(void)
8
{
9
  SystemInit();
10
11
  EVAL_AUDIO_SetAudioInterface(AUDIO_INTERFACE_I2S);
12
  EVAL_AUDIO_Init(OUTPUT_DEVICE_HEADPHONE, 50, 32000);
13
14
  EVAL_AUDIO_Play((uint16_t*)AUDIO_SAMPLE, sizeof(AUDIO_SAMPLE));
15
  EVAL_AUDIO_PauseResume(AUDIO_RESUME);
16
17
    while(1)
18
    {
19
    }
20
21
    return 1;
22
}
23
24
uint16_t EVAL_AUDIO_GetSampleCallBack(void)
25
{
26
  return 1;
27
}
28
29
void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size)
30
{
31
}
32
33
void EVAL_AUDIO_HalfTransfer_CallBack(uint32_t pBuffer, uint32_t Size)
34
{
35
}
36
37
void EVAL_AUDIO_Error_CallBack(void* pData)
38
{
39
  while(1);
40
}
41
42
uint32_t Codec_TIMEOUT_UserCallback(void)
43
{
44
  while(1);
45
  return 1;
46
}

von Moritz M. (avrprogger)


Lesenswert?

Hallo noch einmal,

muss die I2S Clock noch irgentwie eingestellt werden?

Moritz

von holger (Gast)


Lesenswert?

>muss die I2S Clock noch irgentwie eingestellt werden?

Ja. Das wird hier gemacht:

STM32F4-Discovery_FW_V1.1.0\Project\Audio_playback_and_record\src\system 
_stm32f4xx.c

von Moritz M. (avrprogger)


Lesenswert?

Hallo,

vielen Dank! Das hab ich übersehen. Funktioniert trotzdem noch nicht.

Moritz

von Moritz M. (avrprogger)


Angehängte Dateien:

Lesenswert?

Hallo,

jetzt funktioniert es! Ich poste einfach mal den Code.

Moritz

PS: Sorry das im Anhang ist beides das gleiche!

von Thomas K. (Firma: ---) (streeteagle)


Lesenswert?

Ich bekomme bei deinem Beispiel keine Audioausgabe. Warum hat es denn 
bei dir zum Schluss funktioniert?

Thomas

von Quicktest (Gast)


Lesenswert?

Bei mir funktioniert das letzte obige Projekt:
3 Sekunden Musik, die sich ständig wiederholen.
Ich habe noch nicht tief in den Code reingeschaut - aber ist das so ok?

von Thomas K. (Firma: ---) (streeteagle)


Lesenswert?

Ich habe CoIde 1.62 und gcc 4.6 2012q4 benutzt. Hast du eventuell ältere 
Versionen?

von Quicktest (Gast)


Lesenswert?

Ich habe verwendet:

CooCox CoIDE Version: 1.5.0 Build id: 20120720-1757

GNU-Compiler: arm-none-eabi-gcc-4_6

von Quicktest (Gast)


Lesenswert?

Program Size:
      text     data      bss      dec      hex  filename
   1014808       68     2196  1017072    f84f0  AudioPlayer1.elf

BUILD SUCCESSFUL
Total time: 22 seconds

von Thomas K. (Firma: ---) (streeteagle)


Angehängte Dateien:

Lesenswert?

Könntest du mir den Compiler und Linkeraufruf auch noch posten?
Vielleicht gibt es da ja noch ein Problem.

Ich habe meine Ausgabe jetzt mit dem q2 mal angehängt.

von Quicktest (Gast)


Angehängte Dateien:

Lesenswert?

.. ist angehängt.

von Thomas K. (Firma: ---) (streeteagle)


Lesenswert?

Vielen Dank.
Das sieht alles sehr gleich aus. Die Optimierungsstufe hatte ich noch 
verändert. Das hat aber auch nichts gebracht.

von Thomas R. (Gast)


Angehängte Dateien:

Lesenswert?

Anbei mal meine (bin Quicktest) erzeugten Files.
Vielleicht helfen sie dir weiter.

von Thomas K. (Firma: ---) (streeteagle)


Lesenswert?

Dein File läuft. Dann fällt die Hardware als Fehlerquelle aus.

von Rene B. (themason) Benutzerseite


Lesenswert?

Bin gerade auf diesen thread gestoßen da ich dasselbe Problem habe. 
Hardwarefehler kann ich ausschließen da das Audio-Demo der STM32 
Firmware den Kopfhörer zum dudeln bringt. Nur mein eigener Code nicht.
Bei einer kurzen drübersicht sind mir an meinem Code keine weiteren 
Fehler aufgefallen, aber ich werd es zuhause (hab die HW gerade nicht 
zur Hand) mal genauer unter die Lupe nehmen was bei mir anders ist. Aber 
schön das ich nicht der einzige bin. Dachte schon ich bin zu doof die 
mundgerechten API-Funktionen zu nutzen bzw vom Demo her zu portieren um 
was eigenes draus zu machen. Bei Fragen melde ich mich. Danke schonmal

von Rene B. (themason) Benutzerseite


Angehängte Dateien:

Lesenswert?

Irgendwie schein ich zu doof zu sein ...

Das kurze Progrämmchen von Moritz funktioniert ja, und spielt das Sample 
auch ab. Kein Problem. Wenn ich aber einen RAM-Buffer (den ich mit ner 
Wellenform initialisiere) abspiele, kommt nur noch Rauschen.
Ich habe mir den Quellcode auch schon vom MP3-Player für das Discovery, 
und kann da auch keine wirklichen Fehler entdecken. Auch die Sourcen der 
Library geben nicht viel Auschluß darüber ob bzw was man bei 
EVAL_AUDIO_Play und deren Parameter beachten muß. Irgendwie steh ich 
aufm Schlauch ....
Angehängt hab ich mal die main.c, der Rest ist wie bei AudioPlayer1.zip

Edit :

Ich bin mal von einem Stereo-Signal ausgegangen. Aber egal was bzw wie 
ich mache, immer nur Rauschen.

von Rene B. (themason) Benutzerseite


Lesenswert?

Niemand ne Idee ?

Also das vorgegebene Wave-File zu ändern ist kein Thema. Aber Ausgabe 
aus dem RAM klappt immer noch nicht. Ich versteh einfach nicht warum das 
nicht funktioniert.

von holger (Gast)


Angehängte Dateien:

Lesenswert?

>Aber Ausgabe aus dem RAM klappt immer noch nicht.
>Ich versteh einfach nicht warum das
>nicht funktioniert.

EVAL_AUDIO_Play(); macht einen Fehler wenn weniger als 0xFFFF Samples
gespielt werden sollen. Es werden dann mehr Samples irgendwo
aus dem Speicher abgespielt (das Rauschen).

Nimm mal den Anhang. Dann kannst du dir deinen scheusslichen Ton 
anhören;)

von Rene B. (themason) Benutzerseite


Lesenswert?

@holger

Ey, sach nix gegen meinen (fast) perfekten 440Hz Kammer-Säger-Test-Ton. 
Sons gibbet Ärger :D

Erstmal Danke. Da hätte ich ja lange probieren können :(
Werds gleich mal testen.
In dem Zusammenhang vllt nochmal eben ne kurze Frage. Mir ist 
aufgefallen das der am Ende des Wave-Files "springt". Ich hab z.b. eine 
Loop erstellt. Aber am Ende hat der sich immer "verschluckt", bzw die 
Loop war nicht sauber und hat "gesprungen". Könnte das vllt auch mit 
einer 64KByte Grenze zu tun haben ?

von holger (Gast)


Lesenswert?

>Könnte das vllt auch mit
>einer 64KByte Grenze zu tun haben ?

Ich denke auch da ist noch mehr faul.

Habe diese Zeile

  Audio_MAL_Play((uint32_t)pBuffer, (uint32_t)(DMA_MAX(Size/4)));

geändert in

  Audio_MAL_Play((uint32_t)pBuffer, (uint32_t)(DMA_MAX(Size)));

und schon ist dein Ton nicht mehr ganz so scheusslich.

von holger (Gast)


Angehängte Dateien:

Lesenswert?

So, noch Änderung für DMA_MAX_SZE. 0xFFFF lässt sich ja ganz schlecht
durch zwei teilen;)

von Michael (Gast)


Lesenswert?

Genial: Planloses verändern von Sourcen.

von holger (Gast)


Lesenswert?

>Genial: Planloses verändern von Sourcen.

An meinen Änderungen ist nichts planlos.
Genau hinsehen, Unsinn finden, ändern.

von Roland E. (seahood)


Lesenswert?

Ich bin auf der suche nach code wo ich die samples des Microphones auf 
dem CS43L22 direkt ausgeben kann ?

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.