ATmega128 + JTAG +I2C reloaded

Horvath Zsolt hozso_001 at freemail.hu
Tue Aug 22 13:58:18 CEST 2006


Bali Zoltan írta:

>Szia !
>
>STOP elött megvárod a TWINT-et ?
>
>Üdv  Zoli
>

     Igen. A levél végén van egy hosszabb programrészlet. Ha megjön
a megszakítás, csak akkor értékelem ki az I2C-t. Minden művelet
végén feltöltök egy biztonsági számlálót, ami 10msec-ként lefelé
számol ha eléri a nullát, akkor ugye az utolsó művelet nem hajtódott
végre. Ez történik ilyenkor is, mivel nem billen vissza a STOP bit.

   Viszont találtam egy érdekes dolgot:
Ha az utolsó byte után mégegyet kiküldök és utána azonnal
STOP-ot adok, akkor megy szépen. Ha viszont kiugrok az I2C rutinból és
csak a következő körben akarok STOP-olni, akkor van baj. A PCF9554 
adatlapjában
semmilyen utalást nem találtam erre. Letöltöttem egy appnote-ot is, de 
azzal sem vagyok
előrébb.

       Üdv.: Horváth Zsolt

I2C_COMM_15:

    LDS        R16,TWCR
    SBRS    R16,TWINT
    RJMP    I2C_COMM_15_END

I2C_COMM_15_CHECK_INT:
    LDS        R16,TWSR                    ;BEOLVASSUK A VÁLASZUL KAPOTT 
KÓDOT
    ANDI    R16,0xF8                    ;LEMASZKOLJUK A FÖLÖSLEGES BITEKET
    CPI        R16,I2C_TWSR_VAL_MA_TX_DATA_ACK    ;SIKERES VOLT AZ ÁTVITEL?
    BRNE    I2C_COMM_15_MINOR_ERROR        ;HA NEM, HIBA

    LDI        R16, ( 1<<TWINT ) | ( 1<<TWEN ) | ( 1<<TWSTO )    ;'STOP'
    STS        TWCR, R16

    LDI        R16,16
    STS        CORE_I2C_PTR,R16            ;A KÖVETKEZŐ MŰVELETRE MUTATUNK
    RCALL    I2C_COMM_FILL_SAFE_COUNTERS
    ;FELTÖLTJÜK A BIZTONSÁGI SZÁMLÁLÓT

I2C_COMM_15_END:
    RJMP    I2C_COMM_END

I2C_COMM_15_MINOR_ERROR:
    RJMP    I2C_COMM_MINOR_ERROR






More information about the Elektro mailing list