logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[LPC2148][uVision ] SIO.c nie działa jeśli jest UART0, UART1

zorg666 28 Lut 2009 23:49 1598 3
REKLAMA
  • #1 6219639
    zorg666
    Poziom 22  
    Posty: 556
    Pomógł: 30
    Ocena: 28
    UART0 działa na IRQ z pomoca SWI bez problemu.
    Obecnie chciałem do tego dołożyć jeszcze UART1, i mam problem.

    inicjalizacje porobione dla UART0, UART1, __SWI poprawnie wykonane dla 1 i drugiego UART-a, tablice SWI uaktualnione o UART1, UART0.
    RTX nie mam, dlatego dałem SWI6, SW7, SWI8, SWI9.
    - na symulatorze działa poprawnie.
    - w programie głównym jak dam linię:

    
    
    /* Initialize Serial Interface        */
    timer_init();
    com1_initialize ();
    com_initialize ();
    

    - to działa ten UART który jest w tej linii ostatni.
    - nie mogę wymusić aby dziłały oba UART-y.

    SWI.s końcówka jest tak jak poniżej.

    
    SWI_Dead        B       SWI_Dead               ; None Existing SWI
    
    SWI_Cnt         EQU    (SWI_End-SWI_Table)/4
    SWI_Count       DCD     SWI_Cnt
    
                    IMPORT  __SWI_6
                    IMPORT  __SWI_7
                    IMPORT  __SWI_8
                    IMPORT  __SWI_9
    
    SWI_Table
                    DCD     SWI_Dead               ; SWI 0 Function Entry
                    DCD     SWI_Dead               ; SWI 1 Function Entry
                    DCD     SWI_Dead               ; SWI 2 Function Entry
                    DCD     SWI_Dead               ; SWI 3 Function Entry
                    DCD     SWI_Dead               ; SWI 4 Function Entry
                    DCD     SWI_Dead               ; SWI 5 Function Entry
                    DCD     __SWI_6                ; SWI 6 Function Entry
                    DCD     __SWI_7                ; SWI 7 Function Entry
                    DCD     __SWI_8                ; SWI 8 Function Entry
                    DCD     __SWI_9                ; SWI 9 Function Entry
    ;               ...
    SWI_End
    
    
                    END
    
    
  • REKLAMA
  • #2 6233738
    zorg666
    Poziom 22  
    Posty: 556
    Pomógł: 30
    Ocena: 28
    Problem został rozwiązany,była jakaś literówka w instrukcjach, za to pojawił się inny. [ ciekawe jak działał symulator ze tego nie wykrył ??]

    Ponieważ interfejs rs-232 obsługuje samochód, piny TX oraz RX są zwarte na interfejsie dołączonym do linii K w samochodzie.
    - teraz co tylko wysyłam poprzez TX , pojawia się na RX w buforze.
    - w dokumentacji lpc2148 wyczytałem że reset fifo to instrukcja poniższa

    U1FCR |= (1 <<1);
    - ale to nie pomaga , bufor jest dalej zapełniany informacją z TX, działa jak lokalne echo .

    U1FCR |= 0x00000010;

    - też nie daje rezultatu.
    - próbowałm stosować obie instrukcje w pętli, zero efektu.
    - blokada przerwań nic nie daje ponieważ także blokuje przychodzącą informację z auta.
    - może ktoś ten problem rozwiązał.

    p.s. poprawione, chochlik drukarski.
  • REKLAMA
  • #4 6237121
    zorg666
    Poziom 22  
    Posty: 556
    Pomógł: 30
    Ocena: 28
    nic nie znalazłem na temat rozwiązania problemów z FIFO dlatego tymczasowo zastosowałm bramkowanie sygnału RX.
    RX jest blokowany na czas nadawania.
    Tylko w tym przypadku po zwolnieniu sygnału blokuj, uart daje przerwanie od time-outu odbiornika.
    Zastosowałem odczyt znaków w pętli nieskonczoej az do momentu odczytu znaku drukowalnego.

    
    while ((LL = com1_getchar()) == 0xff)
    ;		
    


    Teraz znowu jak jest jakiś błąd transmisji to cały czas czyta time-outy.
    P.S.

    - FIFO dałem na 1 znak i działa wspaniale.
    - a miałem ustawione na 14 znaków.
REKLAMA