stm32f103 exti

Gast #4885439
Lesenswert?
• ▲
▼
ich versuche bei meinem mp3-player den byte-transfer zum vs1053 über isr 
zu führen.
1
void read_file_exti(){
2

3
  fileSize=(sizeof(vs_buffer)/32)*32;//rest wird zur Vereinfachung abgeschnitten
4
  pt_vs_buffer=fileSize+1;
5

6
    fat_res=f_open(&File[0], cur_fname, FA_OPEN_EXISTING | FA_READ);   /* Create a file */
7
#if 01
8
    while (fat_res==0){
9
//==================================================================
10

11
//1. Lesebedingung prüfen
12
    if(pt_vs_buffer>=fileSize){
13
      fat_res = f_read(&File[0], vs_buffer, sizeof vs_buffer, &fat_bitct);     /* Read a chunk of src file */
14
      pt_vs_buffer=0;
15
//2. fileende erreicht?
16
      if (fat_res || fat_bitct == 0){
17
        //eof => close file
18
        f_close(&File[0]);
19
        vs_status &= ~(1<<0);
20
        //eof => open next file
21
        break;
22
      } /* error or eof */
23
    }//1.
24

25
         u32 i;// = 0,x=0,xx=0;
26

27

28
//3. isr if statt while end of buffer?
29
    while (pt_vs_buffer < fileSize) {
30
//      if (pt_vs_buffer < fileSize) {
31

32
//+++++++++++++++++++++
33

34
        vs_status |= (1<<0);//isr zuschalten
35
         while (dreq==0){;} //in isr nicht erforderlich
36
//Hier müsste die isr einsetzen
37

38
         xdcs_l;
39
         for (i = 0; i < 32; i++) {
40
           vs_spi_byte(*(vs_buffer+pt_vs_buffer+i));
41
         }
42
         xdcs_h;
43

44
      //------------------
45

46

47
      pt_vs_buffer += 32;
48
    }
49

50
//==================================================================
51
  }//while (fat_res==0){
52
#endif
53
//+++++++++++++++++++++++++++++++++++++++
54
//---------------------------------------
55
}
56

57
void EXTI1_x_IRQHandler(void)
58
{
59
    if(EXTI_GetITStatus((1<<kk_exti_pin)) != RESET)
60
{//============================================
61
if(vs_status & (1<<0)){
62
if (!timer_ledoff){timer_ledoff=100;}
63
     u32 i;// = 0,x=0,xx=0;
64

65
//    vs_write32Byte(vs_buffer,pt_vs_buffer);
66

67
...


nach
      vs_status |= (1<<0);//isr zuschalten
         while (dreq==0){;} //in isr nicht erforderlich
müsste die ISR/rising_edge Aufgerufen werden, weil dreq/pinA8 auf high 
geht.

Beim vs1053-Beschreiben im Hauptprogramm blinkt die in der isr 
aufgerufene led.

Nehme ich das Senden aus dem Hauptprogramm raus, wird die isr nicht mehr 
angessprungen obwohl dreq aus der Warteschleife heraus - also auf high _ 
geht.


Jemand eine Idee? Oder noch besser fertigen vs1053-isr code?
Gast #4885750
Lesenswert?
• ▲
▼
Was ist das denn für ein Murks?

Stell mal den kompletten Sourcecode ein, so versteht das ja keiner. Dazu 
die Verschaltung der Pins mit dem VS1053.

Den Transfer der 32Byte-Häppchen an den VS1053 machst Du übrigens am 
sinnvollsten per DMA, der STM32F103 hat einen simplen DMA-Controller, 
der einfach zu konfigurieren ist. Alles andere ist verschwendete 
Rechenzeit.
Gast #4885770
Lesenswert?
• ▲
▼
john doe schrieb:
> am sinnvollsten per DMA

Das hört sich doch gut an. Das müsste ja auch mit dem sd-Leseteil 
funktionieren?

Der player läuft. Problem ist nur, dass wenn er in der Hauptschleife 
läuft, über Polling keine ir-Befehle mehr erkannt werden und dann das 
gesamte Verzeichnis abgespielt wird. Bin dabei, den ir-Teil auf 
Interrupt umzustellen. Sobald das fertig ist, versuche ich es mit DMA 
und stelle den code ein, da ich für DMA sicher Hilfe brauche.

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.