Project

General

Profile

Revision 240c122b

ID240c122b559dc54f7b743879a6cafa694ad3d6f0
Parent 6185434e
Child b3a1dae4

Added by Thomas Mullins over 10 years ago

Implemented tiny-twi reading

View differences:

scout_avr/bom/tiny-twi.c
24 24
uint8_t recv_idx;
25 25
uint8_t recv_data[RECV_BUF_SIZE];
26 26
slave_rx_t onDataRecieved;
27
uint8_t temp;
27 28

  
28 29
static void twi_set_ctr(char n) {
29 30
  USISR = n;
......
69 70
  state = is_read? SEND_READ_ACK : SEND_WRITE_ACK;
70 71
}
71 72

  
73
static void twi_send_data() {
74
  twi_set_ctr(0);
75
  // TODO set USIDR from buffer
76
  USIDR = ++temp;
77
  DDRB |= _BV(SDA);
78
  state = SEND_DATA;
79
}
80

  
81
static void twi_recv_ack() {
82
  twi_set_ctr(14);
83
  DDRB &= ~_BV(SDA);
84
  state = RECV_ACK;
85
}
86

  
72 87
ISR(USI_START_vect) {
73 88
  twi_start();
74 89
}
......
109 124
      break;
110 125

  
111 126
    case SEND_READ_ACK:
112
      DDRB &= ~_BV(SDA);
113
      // TODO write to USIDR
114
      state = SEND_DATA;
127
      twi_send_data();
115 128
      break;
116 129

  
117 130
    case SEND_DATA:
131
      twi_recv_ack();
118 132
      break;
119 133

  
120 134
    case RECV_ACK:
135
      if (input & 1) {
136
        // received nak
137
        twi_ready();
138
      } else {
139
        // received ack
140
        twi_send_data();
141
      }
121 142
      break;
122 143
  }
123 144
  USISR = _BV(USIOIF) | (USISR & 0xF);

Also available in: Unified diff