DMA vs. EERPOM Zugriff

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • DMA vs. EERPOM Zugriff

      Hallo Zusammen,

      ich finde lt. Foren-Suche nur 11 Einträge zum Thema DMA aber vielleicht kann mir trotzdem jemand helfen.

      Ich nutze die DMA für die Verknüpfung von ADC und SRAM (CH0+CH1 im Burst-Mode), bzw. UART und SRAM. Das funktioniert prima aber
      Problem: nur solange bis ich etwas in den EEPROM schreiben.
      Ursache: Was ich weiß, CPU-DMA und CPU-EERPOM nutzen den gleichen Bus, der EEPROM hat Vorrang und stört meine Messung (ADC).
      Suche: Es würde mir schon reichen wenn der DMA ein Fehler-Flag setzt und ich die Messung dann verwerfen kann. Leider werden im oben genannten Fall weder die globalen Error-Flags DMA_INTFLAGS.4, DMA_INTFLAGS.5 noch die Kanalspezifischen DMA_CH0_CTRLB.5 + DMA_CH1_CTRLB.5. aktiv.
      (((Was ich nicht möchte: Manuell bei jedem EEPROM Zugriff (ca. 50x in dem Program) ein Flag setzen)))



      Hat jemand eine Idee? Oder eine Ermutigung beim Thema Fehler-Flags weiter zu forschen?

      Vielen Dank.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von FlourHorn ()

    • Hm, beim Atmega gibt es das EECR.EEIR = EEPROM Ready Interrupt. Damit könnte man das EEPROM-inBenutzung-Flag global setzen ohne den ganzen code (>30k-Zeilen) anzupassen.

      Gibt es so etwas auch beim xmega? Ich kann leider nichts finden aber bei 480 Seiten Datenblatt überliest man schnell was..
    • Das Problem wurde gefunden und ist völlig anderer Natur. Von daher könnten man diesen Beitrag löschen, da der Titel lauten müsste: Warum funktioniert ein 2. Return in der ISR nicht.

      Folgendes: Beim Zugriff auf das EEPROM wurden weniger Samples per DMA vom ADC in den RAM übertragen. In einer ISR die, den Zählerstand (zeitsynchron) aktualisiert wurde der Fehler erkannt, die Fehlerbehandlung gipfelte in einem 2. Return in einer ISR und das darf es in Bascom nicht geben => Absturz.