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.

[ATMega48P] SPI kasuje bit MSTR

01 Paź 2011 11:18 909 2
  • Poziom 10  
    Najpierw uruchamiam moduł SPI:

    ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
    out DDR_SPI,r17

    ldi r17,(1<<SPE)|(1<<MSTR)
    out SPCR,r17

    Powyższy sposob sprawdzalem na wielu innych AVR (mega64,mega16...) i dziala.
    Jednak na mega48P nie dziala, zadnych reakcji na nozkach Atmegi przy ladowaniu rejestru spdr. Wymienilem rowniez uklad na nowy. Efekt taki sam.

    Wrzucilem to na symulatr AVR studio i okazalo sie, ze po wykonaniu instrukcji "ldi r17,(1<<SPE)|(1<<MSTR) oraz OUT spcr,r17" rejestr SPCR laduje sie ustaloną wartością, jednak w kolejnym cyklu, przy nastepnej dwolnej instrukcji znacznik MSTR jest zerowany (dlaczego?), co uniemozliwia wysylanie danych. Podejrzewam, ze to samo dzieje sie w zmontowanym ukladzie. Gdzie tkwi błąd?
  • Pomocny post
    Poziom 34  
    Zapewne nie wczytałeś się zbyt dokładnie w dokumentację do SPI, mianowicie jeśli pin SS jest wejściem i panuje na nim stan niski, to SPI kasuje bit MSTR. Jeśli pin SS jest wyjściem, to bit MSTR nie jest nigdy modyfikowany.
    -- edit:
    ATmega48P datasheet
    atmega48p datasheet napisał:
    19.3.2 Master Mode

    When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the
    direction of the SS pin.
    If SS is configured as an output, the pin is a general output pin which does not affect the SPI
    system. Typically, the pin will be driving the SS pin of the SPI Slave.
    If SS is configured as an input, it must be held high to ensure Master SPI operation. If the SS pin
    is driven low by peripheral circuitry when the SPI is configured as a Master with the SS pin
    defined as an input, the SPI system interprets this as another master selecting the SPI as a
    slave and starting to send data to it. To avoid bus contention, the SPI system takes the following
    actions:

    1. The MSTR bit in SPCR is cleared and the SPI system becomes a Slave.
    As a result of
    the SPI becoming a Slave, the MOSI and SCK pins become inputs.
    2. The SPIF Flag in SPSR is set, and if the SPI interrupt is enabled, and the I-bit in SREG is
    set, the interrupt routine will be executed.
  • Poziom 10  
    Dzieki, dziala.