1 | int AC1;
|
2 | int AC2;
|
3 | int AC3;
|
4 | unsigned int AC4;
|
5 | unsigned int AC5;
|
6 | unsigned int AC6;
|
7 | int B1;
|
8 | int B2;
|
9 | int MB;
|
10 | int MC;
|
11 | int MD;
|
12 |
|
13 |
|
14 | long B5;
|
15 | unsigned long p;
|
16 |
|
17 |
|
18 |
|
19 | void Temp180(void){
|
20 | unsigned int UT;
|
21 | long X1;
|
22 | long X2;
|
23 |
|
24 | UCB0CTL1 = UCSWRST;
|
25 | UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC; // I2C master mode
|
26 | UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
|
27 | UCB0BR0 = 0x29; // < 400 kHz
|
28 | UCB0I2CSA = 0x77; // address
|
29 | UCB0CTL1 &= ~UCSWRST;
|
30 |
|
31 |
|
32 | //write start temperature
|
33 | UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
|
34 | while (!(IFG2 & UCB0TXIFG));
|
35 | UCB0TXBUF = 0xF4;
|
36 | while (!(IFG2 & UCB0TXIFG));
|
37 | UCB0TXBUF = 0x2E;
|
38 | while (!(IFG2 & UCB0TXIFG));
|
39 | UCB0CTL1 = UCSSEL_2 + UCTXSTP;
|
40 | while (UCB0CTL1 & UCTXSTP);
|
41 |
|
42 | _delay_cycles(80000);//5 ms
|
43 |
|
44 |
|
45 | //go to register
|
46 | UCB0CTL1 = UCSSEL_2 + UCTR + UCTXSTT; // I2C RX, start condition
|
47 | while (!(IFG2 & UCB0TXIFG));
|
48 | UCB0TXBUF = 0xF6;
|
49 | while (!(IFG2 & UCB0TXIFG));
|
50 |
|
51 | //read register
|
52 | UCB0CTL1 = UCSSEL_2 + UCTXSTT; // I2C RX, start condition
|
53 | while (!(IFG2 & UCB0RXIFG));
|
54 | UT = UCB0RXBUF<<8;
|
55 | while (!(IFG2 & UCB0RXIFG));
|
56 | UT += UCB0RXBUF;
|
57 |
|
58 |
|
59 | UCB0CTL1 = UCSSEL_2 + UCTXSTP;
|
60 | while (UCB0CTL1 & UCTXSTP);
|
61 |
|
62 | //Temp
|
63 | X1 = (((long)UT-AC6)*AC5)>>15;
|
64 |
|
65 | //X3 = MC;
|
66 | X2 = ((long)MC<<11)/(X1+MD);
|
67 |
|
68 | B5 = X1 + X2;
|
69 |
|
70 | }
|
71 |
|
72 | void Pres180(){
|
73 | unsigned long UP;
|
74 | long X1;
|
75 | long X2;
|
76 | long X3;
|
77 | unsigned long X4;
|
78 | long B3;
|
79 | unsigned long B4;
|
80 | long B6;
|
81 | unsigned long B7;
|
82 |
|
83 |
|
84 | UCB0CTL1 = UCSWRST;
|
85 | UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC; // I2C master mode
|
86 | UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
|
87 | UCB0BR0 = 0x29; // < 400 kHz
|
88 | UCB0I2CSA = 0x77; // address
|
89 | UCB0CTL1 &= ~UCSWRST;
|
90 |
|
91 |
|
92 | //write start pres
|
93 | UCB0CTL1 = UCSSEL_2 + UCTR + UCTXSTT; // I2C TX, start condition
|
94 | while (!(IFG2 & UCB0TXIFG));
|
95 | UCB0TXBUF = 0xF4;
|
96 | while (!(IFG2 & UCB0TXIFG));
|
97 | UCB0TXBUF = 0xF4;
|
98 | while (!(IFG2 & UCB0TXIFG));
|
99 | UCB0CTL1 = UCSSEL_2 + UCTXSTP;
|
100 | while (UCB0CTL1 & UCTXSTP);
|
101 | _delay_cycles(416000);//26 ms
|
102 |
|
103 | //go to register
|
104 | UCB0CTL1 = UCSSEL_2 + UCTR + UCTXSTT; // I2C RX, start condition
|
105 | while (!(IFG2 & UCB0TXIFG));
|
106 | UCB0TXBUF = 0xF6;
|
107 | while (!(IFG2 & UCB0TXIFG));
|
108 |
|
109 | //read register
|
110 | UCB0CTL1 = UCSSEL_2 + UCTXSTT; // I2C RX, start condition
|
111 | while (!(IFG2 & UCB0RXIFG));
|
112 | UP = UCB0RXBUF;
|
113 | //blaa[0] = UCB0RXBUF;
|
114 | while (!(IFG2 & UCB0RXIFG));
|
115 | UP = (UP<<8) + UCB0RXBUF;
|
116 | //blaa[1] = UCB0RXBUF;
|
117 | while (!(IFG2 & UCB0RXIFG));
|
118 | UP = (UP<<8) + UCB0RXBUF;
|
119 | //blaa[2] = UCB0RXBUF;
|
120 |
|
121 | UCB0CTL1 = UCSSEL_2 + UCTXSTP;
|
122 | while (UCB0CTL1 & UCTXSTP);
|
123 |
|
124 | UP = UP>>5;
|
125 |
|
126 |
|
127 |
|
128 |
|
129 | //Pres
|
130 | B6 = (signed long)(B5)-4000;
|
131 | X1 = (((B6*B6)>>12)*B2)>>11;
|
132 | X2 = (AC2*B6)>>11;
|
133 | X3 = X1 + X2;
|
134 | B3 = (((((long)AC1<<2)+X3)<<3)+2)>>2;
|
135 | X1 = (AC3*B6)>>13;
|
136 | X2 = (((B6*B6)>>12)*B1)>>16;
|
137 | X3 = (X1 + X2 + 2)>>4;
|
138 |
|
139 | if ((X3 + 32768) < 0){X4 = ~(X3 + 32767);}
|
140 | else{X4 = X3 + 32768;}
|
141 | B4 = (AC4*X4)>>15;
|
142 | B7 = (UP-B3)*(50000>>3);
|
143 | if (B7 < 0x80000000){p = (B7<<1)/B4;}
|
144 | else{p = (B7/B4)<<1;}
|
145 | X1 = (p>>8)*(p>>8);
|
146 | X1 = (X1*3038)>>16;
|
147 | X2 = (7357*p)>>16;
|
148 | p = p + (X1 - X2 + 3791)<<4;
|
149 |
|
150 |
|
151 |
|
152 |
|
153 | }
|