📄 iic_avr.lst
字号:
1 .file "IIC_AVR.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
55 .global IIC_BaudrateConfig
56 .data
59 IIC_BaudrateConfig:
60 0000 0C .byte 12
61 0001 00 .byte 0
62 0002 20 .byte 32
63 0003 00 .byte 0
64 .text
68 .global IIC_Init
70 IIC_Init:
1:IIC_AVR.c **** ///////////////////////////////////////////
2:IIC_AVR.c **** // IIC_AVR.C
3:IIC_AVR.c **** // Function: IIC driver for atmel mega16
4:IIC_AVR.c **** // Create : Guobg
5:IIC_AVR.c **** // Date : 20060113
6:IIC_AVR.c **** // Revision: 0.0
7:IIC_AVR.c **** ///////////////////////////////////////////
8:IIC_AVR.c **** // Modify History
9:IIC_AVR.c **** //
10:IIC_AVR.c **** ///////////////////////////////////////////
11:IIC_AVR.c **** #include "IIC_AVR.H"
12:IIC_AVR.c ****
13:IIC_AVR.c **** struct IIC_BUFFER IIC_Buffer_In; // IIC Input Buffer
14:IIC_AVR.c **** struct IIC_BUFFER IIC_Buffer_Out; // IIC Output Buffer
15:IIC_AVR.c **** //U8 ucIICSLA; // IIC Master Mode Destination Address,R/W
16:IIC_AVR.c **** U8 ucIICTimeoutCount; // IIC Time out counter
17:IIC_AVR.c **** U8 ucIICMode; // IIC Mode
18:IIC_AVR.c **** U8 ucIICError; // IIC Error code
19:IIC_AVR.c ****
20:IIC_AVR.c **** U8 ucIICAddress; // Myself IIC Address
21:IIC_AVR.c ****
22:IIC_AVR.c ****
23:IIC_AVR.c **** BP_CODE U8 IIC_BaudrateConfig[2][2] =
24:IIC_AVR.c **** {
25:IIC_AVR.c **** {
26:IIC_AVR.c **** IIC_BAUDRATE_TWBR_200K, IIC_BAUDRATE_TWPS_NODIV
27:IIC_AVR.c **** }
28:IIC_AVR.c **** , // Config for 200K
29:IIC_AVR.c **** {
30:IIC_AVR.c **** IIC_BAUDRATE_TWBR_100K, IIC_BAUDRATE_TWPS_NODIV
31:IIC_AVR.c **** } // Config for 100K
32:IIC_AVR.c **** };
33:IIC_AVR.c ****
34:IIC_AVR.c ****
35:IIC_AVR.c **** ///////////////////////////////////////////
36:IIC_AVR.c **** // IIC_Init
37:IIC_AVR.c **** // Function: Initlize IIC interface
38:IIC_AVR.c **** // Input:
39:IIC_AVR.c **** // ucSlaveAddr: SlaveAddr (1--127)
40:IIC_AVR.c **** // ucBaudrate: Baudrate index see IIC.H
41:IIC_AVR.c **** // Output:
42:IIC_AVR.c **** // NONE
43:IIC_AVR.c **** ///////////////////////////////////////////
44:IIC_AVR.c **** void IIC_Init(U8 ucSlaveAddr,U8 ucBaudrate)
45:IIC_AVR.c **** {
72 .LM1:
73 /* prologue: frame size=3 */
74 0000 CF93 push r28
75 0002 DF93 push r29
76 0004 CDB7 in r28,__SP_L__
77 0006 DEB7 in r29,__SP_H__
78 0008 2397 sbiw r28,3
79 000a 0FB6 in __tmp_reg__,__SREG__
80 000c F894 cli
81 000e DEBF out __SP_H__,r29
82 0010 0FBE out __SREG__,__tmp_reg__
83 0012 CDBF out __SP_L__,r28
84 /* prologue end (size=10) */
85 0014 8983 std Y+1,r24
86 0016 6A83 std Y+2,r22
46:IIC_AVR.c **** unsigned char i;
47:IIC_AVR.c **** //Initlize baudrate
48:IIC_AVR.c **** TWBR=IIC_BaudrateConfig[ucBaudrate][0];
88 .LM2:
89 0018 8A81 ldd r24,Y+2
90 001a 282F mov r18,r24
91 001c 3327 clr r19
92 001e C901 movw r24,r18
93 0020 820F add r24,r18
94 0022 931F adc r25,r19
95 0024 FC01 movw r30,r24
96 0026 E050 subi r30,lo8(-(IIC_BaudrateConfig))
97 0028 F040 sbci r31,hi8(-(IIC_BaudrateConfig))
98 002a 8081 ld r24,Z
99 002c 8093 2000 sts 32,r24
49:IIC_AVR.c **** TWSR=IIC_BaudrateConfig[ucBaudrate][1];
101 .LM3:
102 0030 8A81 ldd r24,Y+2
103 0032 282F mov r18,r24
104 0034 3327 clr r19
105 0036 C901 movw r24,r18
106 0038 820F add r24,r18
107 003a 931F adc r25,r19
108 003c FC01 movw r30,r24
109 003e E050 subi r30,lo8(-(IIC_BaudrateConfig+1))
110 0040 F040 sbci r31,hi8(-(IIC_BaudrateConfig+1))
111 0042 8081 ld r24,Z
112 0044 8093 2100 sts 33,r24
50:IIC_AVR.c ****
51:IIC_AVR.c **** //Set IIC Slave address, enable broadcast respond
52:IIC_AVR.c **** TWAR=(ucSlaveAddr<<1 | _BV(TWGCE));
114 .LM4:
115 0048 8981 ldd r24,Y+1
116 004a 9927 clr r25
117 004c 880F lsl r24
118 004e 991F rol r25
119 0050 8160 ori r24,lo8(1)
120 0052 8093 2200 sts 34,r24
53:IIC_AVR.c ****
54:IIC_AVR.c **** ucIICMode=IIC_MODE_SLAVE_RECEIVE; //Default mode
122 .LM5:
123 0056 81E0 ldi r24,lo8(1)
124 0058 8093 0000 sts ucIICMode,r24
55:IIC_AVR.c **** ucIICError=IIC_ERROR_NOERROR;
126 .LM6:
127 005c 1092 0000 sts ucIICError,__zero_reg__
56:IIC_AVR.c ****
57:IIC_AVR.c **** //Clear IIC buffer
58:IIC_AVR.c **** for(i=0;i<IIC_MAX_BUFFER_LEN;i++)
129 .LM7:
130 0060 1B82 std Y+3,__zero_reg__
131 .L2:
133 .LM8:
134 0062 8B81 ldd r24,Y+3
135 0064 8031 cpi r24,lo8(16)
136 0066 80F4 brsh .L3
59:IIC_AVR.c **** {
60:IIC_AVR.c **** IIC_Buffer_In.IIC_BUFFER_UNION.ucData[i]=0;
138 .LM9:
139 0068 8B81 ldd r24,Y+3
140 006a 9927 clr r25
141 006c FC01 movw r30,r24
142 006e E050 subi r30,lo8(-(IIC_Buffer_In))
143 0070 F040 sbci r31,hi8(-(IIC_Buffer_In))
144 0072 1082 st Z,__zero_reg__
61:IIC_AVR.c **** IIC_Buffer_Out.IIC_BUFFER_UNION.ucData[i]=0;
146 .LM10:
147 0074 8B81 ldd r24,Y+3
148 0076 9927 clr r25
149 0078 FC01 movw r30,r24
150 007a E050 subi r30,lo8(-(IIC_Buffer_Out))
151 007c F040 sbci r31,hi8(-(IIC_Buffer_Out))
152 007e 1082 st Z,__zero_reg__
154 .LM11:
155 0080 8B81 ldd r24,Y+3
156 0082 8F5F subi r24,lo8(-(1))
157 0084 8B83 std Y+3,r24
158 0086 EDCF rjmp .L2
159 .L3:
62:IIC_AVR.c **** }
63:IIC_AVR.c ****
64:IIC_AVR.c **** //Clear buffer status
65:IIC_AVR.c **** IIC_Buffer_In.ucReadP=0;
161 .LM12:
162 0088 1092 0000 sts IIC_Buffer_In+17,__zero_reg__
66:IIC_AVR.c **** IIC_Buffer_In.ucWriteP=0;
164 .LM13:
165 008c 1092 0000 sts IIC_Buffer_In+16,__zero_reg__
67:IIC_AVR.c **** IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0; //In Buffer Disable Access
167 .LM14:
168 0090 8091 0000 lds r24,IIC_Buffer_In+19
169 0094 8E7F andi r24,lo8(-2)
170 0096 8093 0000 sts IIC_Buffer_In+19,r24
68:IIC_AVR.c ****
69:IIC_AVR.c **** IIC_Buffer_Out.ucReadP=0;
172 .LM15:
173 009a 1092 0000 sts IIC_Buffer_Out+17,__zero_reg__
70:IIC_AVR.c **** IIC_Buffer_Out.ucWriteP=0;
175 .LM16:
176 009e 1092 0000 sts IIC_Buffer_Out+16,__zero_reg__
71:IIC_AVR.c **** IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;//Out Buffer Enable Access
178 .LM17:
179 00a2 8091 0000 lds r24,IIC_Buffer_Out+19
180 00a6 8160 ori r24,lo8(1)
181 00a8 8093 0000 sts IIC_Buffer_Out+19,r24
72:IIC_AVR.c ****
73:IIC_AVR.c **** // Clear TWINT , enabel TWI ack ,enable TWI port ,enable TWI Interrupt
74:IIC_AVR.c **** TWCR=(_BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE) );
183 .LM18:
184 00ac 85EC ldi r24,lo8(-59)
185 00ae 8093 5600 sts 86,r24
186 /* epilogue: frame size=3 */
187 00b2 2396 adiw r28,3
188 00b4 0FB6 in __tmp_reg__,__SREG__
189 00b6 F894 cli
190 00b8 DEBF out __SP_H__,r29
191 00ba 0FBE out __SREG__,__tmp_reg__
192 00bc CDBF out __SP_L__,r28
193 00be DF91 pop r29
194 00c0 CF91 pop r28
195 00c2 0895 ret
196 /* epilogue end (size=9) */
197 /* function IIC_Init size 98 (79) */
201 .global __vector_17
203 __vector_17:
75:IIC_AVR.c **** }
76:IIC_AVR.c ****
77:IIC_AVR.c ****
78:IIC_AVR.c **** ///////////////////////////////////////////
79:IIC_AVR.c **** // IIC_handle
80:IIC_AVR.c **** // Function: IIC Interrupt handler
81:IIC_AVR.c **** // Input:
82:IIC_AVR.c **** // NONE
83:IIC_AVR.c **** // Output:
84:IIC_AVR.c **** // NONE
85:IIC_AVR.c **** ///////////////////////////////////////////
86:IIC_AVR.c **** #ifdef ICC_AVR
87:IIC_AVR.c **** void IIC_handler(void)
88:IIC_AVR.c **** #endif
89:IIC_AVR.c **** #ifdef GCC_AVR
90:IIC_AVR.c **** SIGNAL(SIG_2WIRE_SERIAL)
91:IIC_AVR.c **** #endif
92:IIC_AVR.c **** {
205 .LM19:
206 /* prologue: frame size=3 */
207 00c4 1F92 push __zero_reg__
208 00c6 0F92 push __tmp_reg__
209 00c8 0FB6 in __tmp_reg__,__SREG__
210 00ca 0F92 push __tmp_reg__
211 00cc 1124 clr __zero_reg__
212 00ce 2F93 push r18
213 00d0 3F93 push r19
214 00d2 8F93 push r24
215 00d4 9F93 push r25
216 00d6 AF93 push r26
217 00d8 BF93 push r27
218 00da EF93 push r30
219 00dc FF93 push r31
220 00de CF93 push r28
221 00e0 DF93 push r29
222 00e2 CDB7 in r28,__SP_L__
223 00e4 DEB7 in r29,__SP_H__
224 00e6 2397 sbiw r28,3
225 00e8 DEBF out __SP_H__,r29
226 00ea CDBF out __SP_L__,r28
227 /* prologue end (size=20) */
93:IIC_AVR.c **** U8 ucTwiStatus;
94:IIC_AVR.c **** ucTwiStatus = (TWSR & TW_NO_INFO);
229 .LM20:
230 00ec 98EF ldi r25,lo8(-8)
231 00ee 8091 2100 lds r24,33
232 00f2 8923 and r24,r25
233 00f4 8983 std Y+1,r24
95:IIC_AVR.c **** switch(ucTwiStatus)
235 .LM21:
236 00f6 8981 ldd r24,Y+1
237 00f8 282F mov r18,r24
238 00fa 3327 clr r19
239 00fc 2A83 std Y+2,r18
240 00fe 3B83 std Y+3,r19
241 0100 8A81 ldd r24,Y+2
242 0102 9B81 ldd r25,Y+3
243 0104 8836 cpi r24,104
244 0106 9105 cpc r25,__zero_reg__
245 0108 09F4 brne .+2
246 010a 54C1 rjmp .L21
248 .LM22:
249 010c 2A81 ldd r18,Y+2
250 010e 3B81 ldd r19,Y+3
251 0110 2936 cpi r18,105
252 0112 3105 cpc r19,__zero_reg__
253 0114 0CF0 brlt .+2
254 0116 61C0 rjmp .L47
255 0118 8A81 ldd r24,Y+2
256 011a 9B81 ldd r25,Y+3
257 011c 8033 cpi r24,48
258 011e 9105 cpc r25,__zero_reg__
259 0120 09F4 brne .+2
260 0122 10C1 rjmp .L14
261 0124 2A81 ldd r18,Y+2
262 0126 3B81 ldd r19,Y+3
263 0128 2133 cpi r18,49
264 012a 3105 cpc r19,__zero_reg__
265 012c 2CF5 brge .L48
266 012e 8A81 ldd r24,Y+2
267 0130 9B81 ldd r25,Y+3
268 0132 8831 cpi r24,24
269 0134 9105 cpc r25,__zero_reg__
270 0136 09F4 brne .+2
271 0138 C0C0 rjmp .L10
272 013a 2A81 ldd r18,Y+2
273 013c 3B81 ldd r19,Y+3
274 013e 2931 cpi r18,25
275 0140 3105 cpc r19,__zero_reg__
276 0142 6CF4 brge .L49
277 0144 8A81 ldd r24,Y+2
278 0146 9B81 ldd r25,Y+3
279 0148 8830 cpi r24,8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -