Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

lpc1114 Uart jak obliczyć baudrate

DokDaniel1993 18 Mar 2017 19:50 768 5
  • #1 18 Mar 2017 19:50
    DokDaniel1993
    Poziom 3  

    Płytkę mam podpiętą do PC a na nim uruchomiony program komunikacji z com4 Realterm. Mój kody jest taki

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Czy dobrze programuje uart, bo nic się nie pojawia w Realterm ?
    Ustawiałem w nim różne prędkości zaczynając od 9600 do 115200. Nie wiem dokładnie z jaką szybkością pracuje Uart bo nie jestem pewien ile MHz ma lpc1114.
    Do załącznika dałem wzór jak się liczy baudrate. Nie wiem jaka jest wartość PCLK, bo reszta jest mi znana i co obliczyłem po resecie ma w sumie wartość 4096. Co daje PCLK/4096
    lpc1114 Uart jak obliczyć baudrate

  • #3 18 Mar 2017 21:56
    Badmaneq
    Poziom 23  

    1. Popraw temat na lpc1114
    2. Pewnie brakuje Ci włączenia taktowania bloku IOCONFIG, a bez niego nie włączysz funkcji alternatywnych pinów P1.6 i P1.7
    3. W funkcji SystemInit masz wszystkie informacje w jaki sposób wstępnie skonfigurowany jest LPC1114 ;) W tym ile wynosi PCLK, którego nie znasz.
    Poczytaj http://mikrokontrolery.blogspot.com/2011/04/arm-lpc1114-ustawienie-inicjalizacja.html to będziesz wiedział.

    Kod który pokazałeś wygląda mi na generowany przez środowisko LPCXpresso więc na 100% wiem jaką częstotliwość użyto do taktowania uC jeśli kwar ma wartość 12 MHz lecz nie napiszę poczytaj wiadomości z linku powyżej :)
    Aha, jak piszesz w LPCXpresso to nie musisz w main wywoływać SystemInit ponieważ startup wywołuje tą funkcję zaraz po resecie uC.

  • #4 19 Mar 2017 10:13
    DokDaniel1993
    Poziom 3  

    ad. 1. poprawiłem
    ad. 2.dodałem przed konfiguracją P1.6 i P1.7 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); i też nic nie ma
    ad. 3. czytam ;)

    Tak program pisany w lpcxpreso bo w keil od chińczyka to umiałem skompilować program na projekcie edytowanym i rozbudowywanym od chińczyka. Kiedy chciałem utworzyć nowy projekt lpc1114 to zbyt dużo ustawiania i sypał błędami.
    Wywaliłem funkcje SystemInit to też nic nie wysyła przez uart.

  • #5 19 Mar 2017 20:52
    Badmaneq
    Poziom 23  

    Brakuje ustawionego rejestru UARTCLKDIV, który to dzieli główny sygnał zegarowy, a nastepnie nim jest taktowany UART:

    UART clock divider register (UARTCLKDIV, address 0x4004 8098) bit description




    BitSymbolDescriptionReset value
    7:0DIV0: Disable UART_PCLK.
    1: Divide by 1.
    to
    255: Divide by 255.
    0x00

    Tutaj w opisie CGU – Clock Generation Unit jest rysunek jak dzielony jest główny sygnał zegarowy.
    Standardowo po restarcie ma wartość zero, więc z powyższej tabeli Disable UART_PCLK. Czyli do bloku UART nie dociera taktowanie zegara i po prostu nie działa.
    U Ciebie wystarczy dodać LPC_SYSCON->UARTCLKDIV = 1; UART będzie wysyła z jakąś tam prędkością...
    Wklejam kod, gdzie Ty decydujesz poprzez #define BAUDRATE prędkość transmisji UART
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Powyższy kod oblicza tylko DLM i DLM, przy pewnych prędkościach MAIN CLOCK oraz wybranej prędkości transmisji UART faktyczna prędkość może znacząco różnić się od tej która powinna być dlatego należy dobrać jeszcze DIVADDVAL oraz MULVAL wg. algorytmu opisanego w UM w roz. 13.5.15.1 Baud rate calculation. Porządny przykład masz tutaj, są tam przykłady oraz tzw. drivery do uC. Jest m.in. przykład jak korzystać z UART wykorzystując przerwania bez zbędnego oczekiwania w pętlach.

    P.S. Poszukaj w sieci LPC UART Calculator, znajdziesz kalkulator w formie arkusza kalkulacyjnego który policzy wszystkie parametry dla zadanych parametrów transmisji.

    Aha, możesz jeszcze korzystać z LPCOpen zamiast pisać program na rejestrach używasz funkcji wyższego poziomu. Przykładowa konfiguracja wtedy wygląda tak :)
    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #6 20 Mar 2017 18:15
    DokDaniel1993
    Poziom 3  

    Dzięki, działa !
    Wiem że jest Lpcopen ale chcę poznać lpc1114 tak jak avr.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME