Project

General

Profile

Revision 16da2c8f

ID16da2c8f8fdf2fce5819ebc18437eb9a2e12c33a
Parent 4032e635
Child 90e5f3dd

Added by Thomas Mullins over 10 years ago

Added sink/release sda/scl

View differences:

scout_avr/bom/tiny-twi.c
25 25
  USISR |= n;
26 26
}
27 27

  
28
static void twi_release_scl() {
29
  DDRB &= ~_BV(DDB2);
30
}
31

  
32
static void twi_sink_sda() {
33
  DDRB |= _BV(DDB0);
34
}
35

  
36
static void twi_release_sda() {
37
  DDRB &= ~_BV(DDB0);
38
}
39

  
28 40
static void twi_ready() {
29 41

  
30 42
  // enable start condition interrupt
......
33 45
  // disable counter overflow interrupt
34 46
  USICR &= ~_BV(USIOIE);
35 47

  
36
  // TODO somehow release SCL following the ovf interrupt
37

  
38 48
  state = IDLE;
39 49
}
40 50

  
......
57 67

  
58 68
  // set SDA low
59 69
  USIDR = 0;
70
  twi_sink_sda();
60 71

  
61 72
  // set state
62 73
  state = is_read? SEND_READ_ACK : SEND_WRITE_ACK;
......
86 97
      break;
87 98

  
88 99
    case SEND_WRITE_ACK:
100
      twi_release_sda();
89 101
      state = RECV_DATA;
90 102
      break;
91 103

  
......
100 112
      break;
101 113

  
102 114
    case SEND_READ_ACK:
115
      twi_release_sda();
103 116
      // TODO write to USIDR
104 117
      state = SEND_DATA;
105 118
      break;
......
110 123
    case RECV_ACK:
111 124
      break;
112 125
  }
126
  twi_release_scl();
113 127
}
114 128

  
129
<<<<<<< HEAD
115 130
void smb_init(slave_rx_t callback) {
116 131
  state = START;
117 132

  
133
=======
134
void smb_init() {
135
>>>>>>> Added sink/release sda/scl
118 136
  // TODO do we want USICS0 (3)?
119 137
  USICR = _BV(USIWM1) | _BV(USIWM0) | _BV(USICS1);
120 138
  twi_ready();

Also available in: Unified diff