ATmega128 + JTAG +I2C reloaded
Horvath Zsolt
hozso_001 at freemail.hu
Wed Aug 23 08:49:52 CEST 2006
Bali Zoltan írta:
>Hali !
>
>A kiadott STOP után is vársz a TWINT-re ?
>Mert STOP után már nincs TWINT bebillenés.
>A STOP bit törlődését mikor és hogyan vizsgálod ?
>
>
Természetesen STOP után már csak a STOP bit visszabillenését
figyelem: :-)
LDS R16,TWCR
SBRC R16,TWSTO ;A 'STOP'-NAK AKKOR VAN VÉGE,
HA A STOPBIT ÉRTÉKE '0'-RA VÁLTOTT VISSZA
RJMP I2C_COMM_16_END
I2C_COMM_16_CHECK_INT: ;MIVEL AZ 'STO' BIT VISSZABILLENT ALACSONYBA,
BEFEJEZŐDÖTT A 'STOP' KIADÁSA
LDI R16,(1<<TWINT) | (1<<TWSTA) | (1<<TWEN) ;KIADJUK A
'START' FELTÉTELT
STS TWCR,R16
LDI R16,17
STS CORE_I2C_PTR,R16
RCALL I2C_COMM_FILL_SAFE_COUNTERS
;FELTÖLTJÜK A BIZTONSÁGI SZÁMLÁLÓT
I2C_COMM_16_END:
RJMP I2C_COMM_END
Mégegyszer : egyrészt a nagykönyv szerinti rutinokat használom
(assembly
ami persze attól még lehet hibás, hogy a nagy könyv írja) másrészt
ugyanezen
rutinok a PCF8774-el tökéletesen működnek... ;-)
>Én a STOP-ot igy adom ki:
>
>{ // Beg. IT
> switch (status)
> {
> ...
> ....
> case TW_MT_DATA_NACK:
> action = BV(TWSTO);
> break;
> ........
> ......
> .....
> }
> outb(TWCR, ( inb(TWCR) & TWCR_CMD_MASK) | BV(TWINT) | action );
>} // End IT
>
>Ahogy ráirja a TWCR-re a fenti outb( sort, nálam JTAG alatt be se billen a TWSTO bit,
>a következő sorban, de a STOP-ot megcsinálja.
>
>
Amikor jól működik, akkor nálam is így megy. De itt nem billen
vissza a STOP,
"beragad".
>Szkóp vagy MiniLA nincs kéznél ? Nekem TWI-nél mindig kellett ( DSO ).
>
Hm. Az első I2C-s rutinjaimat PIC-re írtam, két kontroller
beszélgetett egymással. Mai napig
ezeket a rutinokat használom, eddig atombiztos. Szkóp DSO meg minden
nélkül írtam meg.
Igaz, rá ment vagy 2-3 hetem, teljes munkaidőben... ;-)
Mi az a MiniLA?
Üdv.: Horváth Zsolt
More information about the Elektro
mailing list