stm32f103 exti

Gast #4885439
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.