STM32F4 Discovery Audio DAC CS43L22

OP #2757978
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
OP #2759059
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
}
Angehängte Dateien:
Persönliche Seite #3103699
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
Persönliche Seite #3107915
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.
Angehängte Dateien:
Gast #3110153
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;)
Angehängte Dateien:
Persönliche Seite #3110177
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 ?
Gast #3110282
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren