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