i2c.c


1
#include "main.h"
2
3
int i2caddr1;
4
int i2caddr2;
5
int i2caddr3;
6
7
void i2c_readaddr_init(void) {
8
9
  I2CADDRDDR &= ~(1 << I2CADDR1PIN);
10
  I2CADDRDDR &= ~(1 << I2CADDR2PIN);
11
  I2CADDRDDR &= ~(1 << I2CADDR3PIN);
12
  
13
  I2CADDRPORT |= (1<<I2CADDR1PIN);
14
  I2CADDRPORT |= (1<<I2CADDR2PIN);
15
  I2CADDRPORT |= (1<<I2CADDR3PIN);
16
17
}
18
19
int i2c_readaddr(void) {
20
21
  if ( I2CADDRPIND & (1<<PINC2) ) {
22
      i2caddr1 = 1;
23
  } else {
24
    i2caddr1 = 0;  
25
  }
26
  
27
  if ( I2CADDRPIND & (1<<PINC1) ) {
28
      i2caddr2 = 1;
29
  } else {
30
    i2caddr2 = 0;  
31
  }
32
  
33
  if ( I2CADDRPIND & (1<<PINC0) ) {
34
      i2caddr3 = 1;
35
  } else {
36
    i2caddr3 = 0;  
37
  }
38
  
39
  // 000
40
  if (i2caddr1 == 0 && i2caddr2 == 0 && i2caddr3 == 0) {
41
    i2caddr = 1;
42
  }
43
  
44
  // 100
45
  if (i2caddr1 == 1 && i2caddr2 == 0 && i2caddr3 == 0) {
46
    i2caddr = 2;
47
  }
48
  
49
  // 110
50
  if (i2caddr1 == 1 && i2caddr2 == 1 && i2caddr3 == 0) {
51
    i2caddr = 3;
52
  }
53
  
54
  // 111
55
  if (i2caddr1 == 1 && i2caddr2 == 1 && i2caddr3 == 1) {
56
    i2caddr = 4;
57
  }
58
  
59
  // 101
60
  if (i2caddr1 == 1 && i2caddr2 == 0 && i2caddr3 == 1) {
61
    i2caddr = 5;
62
  }
63
  
64
  // 001
65
  if (i2caddr1 == 0 && i2caddr2 == 0 && i2caddr3 == 1) {
66
    i2caddr = 6;
67
  }
68
  
69
  // 010
70
  if (i2caddr1 == 0 && i2caddr2 == 1 && i2caddr3 == 0) {
71
    i2caddr = 7;
72
  }
73
  
74
   // 011
75
  if (i2caddr1 == 0 && i2caddr2 == 1 && i2caddr3 == 1) {
76
    i2caddr = 8;
77
  }
78
  
79
  return i2caddr;
80
}