Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

01 Cze 2011 00:15 1101 4
  • 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:
    Code:

    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:
    Code:
     
    
    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)

  • 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.
  • 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. ??
  • 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.
  • 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.