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

UCRSC - nie mogę nic zapisać do rejestru. Programuję prze JTAG.

5657jz 01 Cze 2011 00:15 1230 4
REKLAMA
  • #1 9564819
    5657jz
    Poziom 14  
    Ponawiam temat. Bo nie wiem, co może być przyczyną, że nie mogę wpisać nic do rejestru UCSRC. Programuje przez JTAG. I czy to ATmega 16,czy 32 to zawsze UCRSC==0x00
    Kod:
    
    90:         UCSRC = _BV(URSEL)|_BV(USBS)|_BV(UCSZ1)|_BV(UCSZ0);  
    +00000C07:   E88E        LDI       R24,0x8E       Load immediate 
    +00000C08:   BD80        OUT       0x20,R24       Out to I/O location 

    Kod:
     
    void uart_init() 
    { 
    ubrr=MY_UBRR; 
      /* 9600 bit/s */ 
      UBRRH = (unsigned char)(ubrr>>8); 
      UBRRL = (unsigned char)ubrr;       // 25 -> 4000000 
             /* RxD=>ON;  ISR(koniec odbioru), */ 
              /* 8-bit dane, 2-bit stopu, brak bitu parzystosci */ 
      UCSRC = _BV(URSEL)|_BV(USBS)|_BV(UCSZ1)|_BV(UCSZ0);  
      UCSRB = _BV(RXEN)|_BV(RXCIE)|_BV(TXEN); 
            RS485_INIT();         // DDR - wyjscie 
          RS485_OUT();         // DE/RE w stan niski - Przyjmowanie danych 
          ALBITRAZ_UART_INIT();   // DDR - wyjscie   (podciagniete rezystorem  
          ALBITRAZ_UART_HIGH();     //stan wysoki - magistrala wolna) 
    }  
    
  • REKLAMA
  • #2 9566930
    zumek
    Poziom 39  
    5657jz napisał:
    ... I czy to ATmega 16,czy 32 to zawsze UCRSC==0x00
    Chodzi Ci oczywiście o UCSRC

    A 'prawidłowa' odpowiedź jest tam, gdzie zazwyczaj. :D
    UBRRH/UCSRC read access
    UCRSC - nie mogę nic zapisać do rejestru. Programuję prze JTAG.
  • REKLAMA
  • #3 9575348
    5657jz
    Poziom 14  
    Dzieki za zainteresowanie. Jednak powiem krótko-nie rozumiem. I jesli mozna bardziej łopatologicznie to wytłumaczyć to bardzo prosze.

    W tej chwili inicjuje UART jako pierwszą funkcje w main(). Przerwania globalne są wyłaczone. O ile rozumiem przytoczony text z noty to odczytać UCSRC mogę
    w nastepnym cyklu zegara, przy wyłaczonych przerwaniach globalnych. Czy ten ATOMIC BLOCK ma być wydzielony w programie (tz. od miejsca do miejsca {...}).
    Generalnie- nie rozumiem. Chciałbym poprostu zobaczyć przez JTAGa właczone bity i móc nadawać. Oczywiscie mechanika tych procesów wszystko wyjasna - lecz jej nie rozumiem.
    PS. Jest taki fuse bit OCDEN z czym to sie wiąże. ??
  • REKLAMA
  • #4 9575937
    janbernat
    Poziom 38  
    Na str.159 AtMega32 masz przykładową funkcję do odczytu UCSRC.
    W najprostszej wersji przed wywołaniem tej funkcji należy wyłączyć przerwania a po włączyć.
    Może JTAG tego nie potrafi?
    Nie wiem, nie mam JTAG-a.
  • #5 9598345
    5657jz
    Poziom 14  
    Problem rozwiazany. Żle odczytywałem UCSRC. USART nadaje.
    Nie wiem dlaczego nie widać włączanych bitów podczas debbugownia JTAGiem ICE (ATmega 32). Nie zamykam tematu -może Ktoś podpowiewie.

    PS. Nie sprawdzałem RxT na nodze uC, tylko w odbiorniku RS485. Okazało sie, że miałem przerwaną scierzkę na płytce. Stąd ten temat. Dzięki za podpowiedzi.
REKLAMA