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

Transmisja I2C w przerwaniu RX - dobry pomysł?

robiw 29 Lis 2008 10:05 1149 2
REKLAMA
  • #1 5796113
    robiw
    Poziom 26  
    Witam,
    W przerwaniu RX USARTa (asynchroniczne 38400, po odebraniu odpowiedniego bajta) chciałbym wysyłać dane (Start, Adres, 2 bajty, Stop) korzystając z TWI (nie wykorzystując przerwania od TWI co oczywiste) przy f magistrali 400kHz. O ile czasowo przerwanie się wyrobi o tyle zastanawia potencjalna możliwość powieszenia układu w przypadku padnięcia scalaka Slave I2C -> nie mam pewności czy procek ustawi wtedy TWINT a jak się wydaje procedurka wysyłki danych po I2C (umieszczona w przerwaniu od RX) powinna czekać za każdym razem (Start, Adres, Bajt) na ustawienie tej flagi. Nie mam tez pewności czy czas ustawienia tej flagi wynika jedynie z czasu potrzebnego na wysłanie po I2C kolejnych bitów czy coś więcej aniżeli to... Jakieś sugestie? robiw
  • REKLAMA
  • #2 5797516
    ZbeeGin
    Poziom 39  
    Nie wiemy jaki to układ z rodziny AVR i czy transmisja po I2C będzie się odbywać przez TWI czy przez USI w trybie I2C.

    TWINT zmieni swój stan po zakończeniu danej operacji. A czy moduł TWI otrzmał ACK czy nie otrzymał, sprawdzisz w TWSR.
  • #3 5797719
    robiw
    Poziom 26  
    To Atmega8 więc TWI. Co do TWINT - to wiem, że jest ustawiany po zakończeniu operacji czyli można zastosować konstrukcję Bitwait Twcr.twint , Set. W takim razie niezależnie od otrzymania potwierdzenia od Slave - procedura nie powiesi się oczekując na ustawienie flagi co podpowiada, iż wysłanie Startu, Adresu, 2 bajtów i Stopu przy 400kHz spokojnie zmieści się w procedurze obsługi przerwania URXC przy Baud=38400 zakładając nawet odłożenie wszystkich 32 rejestrów na stos...robiw
REKLAMA