]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
i2c.c
authorLeo C <erbl259-lmu@yahoo.de>
Tue, 26 Aug 2014 09:19:21 +0000 (11:19 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Tue, 26 Aug 2014 09:19:21 +0000 (11:19 +0200)
avr/Tupfile
avr/i2c.c

index 61cb577024655ecfb11b874d5d0c89d741a2280b..9227f2b769040e887a7e07ec26654958e2b1fee7 100644 (file)
@@ -52,9 +52,12 @@ CFLAGS       += -ffunction-sections
 CFLAGS += -fdata-sections
 CFLAGS += -fno-tree-loop-optimize
 CFLAGS += -fno-move-loop-invariants
+CFLAGS += -fno-split-wide-types
 #CFLAGS        += -flto
 CFLAGS += -fshort-enums
 
+#CFLAGS        +=  -fdiagnostics-color=always
+
 #CFLAGS        += -save-temps
 
 
index 5d414afc6964079b9b949ac907dca203eb3e76e5..dbb5da15e19ec122e69bba24894d1f3e2710cfbd 100644 (file)
--- a/avr/i2c.c
+++ b/avr/i2c.c
@@ -134,21 +134,11 @@ ISR(TWI_vect)
                break;
 
        case TWI_MTX_ADR_ACK:
-               tmp_stat |= ADDR_ACK;
-               
-               if (tmp_idx < xmit.len) {               /* all bytes transmited? */
-                       TWDR = xmit.buf[tmp_idx];
-                       ++tmp_idx;
-                       next_twcr = (1<<TWEN)|(1<<TWIE)|(1<<TWINT);
-               } else {
-                       tmp_stat |= XMIT_DONE;
-                       tmp_stat &= ~BUSY;
-                       next_twcr = (1<<TWEN)|(0<<TWIE)|(1<<TWINT)|(1<<TWSTO);
-               }
-               break;
-
        case TWI_MTX_DATA_ACK:
-               tmp_stat |= DATA_ACK;
+               if ((twsr&0xf8) == TWI_MTX_ADR_ACK)
+                       tmp_stat |= ADDR_ACK;
+               else
+                       tmp_stat |= DATA_ACK;
 
                if (tmp_idx < xmit.len) {               /* all bytes transmited? */
                        TWDR = xmit.buf[tmp_idx];
@@ -159,7 +149,6 @@ ISR(TWI_vect)
                        tmp_stat &= ~BUSY;
                        next_twcr = (1<<TWEN)|(0<<TWIE)|(1<<TWINT)|(1<<TWSTO);
                }
-
                break;
 
        case TWI_MTX_DATA_NACK:
@@ -168,25 +157,20 @@ ISR(TWI_vect)
                next_twcr = (1<<TWEN)|(0<<TWIE)|(1<<TWINT)|(1<<TWSTO);
                break;
 
-       case TWI_MRX_ADR_ACK:
-               tmp_stat |= ADDR_ACK;
-               n = xmit.len-1;
-               if (tmp_idx < n) {
-                       next_twcr = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA);
-               } else {
-                       next_twcr = (1<<TWEN)|(1<<TWIE)|(1<<TWINT);
-               }
-               break;
-
        case TWI_MRX_DATA_ACK:
-               tmp_stat |= DATA_ACK;
                xmit.buf[tmp_idx] = TWDR;
                ++tmp_idx;
+               /* fall thru */
+       case TWI_MRX_ADR_ACK:
+               if ((twsr&0xf8) == TWI_MRX_ADR_ACK)
+                       tmp_stat |= ADDR_ACK;
+               else
+                       tmp_stat |= DATA_ACK;
+
                n = xmit.len-1;
                if (tmp_idx < n) {
                        next_twcr = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA);
                } else {
-               
                        next_twcr = (1<<TWEN)|(1<<TWIE)|(1<<TWINT);
                }
                break;
@@ -197,7 +181,6 @@ ISR(TWI_vect)
                xmit.buf[tmp_idx] = TWDR;
                ++tmp_idx;
                /* fall thru */
-
        default:
                tmp_stat &= ~BUSY;
                next_twcr = (1<<TWEN)|(0<<TWIE)|(1<<TWINT)|(1<<TWSTO);