[ABANDONED] ISR wird durchgehend bearbeitet

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • [ABANDONED] ISR wird durchgehend bearbeitet

    Hallo Segger,
    nachdem ich mit embOS gestartet habe, habe ich ein Problem mit einer Interrupt-Routine für meine UART Kommunikation.
    Vor dem Auslösen des von mir gesetzten RXNE_Interrupts laufen alle Tasks nach Priorität ab und wenn ich ein Signal sende springt das Programm in die ISR und arbeitet den Code ab.
    Hier wird einfach nur ein Buffer mit den empfangenen Daten gefüllt, aber nach der ISR springt das Programm wieder in die ISR ohne eine Task auszuführen.
    Vielleicht kann mir ja jmd. helfen.

    Source Code

    1. void USART2_IRQHandler(void)
    2. {
    3. OS_INT_Call(_USART_RXNE_IRQ_Handler);
    4. }
    5. void _USART_RXNE_IRQ_Handler(void)
    6. {
    7. if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
    8. {
    9. if (buffer[zaehler]== 0)
    10. {
    11. buffer[zaehler] = USART_ReceiveData(USART2);
    12. }
    13. if (buffer[zaehler]== 0x0D)
    14. {
    15. zaehler = 0;
    16. }
    17. else
    18. { zaehler++; }
    19. }
    20. }
    Display All
    Images
    • ISR_Fehler.JPG

      205.94 kB, 1,284×754, viewed 950 times
  • Hallo Philipp,

    üblicherweise passiert das wenn das Interrupt Pending Flag nicht gelöscht wurde.
    Du müsstest mal schauen, ob es das bei deinem Device gibt und es dann in der Interrupt Routine als erstes löschen.
    Ansonsten sieht der Interrupt Controller das ein Pending Flag gesetzt ist und führt die ISR sofort wieder aus.
    Das sollte aber ohne embOS genauso passieren.
    Löst das dein Problem?

    Btw. Ein OS_INT_Call() brauchst du nicht. Das wird nur bei manchen speziellen CPUs gebraucht.
    Eine embOS Interrupt Routine beim Cortex M sieht so aus:

    C Source Code

    1. void USART2_IRQHandler(void) {
    2. OS_INT_Enter();
    3. DoSomething();
    4. OS_INT_Leave();
    5. }

    Gruß,
    Til
    Please read the forum rules before posting.

    Keep in mind, this is *not* a support forum.
    Our engineers will try to answer your questions between their projects if possible but this can be delayed by longer periods of time.
    Should you be entitled to support you can contact us via our support system: segger.com/ticket/

    Or you can contact us via e-mail.
  • scheint wahrscheinlich kein embOS Problem zu sein.
    Trotz USART_ClearITPendingBit(USART2,USART_IT_RXNE); läuft das Programm immer in die ISR, nur wenn ich den Interrupt komplett deaktiviere dann läuft das Programm normal weiter.
  • Wenn du das embOS Cortex-M ES V5.06 schon hast schaue doch bitte mal in die BSP_UART.c in Start\BoardSupport\ST\STM32F103_STM3210B_Eval\Setup\.
    Evtl. kannst du einfach bei uns abschauen oder das Modul direkt nutzen.

    Viele Grüße,
    Til
    Please read the forum rules before posting.

    Keep in mind, this is *not* a support forum.
    Our engineers will try to answer your questions between their projects if possible but this can be delayed by longer periods of time.
    Should you be entitled to support you can contact us via our support system: segger.com/ticket/

    Or you can contact us via e-mail.