488 lines
24 KiB
Plaintext
488 lines
24 KiB
Plaintext
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.01, COMPILATION OF MODULE TWI
|
||
OBJECT MODULE PLACED IN .\output\TWI.obj
|
||
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\TWI.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Load.OR
|
||
-C) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\code_c
|
||
-lassb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\TWI.lst) OBJECT(.\output\TWI.obj)
|
||
|
||
line level source
|
||
|
||
1 /********************************************************************************
|
||
2 Copyright (C), Sinowealth Electronic. Ltd.
|
||
3 Author: Sino
|
||
4 Version: V0.0
|
||
5 Date: 2020/04/26
|
||
6 History:
|
||
7 V2.0 2020/04/26 Preliminary
|
||
8 ********************************************************************************/
|
||
9 #include "Main.h"
|
||
10
|
||
11 #ifdef TWI_Hardware_Module
|
||
12
|
||
13 U8 code CRC8Table[256]=
|
||
14 { //120424-1 CRC Table
|
||
15 0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,
|
||
16 0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,
|
||
17 0xE0,0xE7,0xEE,0xE9,0xFC,0xFB,0xF2,0xF5,0xD8,0xDF,0xD6,0xD1,0xC4,0xC3,0xCA,0xCD,
|
||
18 0x90,0x97,0x9E,0x99,0x8C,0x8B,0x82,0x85,0xA8,0xAF,0xA6,0xA1,0xB4,0xB3,0xBA,0xBD,
|
||
19 0xC7,0xC0,0xC9,0xCE,0xDB,0xDC,0xD5,0xD2,0xFF,0xF8,0xF1,0xF6,0xE3,0xE4,0xED,0xEA,
|
||
20 0xB7,0xB0,0xB9,0xBE,0xAB,0xAC,0xA5,0xA2,0x8F,0x88,0x81,0x86,0x93,0x94,0x9D,0x9A,
|
||
21 0x27,0x20,0x29,0x2E,0x3B,0x3C,0x35,0x32,0x1F,0x18,0x11,0x16,0x03,0x04,0x0D,0x0A,
|
||
22 0x57,0x50,0x59,0x5E,0x4B,0x4C,0x45,0x42,0x6F,0x68,0x61,0x66,0x73,0x74,0x7D,0x7A,
|
||
23 0x89,0x8E,0x87,0x80,0x95,0x92,0x9B,0x9C,0xB1,0xB6,0xBF,0xB8,0xAD,0xAA,0xA3,0xA4,
|
||
24 0xF9,0xFE,0xF7,0xF0,0xE5,0xE2,0xEB,0xEC,0xC1,0xC6,0xCF,0xC8,0xDD,0xDA,0xD3,0xD4,
|
||
25 0x69,0x6E,0x67,0x60,0x75,0x72,0x7B,0x7C,0x51,0x56,0x5F,0x58,0x4D,0x4A,0x43,0x44,
|
||
26 0x19,0x1E,0x17,0x10,0x05,0x02,0x0B,0x0C,0x21,0x26,0x2F,0x28,0x3D,0x3A,0x33,0x34,
|
||
27 0x4E,0x49,0x40,0x47,0x52,0x55,0x5C,0x5B,0x76,0x71,0x78,0x7F,0x6A,0x6D,0x64,0x63,
|
||
28 0x3E,0x39,0x30,0x37,0x22,0x25,0x2C,0x2B,0x06,0x01,0x08,0x0F,0x1A,0x1D,0x14,0x13,
|
||
29 0xAE,0xA9,0xA0,0xA7,0xB2,0xB5,0xBC,0xBB,0x96,0x91,0x98,0x9F,0x8A,0x8D,0x84,0x83,
|
||
30 0xDE,0xD9,0xD0,0xD7,0xC2,0xC5,0xCC,0xCB,0xE6,0xE1,0xE8,0xEF,0xFA,0xFD,0xF4,0xF3
|
||
31 };
|
||
32 /*************************************************************************************************
|
||
33 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CRC8cal
|
||
34 * <20><> <20><>: *p<><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룻counter<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||
35 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
||
36 * <20><> <20><>: CRC8<43><38>ɢ
|
||
37 *************************************************************************************************/
|
||
38 U8 CRC8cal(U8 *p, U8 counter) //look-up table calculte CRC
|
||
39 {
|
||
40 1 U8 crc8 = 0;
|
||
41 1
|
||
42 1 for( ; counter > 0; counter--)
|
||
43 1 {
|
||
44 2 crc8 = CRC8Table[crc8^*p];
|
||
45 2 p++;
|
||
46 2 }
|
||
47 1 return(crc8);
|
||
48 1 }
|
||
49
|
||
50
|
||
51
|
||
52
|
||
53 /*************************************************************************************************
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 2
|
||
|
||
54 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TWICheckStatus
|
||
55 * <20><> <20><>: Status<75><73><EFBFBD><EFBFBD>ǰTWI<57><49>״̬
|
||
56 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
||
57 * <20><> <20><>: <20><><EFBFBD><EFBFBD>TWI<57>ĸ<EFBFBD><C4B8><EFBFBD>״̬<D7B4>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||
58 *************************************************************************************************/
|
||
59 BOOL TWICheckStatus(U8 Status)
|
||
60 {
|
||
61 1 BOOL Result = 1;
|
||
62 1 U16 timeoutcount = 48000; //Ӳ<><D3B2>IICʱtimeoutcount<6E><74><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IIC<49><43><EFBFBD>鱣<EFBFBD><E9B1A3>ԭֵ <20><><EFBFBD><EFBFBD>DEMO<4D><4F>
|
||
-<2D><>
|
||
63 1
|
||
64 1 while((TWICON&0x08)==0) //<2F>ȴ<EFBFBD>TWIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
|
||
65 1 {
|
||
66 2 McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
||
67 2 if(timeoutcount)
|
||
68 2 {
|
||
69 3 timeoutcount--;
|
||
70 3 }
|
||
71 2 else
|
||
72 2 {
|
||
73 3 break;
|
||
74 3 }
|
||
75 2 }
|
||
76 1 if((TWISTA&0xf8) != Status)
|
||
77 1 {
|
||
78 2 Result = 0; //Error
|
||
79 2 }
|
||
80 1
|
||
81 1 return Result;
|
||
82 1 }
|
||
83
|
||
84
|
||
85
|
||
86
|
||
87 /*************************************************************************************************
|
||
88 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TwiWrite
|
||
89 * <20><> <20><>: SlaveID: Slave ID
|
||
90 WrAddr: д<><D0B4><EFBFBD><EFBFBD>ַ
|
||
91 AddrType<70><65><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1Byte<74><65>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2Bytes
|
||
92 Length<74><68> <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>CRC<52>ֽڣ<D6BD>
|
||
93 CrcFlg<6C><67> TwiͨѶ<CDA8>Ƿ<EFBFBD>֧<EFBFBD><D6A7>CRCУ<43>飬0<E9A3AC><30><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>CRC<52><43>1<EFBFBD><31>֧<EFBFBD><D6A7>CRC
|
||
94 *WrBuf<75><66> д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD>ַ
|
||
95 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
||
96 * <20><> <20><>: Twiд<69><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>AFE<46><45>֧<EFBFBD><D6A7>CRC<52><43><EFBFBD><EFBFBD>RTC<54><43>EEPROM<4F><4D><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϊ2Bytes<65><73>
|
||
97 *************************************************************************************************/
|
||
98 BOOL TwiWrite(U8 SlaveID, U16 WrAddr, U8 AddrType, U8 Length, U8 CrcFlg, U8 xdata *WrBuf)
|
||
99 {
|
||
100 1 U8 i;
|
||
101 1 U8 TempBuf[4];
|
||
102 1 BOOL Result = 1;
|
||
103 1 U16 timeoutcount = 48000;
|
||
104 1
|
||
105 1 TempBuf[0] = SlaveID;
|
||
106 1 TempBuf[1] = (U8)WrAddr;
|
||
107 1 TempBuf[2] = *WrBuf;
|
||
108 1 TempBuf[3] = CRC8cal(TempBuf, 3);
|
||
109 1
|
||
110 1 if(Length > 0)
|
||
111 1 {
|
||
112 2 HTimeoutChk();
|
||
113 2 TWICON = 0x60; //Start
|
||
114 2 if((!TWICheckStatus(0x08))&&(!TWICheckStatus(0x10)))
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 3
|
||
|
||
115 2 {
|
||
116 3 Result = 0;
|
||
117 3 goto WrErr;
|
||
118 3 }
|
||
119 2
|
||
120 2 TWIDAT = SlaveID; //Slave<76><65>ַ
|
||
121 2 TWICON = 0x40;
|
||
122 2 if(!TWICheckStatus(0x18))
|
||
123 2 {
|
||
124 3 Result = 0;
|
||
125 3 goto WrErr;
|
||
126 3 }
|
||
127 2
|
||
128 2 if(AddrType == TWI_ADDR_2B)
|
||
129 2 {
|
||
130 3 TWIDAT = (U8)(WrAddr>>8); //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>ַ-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
|
||
131 3 TWICON = 0x40;
|
||
132 3 if(!TWICheckStatus(0x28))
|
||
133 3 {
|
||
134 4 Result = 0;
|
||
135 4 goto WrErr;
|
||
136 4 }
|
||
137 3 }
|
||
138 2
|
||
139 2 TWIDAT = (U8)WrAddr; //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
140 2 TWICON = 0x40;
|
||
141 2 if(!TWICheckStatus(0x28))
|
||
142 2 {
|
||
143 3 Result = 0;
|
||
144 3 goto WrErr;
|
||
145 3 }
|
||
146 2
|
||
147 2 if(CrcFlg == TWI_CRC_YES) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дAFE<46>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>дһ<D0B4><D2BB><EFBFBD>ֽ<EFBFBD>+CRC
|
||
148 2 {
|
||
149 3 TWIDAT = *WrBuf; //Write Data
|
||
150 3 TWICON = 0x40;
|
||
151 3 if(!TWICheckStatus(0x28))
|
||
152 3 {
|
||
153 4 Result = 0;
|
||
154 4 goto WrErr;
|
||
155 4 }
|
||
156 3
|
||
157 3 TWIDAT = TempBuf[3]; //Write CRC
|
||
158 3 TWICON = 0x40;
|
||
159 3 if(!TWICheckStatus(0x28))
|
||
160 3 {
|
||
161 4 Result = 0;
|
||
162 4 goto WrErr;
|
||
163 4 }
|
||
164 3 }
|
||
165 2 else //дEEPROM<4F><4D>RTC
|
||
166 2 {
|
||
167 3 for(i=0; i<Length; i++)
|
||
168 3 {
|
||
169 4 TWIDAT = *WrBuf;
|
||
170 4 TWICON = 0x40;
|
||
171 4 if(!TWICheckStatus(0x28))
|
||
172 4 {
|
||
173 5 Result = 0;
|
||
174 5 goto WrErr;
|
||
175 5 }
|
||
176 4 WrBuf++;
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 4
|
||
|
||
177 4 }
|
||
178 3 }
|
||
179 2 WrErr:
|
||
180 2 TWICON = 0x50;
|
||
181 2 while((TWICON&0x10)!=0)
|
||
182 2 {
|
||
183 3 McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
||
184 3 if(timeoutcount)
|
||
185 3 {
|
||
186 4 timeoutcount--;
|
||
187 4 }
|
||
188 3 else
|
||
189 3 {
|
||
190 4 break;
|
||
191 4 }
|
||
192 3 }
|
||
193 2 }
|
||
194 1
|
||
195 1 return Result;
|
||
196 1 }
|
||
197
|
||
198
|
||
199 /*************************************************************************************************
|
||
200 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TwiRead
|
||
201 * <20><> <20><>: SlaveID: Slave ID
|
||
202 RdAddr: <20><>ȡ<EFBFBD><C8A1>ַ
|
||
203 AddrType<70><65><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1Byte<74><65>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2Bytes
|
||
204 Length<74><68> <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>CRC<52>ֽڣ<D6BD>
|
||
205 CrcFlg<6C><67> TwiͨѶ<CDA8>Ƿ<EFBFBD>֧<EFBFBD><D6A7>CRCУ<43>飬0<E9A3AC><30><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>CRC<52><43>1<EFBFBD><31>֧<EFBFBD><D6A7>CRC
|
||
206 *RdBuf<75><66> <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD>ַ
|
||
207 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
||
208 * <20><> <20><>: Twi<77><69>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡAFE<46><45>֧<EFBFBD><D6A7>CRC<52><43><EFBFBD><EFBFBD>RTC<54><43>EEPROM<4F><4D><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϊ2Bytes<65><73>
|
||
209 *************************************************************************************************/
|
||
210 BOOL TwiRead(U8 SlaveID, U16 RdAddr, U8 AddrType, U8 Length, U8 CrcFlg, U8 xdata *RdBuf)
|
||
211 {
|
||
212 1 BOOL Result = 1;
|
||
213 1 U8 i;
|
||
214 1 U8 xdata TempBuf[46]; //AFEһ<45><D2BB><EFBFBD>Զ<EFBFBD>ȡ2Bytes+CRC
|
||
215 1 U8 RdCrc = 0;
|
||
216 1 U16 timeoutcount = 48000;
|
||
217 1
|
||
218 1 TempBuf[0] = SlaveID; //<2F><><EFBFBD>浽TempBuf<75><66><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϊ<EFBFBD>˼<EFBFBD><CBBC><EFBFBD>CRC<52><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AFE<46><45>ȡ
|
||
219 1 TempBuf[1] = (U8)RdAddr;
|
||
220 1 //TempBuf[2] = Length;
|
||
221 1 TempBuf[2] = SlaveID | 0x01;
|
||
222 1
|
||
223 1 if(Length > 0)
|
||
224 1 {
|
||
225 2 HTimeoutChk();
|
||
226 2 TWICON = 0x60; //Start
|
||
227 2 if((!TWICheckStatus(0x08))&&(!TWICheckStatus(0x10)))
|
||
228 2 {
|
||
229 3 Result = 0;
|
||
230 3 goto RdErr;
|
||
231 3 }
|
||
232 2
|
||
233 2 TWIDAT = SlaveID; //<2F><><EFBFBD><EFBFBD>Slaveд<65><D0B4>ַ
|
||
234 2 TWICON = 0x40;
|
||
235 2 if(!TWICheckStatus(0x18))
|
||
236 2 {
|
||
237 3 Result = 0;
|
||
238 3 goto RdErr;
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 5
|
||
|
||
239 3 }
|
||
240 2
|
||
241 2 if(AddrType == TWI_ADDR_2B) //<2F><>ַΪ2Bytes
|
||
242 2 {
|
||
243 3 TWIDAT = (U8)(RdAddr>>8); //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>ַ-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
|
||
244 3 TWICON = 0x40;
|
||
245 3 if(!TWICheckStatus(0x28))
|
||
246 3 {
|
||
247 4 Result = 0;
|
||
248 4 goto RdErr;
|
||
249 4 }
|
||
250 3 }
|
||
251 2
|
||
252 2 TWIDAT = (U8)RdAddr; //<2F><><EFBFBD>ͼĴ<CDBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>ַ
|
||
253 2 TWICON = 0x40;
|
||
254 2 if(!TWICheckStatus(0x28))
|
||
255 2 {
|
||
256 3 Result = 0;
|
||
257 3 goto RdErr;
|
||
258 3 }
|
||
259 2
|
||
260 2 // if(SlaveID != AFE_ID)
|
||
261 2 // {
|
||
262 2 // TWIDAT = Length; //<2F><><EFBFBD>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
263 2 // TWICON = 0x40;
|
||
264 2 // if(!TWICheckStatus(0x28))
|
||
265 2 // {
|
||
266 2 // Result = 0;
|
||
267 2 // goto RdErr;
|
||
268 2 // }
|
||
269 2 // }
|
||
270 2
|
||
271 2 TWICON = 0x60; //<2F><><EFBFBD><EFBFBD>RStart
|
||
272 2 if((!TWICheckStatus(0x08))&&(!TWICheckStatus(0x10)))
|
||
273 2 {
|
||
274 3 Result = 0;
|
||
275 3 goto RdErr;
|
||
276 3 }
|
||
277 2
|
||
278 2 TWIDAT = SlaveID|0x01; //<2F><><EFBFBD><EFBFBD>Slave<76><65><EFBFBD><EFBFBD>ַ
|
||
279 2 TWICON = 0x40;
|
||
280 2 if(!TWICheckStatus(0x40))
|
||
281 2 {
|
||
282 3 Result = 0;
|
||
283 3 goto RdErr;
|
||
284 3 }
|
||
285 2
|
||
286 2 for(i=0; i<Length; i++)
|
||
287 2 {
|
||
288 3 if((CrcFlg == TWI_CRC_NO)) //<2F><>֧<EFBFBD><D6A7>CRC
|
||
289 3 {
|
||
290 4 if(i == Length-1)
|
||
291 4 {
|
||
292 5 TWICON = 0x40; //<2F><><EFBFBD><EFBFBD>NACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ζ<EFBFBD>
|
||
293 5 TWICheckStatus(0x58);
|
||
294 5 }
|
||
295 4 else
|
||
296 4 {
|
||
297 5 TWICON = 0x44; //<2F><><EFBFBD><EFBFBD>ACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
298 5 TWICheckStatus(0x50);
|
||
299 5 }
|
||
300 4 *RdBuf = TWIDAT;
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 6
|
||
|
||
301 4 RdBuf++;
|
||
302 4 }
|
||
303 3 else //֧<><D6A7>CRC<52>ģ<EFBFBD><C4A3>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD>ʱBuf
|
||
304 3 {
|
||
305 4 TWICON = 0x44; //ACK
|
||
306 4 TWICheckStatus(0x50);
|
||
307 4 TempBuf[3+i] = TWIDAT;
|
||
308 4 }
|
||
309 3 }
|
||
310 2
|
||
311 2 if(CrcFlg == TWI_CRC_YES)
|
||
312 2 {
|
||
313 3 TWICON = 0x40; //No ACK
|
||
314 3 TWICheckStatus(0x58);
|
||
315 3 RdCrc = TWIDAT;
|
||
316 3 if(RdCrc == CRC8cal(TempBuf, 3+Length))
|
||
317 3 {
|
||
318 4 for(i=0; i<Length; i++)
|
||
319 4 {
|
||
320 5 *RdBuf = TempBuf[3+i];
|
||
321 5 RdBuf++;
|
||
322 5 }
|
||
323 4 }
|
||
324 3 else
|
||
325 3 {
|
||
326 4 Result = 0;
|
||
327 4 goto RdErr;
|
||
328 4 }
|
||
329 3 }
|
||
330 2 RdErr:
|
||
331 2 TWICON = 0x50; //TWI Stop
|
||
332 2 while((TWICON&0x10)!=0)
|
||
333 2 {
|
||
334 3 McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
||
335 3 if(timeoutcount)
|
||
336 3 {
|
||
337 4 timeoutcount--;
|
||
338 4 }
|
||
339 3 else
|
||
340 3 {
|
||
341 4 break;
|
||
342 4 }
|
||
343 3 }
|
||
344 2 }
|
||
345 1
|
||
346 1 return Result;
|
||
347 1 }
|
||
348
|
||
349
|
||
350 /*************************************************************************************************
|
||
351 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TwiInit
|
||
352 * <20><> <20><>: FreqKHz: <20><><EFBFBD><EFBFBD>TWIͨѶƵ<D1B6><C6B5>
|
||
353 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
|
||
354 * <20><> <20><>: <20><>ʼ<EFBFBD><CABC>TWI<57><49>ӳ<EFBFBD><D3B3>IO<49><4F>ͨѶƵ<D1B6>ʵ<EFBFBD>
|
||
355 //*************************************************************************************************/
|
||
356 //void TwiInit(void)
|
||
357 //{
|
||
358 // TWICR = 0x32; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SCL--P0.5<EFBFBD><EFBFBD>SDA--P0.4
|
||
359 // TWITOUT = 0x00; //<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>裬<EFBFBD><E8A3AC>оƬ<D0BE>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||
360 // TWIBR = (24000/TWI_FREQ_KHz-16)/2/1; //<2F><><EFBFBD>÷<EFBFBD><C3B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD>ʱ<EFBFBD>жϣ<D0B6>f=fsys/(16+2*CR*TWI
|
||
-BR)=24MHz/(16+2*16*TWIBR)=**KHz
|
||
361 // TWISTA = 0x06; //16<31><36>Ƶ
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 7
|
||
|
||
362 // TWICON = 0x40; //ENTWI <20><><EFBFBD><EFBFBD>ֹ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>ʱ
|
||
363 // TWTFREE = 0xff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||
364 // TWIDAT = 0x00;
|
||
365 //}
|
||
366
|
||
367 void TwiInit(void)
|
||
368 {
|
||
369 1 TWICR = 0x32; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SCL--P0.5<EFBFBD><EFBFBD>SDA--P0.4
|
||
370 1 TWITOUT = 0x00; //<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>裬<EFBFBD><E8A3AC>оƬ<D0BE>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||
371 1 TWISTA = 0x00;
|
||
372 1 TWIBR = (8000/TWI_FREQ_KHz-16)/2/1; //<2F><><EFBFBD>÷<EFBFBD><C3B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD>ʱ<EFBFBD>жϣ<D0B6>f=fsys/(16+2*CR*TWIBR)
|
||
-=24MHz/(16+2*16*TWIBR)=**KHz
|
||
373 1 TWISTA = 0x02; //16<31><36>Ƶ
|
||
374 1 // #if ((TWI_FREQ_KHz >= 10)&&(TWI_FREQ_KHz <= 400))
|
||
375 1 // {
|
||
376 1 // #if TWIBR1 < 256
|
||
377 1 // TWIBR = TWIBR1;
|
||
378 1 // TWISTA |= 0x06;
|
||
379 1 // #elif TWIBR2 < 256
|
||
380 1 // TWIBR = TWIBR2;
|
||
381 1 // TWISTA |= 0x04;
|
||
382 1 // #elif TWIBR3 < 256
|
||
383 1 // TWIBR = TWIBR3;
|
||
384 1 // TWISTA |= 0x02;
|
||
385 1 // #elif TWIBR4 < 256
|
||
386 1 // TWIBR = TWIBR4;
|
||
387 1 // TWISTA |= 0x00;
|
||
388 1 // #endif
|
||
389 1 // }
|
||
390 1 // #else
|
||
391 1 // {
|
||
392 1 // #error: "Please enter a number(TWI_FREQ_KHz) from 10 to 400!";
|
||
393 1 // }
|
||
394 1 //
|
||
395 1 // #endif
|
||
396 1
|
||
397 1 TWICON = 0x40; //ENTWI <20><><EFBFBD><EFBFBD>ֹ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>ʱ
|
||
398 1 TWTFREE = 0xff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||
399 1 TWIDAT = 0x00;
|
||
400 1 }
|
||
401
|
||
402
|
||
403 //void TwiInit(void)
|
||
404 //{
|
||
405 // U16 i,k;
|
||
406 // U8 j;
|
||
407 // TWICR = 0x32; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SCL--P0.5<EFBFBD><EFBFBD>SDA--P0.4
|
||
408 // TWITOUT = 0x00; //<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>裬<EFBFBD><E8A3AC>оƬ<D0BE>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||
409 // i = (24000/TWI_FREQ_KHz-16)/2; //<2F><><EFBFBD>÷<EFBFBD><C3B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD>ʱ<EFBFBD>жϣ<D0B6>f=fsys/(16+2*CR*TWIBR)=24
|
||
-MHz/(16+2*16*TWIBR)=**KHz
|
||
410 // for(j=1;j<4;j++)
|
||
411 // {
|
||
412 // k =1<<(2*j-2);
|
||
413 // if(i / k <= 255)
|
||
414 // {
|
||
415 // TWIBR = i / k;
|
||
416 // switch (j)
|
||
417 // {
|
||
418 // case 1:
|
||
419 // TWISTA = 0x00;
|
||
420 // break;
|
||
421 //
|
||
C51 COMPILER V9.01 TWI 02/13/2025 10:07:28 PAGE 8
|
||
|
||
422 // case 2:
|
||
423 // TWISTA = 0x02;
|
||
424 // break;
|
||
425 //
|
||
426 // case 3:
|
||
427 // TWISTA = 0x04;
|
||
428 // break;
|
||
429 //
|
||
430 // case 4:
|
||
431 // TWISTA = 0x06;
|
||
432 // break;
|
||
433 // }
|
||
434 // goto loop;
|
||
435 // }
|
||
436 // }
|
||
437 //loop:
|
||
438 //// TWISTA = 0x06; //16<31><36>Ƶ
|
||
439 // TWICON = 0x40; //ENTWI <20><><EFBFBD><EFBFBD>ֹ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>ʱ
|
||
440 // TWTFREE = 0xff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||
441 // TWIDAT = 0x00;
|
||
442 //}
|
||
443
|
||
444 #endif
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 858 ----
|
||
CONSTANT SIZE = 256 ----
|
||
XDATA SIZE = ---- 72
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = ---- ----
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- 3
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|