?? comm.lst
字號:
1 .file "Comm.c"
2 .arch atmega8
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:
102 .global UartOverTime
103 .data
106 UartOverTime:
107 0000 01 .byte 1
108 0001 0000 .word 0
109 .global pComData
110 .section .progmem.data,"a",@progbits
113 pComData:
114 0000 0000 .word Detect_A1+1
115 0002 0000 .word Detect_A1
116 0004 0000 .word Detect_A0+1
117 0006 0000 .word Detect_A0
118 0008 0000 .word Detect_B1+1
119 000a 0000 .word Detect_B1
120 000c 0000 .word Detect_B0+1
121 000e 0000 .word Detect_B0
122 0010 0000 .word Detect_T0+1
123 0012 0000 .word Detect_T0
124 0014 0000 .word Detect_T1+1
125 0016 0000 .word Detect_T1
126 .text
128 .global __vector_11
130 __vector_11:
1:task/Comm.c **** /**********************************************
2:task/Comm.c **** 公司名稱:
3:task/Comm.c **** 文 件 名:Comm.c
4:task/Comm.c **** 版 本 號:
5:task/Comm.c **** 程序設計:
6:task/Comm.c **** 說 明:串行通信
7:task/Comm.c **** 完成日期:
8:task/Comm.c **** 修改日期:
9:task/Comm.c **** 功能摘要:
10:task/Comm.c **** ***********************************************/
11:task/Comm.c **** #define _CommV10
12:task/Comm.c **** #include "includes.h"
13:task/Comm.c ****
14:task/Comm.c **** #define TX 1
15:task/Comm.c **** #define RX 0
16:task/Comm.c **** #define UART_BUF_SIZE 17
17:task/Comm.c ****
18:task/Comm.c **** #define VAL_ADDR_MAX 0x0d //*pComData表格的長度
19:task/Comm.c **** #define FUN_DATA_ADDR_FIRST 0x30 //
20:task/Comm.c ****
21:task/Comm.c **** /*uint8 *pComData[] PROGMEM =
22:task/Comm.c **** {
23:task/Comm.c **** &((uint8 *)&Ps)[3], &((uint8 *)&Ps)[2], &((uint8 *)&Ps)[1],&((uint8 *)&Ps)[0],
24:task/Comm.c **** &((uint8 *)&PtVal)[1], &((uint8 *)&PtVal)[0],
25:task/Comm.c **** &((uint8 *)&H_Alarm)[1],&((uint8 *)&H_Alarm)[0],
26:task/Comm.c **** &((uint8 *)&L_Alarm)[1],&((uint8 *)&L_Alarm)[0],
27:task/Comm.c **** &BaudAndData,
28:task/Comm.c **** &AddrVal,
29:task/Comm.c **** &AlarmSwitch,
30:task/Comm.c ****
31:task/Comm.c **** };*/
32:task/Comm.c ****
33:task/Comm.c ****
34:task/Comm.c **** uint8 *pComData[] PROGMEM = //測試數據用。
35:task/Comm.c **** {
36:task/Comm.c **** &((uint8 *)&Detect_A1)[1],&((uint8 *)&Detect_A1)[0],
37:task/Comm.c **** &((uint8 *)&Detect_A0)[1],&((uint8 *)&Detect_A0)[0],
38:task/Comm.c **** &((uint8 *)&Detect_B1)[1],&((uint8 *)&Detect_B1)[0],
39:task/Comm.c **** &((uint8 *)&Detect_B0)[1],&((uint8 *)&Detect_B0)[0],
40:task/Comm.c **** &((uint8 *)&Detect_T0)[1],&((uint8 *)&Detect_T0)[0],
41:task/Comm.c **** &((uint8 *)&Detect_T1)[1],&((uint8 *)&Detect_T1)[0],
42:task/Comm.c ****
43:task/Comm.c **** };
44:task/Comm.c ****
45:task/Comm.c ****
46:task/Comm.c ****
47:task/Comm.c ****
48:task/Comm.c ****
49:task/Comm.c **** WAIT_TIME_STRUCT UartOverTime = {1,0};
50:task/Comm.c ****
51:task/Comm.c **** static uint8 UartReBuf[UART_BUF_SIZE];
52:task/Comm.c **** static uint8 UartTxBuf[UART_BUF_SIZE];
53:task/Comm.c **** static OS_Q UartReEvent;
54:task/Comm.c **** static OS_Q UartTxEvent;
55:task/Comm.c **** static volatile uchar fTx_done; //重新發送標志
56:task/Comm.c **** static volatile uchar fRx_start;
57:task/Comm.c ****
58:task/Comm.c **** void sendbuf(uchar temp);
59:task/Comm.c **** void Process_Msg(void);
60:task/Comm.c **** void UART_Init(void);
61:task/Comm.c **** void Baud_Init(uchar Baud_Reg);
62:task/Comm.c **** uint CRC16fromByte(uchar Byte, uint CRC16);
63:task/Comm.c **** uchar ValTab(uint8 com_data_index);
64:task/Comm.c ****
65:task/Comm.c **** //-------------------------------------------------
66:task/Comm.c **** SIGNAL (SIG_UART_RECV) //UART接收完成
67:task/Comm.c **** {
132 .LM1:
133 /* prologue: frame size=0 */
134 0000 1F92 push __zero_reg__
135 0002 0F92 push __tmp_reg__
136 0004 0FB6 in __tmp_reg__,__SREG__
137 0006 0F92 push __tmp_reg__
138 0008 1124 clr __zero_reg__
139 000a 2F93 push r18
140 000c 3F93 push r19
141 000e 4F93 push r20
142 0010 5F93 push r21
143 0012 6F93 push r22
144 0014 7F93 push r23
145 0016 8F93 push r24
146 0018 9F93 push r25
147 001a AF93 push r26
148 001c BF93 push r27
149 001e EF93 push r30
150 0020 FF93 push r31
151 /* prologue end (size=17) */
68:task/Comm.c **** OS_CLOSE_INT();
153 .LM2:
154 /* #APP */
155 0022 F894 cli
156 /* #NOAPP */
157 0024 8091 0000 lds r24,Os_Enter_Sum
158 0028 8F5F subi r24,lo8(-(1))
159 002a 8093 0000 sts Os_Enter_Sum,r24
69:task/Comm.c **** OSQPost(&UartReEvent,UDR); //向消息隊列發送一則消息UDR=msg,&UartReEvent數據的長度
161 .LM3:
162 002e 6CB1 in r22,44-0x20
163 0030 80E0 ldi r24,lo8(UartReEvent)
164 0032 90E0 ldi r25,hi8(UartReEvent)
165 0034 00D0 rcall OSQPost
70:task/Comm.c **** if (UartOverTime.fGetTime)
167 .LM4:
168 0036 8091 0000 lds r24,UartOverTime
169 003a 8823 tst r24
170 003c 29F0 breq .L2
71:task/Comm.c **** {
72:task/Comm.c **** UartOverTime.fGetTime = 0;
172 .LM5:
173 003e 1092 0000 sts UartOverTime,__zero_reg__
73:task/Comm.c **** fRx_start = 1;
175 .LM6:
176 0042 81E0 ldi r24,lo8(1)
177 0044 8093 0000 sts fRx_start,r24
178 .L2:
74:task/Comm.c **** }
75:task/Comm.c **** UartOverTime.WaitTime = _20MS;
180 .LM7:
181 0048 82E0 ldi r24,lo8(2)
182 004a 90E0 ldi r25,hi8(2)
183 004c 9093 0000 sts (UartOverTime+1)+1,r25
184 0050 8093 0000 sts UartOverTime+1,r24
76:task/Comm.c **** OS_OPEN_INT();
186 .LM8:
187 0054 8091 0000 lds r24,Os_Enter_Sum
188 0058 8150 subi r24,lo8(-(-1))
189 005a 8093 0000 sts Os_Enter_Sum,r24
190 005e 8091 0000 lds r24,Os_Enter_Sum
191 0062 8823 tst r24
192 0064 09F4 brne .L1
193 /* #APP */
194 0066 7894 sei
195 /* #NOAPP */
196 .L1:
197 /* epilogue: frame size=0 */
198 0068 FF91 pop r31
199 006a EF91 pop r30
200 006c BF91 pop r27
201 006e AF91 pop r26
202 0070 9F91 pop r25
203 0072 8F91 pop r24
204 0074 7F91 pop r23
205 0076 6F91 pop r22
206 0078 5F91 pop r21
207 007a 4F91 pop r20
208 007c 3F91 pop r19
209 007e 2F91 pop r18
210 0080 0F90 pop __tmp_reg__
211 0082 0FBE out __SREG__,__tmp_reg__
212 0084 0F90 pop __tmp_reg__
213 0086 1F90 pop __zero_reg__
214 0088 1895 reti
215 /* epilogue end (size=17) */
216 /* function __vector_11 size 71 (37) */
218 .Lscope0:
220 .global __vector_12
222 __vector_12:
77:task/Comm.c **** }
78:task/Comm.c ****
79:task/Comm.c **** //--------------------------------------------------
80:task/Comm.c **** SIGNAL (SIG_UART_DATA) //UART寄存器空
81:task/Comm.c **** {
224 .LM9:
225 /* prologue: frame size=1 */
226 008a 1F92 push __zero_reg__
227 008c 0F92 push __tmp_reg__
228 008e 0FB6 in __tmp_reg__,__SREG__
229 0090 0F92 push __tmp_reg__
230 0092 1124 clr __zero_reg__
231 0094 2F93 push r18
232 0096 3F93 push r19
233 0098 4F93 push r20
234 009a 5F93 push r21
235 009c 6F93 push r22
236 009e 7F93 push r23
237 00a0 8F93 push r24
238 00a2 9F93 push r25
239 00a4 AF93 push r26
240 00a6 BF93 push r27
241 00a8 EF93 push r30
242 00aa FF93 push r31
243 00ac CF93 push r28
244 00ae DF93 push r29
245 00b0 CDB7 in r28,__SP_L__
246 00b2 DEB7 in r29,__SP_H__
247 00b4 2197 sbiw r28,1
248 00b6 DEBF out __SP_H__,r29
249 00b8 CDBF out __SP_L__,r28
250 /* prologue end (size=24) */
82:task/Comm.c **** uint8 msg = 0;
252 .LM10:
253 00ba 1982 std Y+1,__zero_reg__
83:task/Comm.c ****
84:task/Comm.c **** OS_CLOSE_INT();
255 .LM11:
256 /* #APP */
257 00bc F894 cli
258 /* #NOAPP */
259 00be 8091 0000 lds r24,Os_Enter_Sum
260 00c2 8F5F subi r24,lo8(-(1))
261 00c4 8093 0000 sts Os_Enter_Sum,r24
85:task/Comm.c **** if (OSQAccept(&UartTxEvent,&msg) == OS_Q_OK //從消息隊列中取出消息
263 .LM12:
264 00c8 BE01 movw r22,r28
265 00ca 6F5F subi r22,lo8(-(1))
266 00cc 7F4F sbci r23,hi8(-(1))
267 00ce 80E0 ldi r24,lo8(UartTxEvent)
268 00d0 90E0 ldi r25,hi8(UartTxEvent)
269 00d2 00D0 rcall OSQAccept
270 00d4 8130 cpi r24,lo8(1)
271 00d6 19F4 brne .L5
86:task/Comm.c **** ){
87:task/Comm.c **** UDR = msg; //發送數據
273 .LM13:
274 00d8 8981 ldd r24,Y+1
275 00da 8CB9 out 44-0x20,r24
276 00dc 01C0 rjmp .L6
277 .L5:
88:task/Comm.c **** } else {
89:task/Comm.c **** UCSRB &= ~(1 << UDRIE); //關掉數據寄存器空中斷允許
279 .LM14:
280 00de 5598 cbi 42-0x20,5
281 .L6:
90:task/Comm.c **** }
91:task/Comm.c **** OS_OPEN_INT();
283 .LM15:
284 00e0 8091 0000 lds r24,Os_Enter_Sum
285 00e4 8150 subi r24,lo8(-(-1))
286 00e6 8093 0000 sts Os_Enter_Sum,r24
287 00ea 8091 0000 lds r24,Os_Enter_Sum
288 00ee 8823 tst r24
289 00f0 09F4 brne .L4
290 /* #APP */
291 00f2 7894 sei
292 /* #NOAPP */
293 .L4:
294 /* epilogue: frame size=1 */
295 00f4 2196 adiw r28,1
296 00f6 F894 cli
297 00f8 DEBF out __SP_H__,r29
298 00fa CDBF out __SP_L__,r28
299 00fc DF91 pop r29
300 00fe CF91 pop r28
301 0100 FF91 pop r31
302 0102 EF91 pop r30
303 0104 BF91 pop r27
304 0106 AF91 pop r26
305 0108 9F91 pop r25
306 010a 8F91 pop r24
307 010c 7F91 pop r23
308 010e 6F91 pop r22
309 0110 5F91 pop r21
310 0112 4F91 pop r20
311 0114 3F91 pop r19
312 0116 2F91 pop r18
313 0118 0F90 pop __tmp_reg__
314 011a 0FBE out __SREG__,__tmp_reg__
315 011c 0F90 pop __tmp_reg__
316 011e 1F90 pop __zero_reg__
317 0120 1895 reti
318 /* epilogue end (size=23) */
319 /* function __vector_12 size 78 (31) */
324 .Lscope1:
326 .global __vector_13
328 __vector_13:
92:task/Comm.c **** }
93:task/Comm.c ****
94:task/Comm.c ****
95:task/Comm.c **** //-----------------------------------------
96:task/Comm.c **** SIGNAL (SIG_UART_TRANS) //UART發送完成
97:task/Comm.c **** {
330 .LM16:
331 /* prologue: frame size=0 */
332 0122 1F92 push __zero_reg__
333 0124 0F92 push __tmp_reg__
334 0126 0FB6 in __tmp_reg__,__SREG__
335 0128 0F92 push __tmp_reg__
336 012a 1124 clr __zero_reg__
337 012c 2F93 push r18
338 012e 3F93 push r19
339 0130 4F93 push r20
340 0132 5F93 push r21
341 0134 6F93 push r22
342 0136 7F93 push r23
343 0138 8F93 push r24
344 013a 9F93 push r25
345 013c AF93 push r26
346 013e BF93 push r27
347 0140 EF93 push r30
348 0142 FF93 push r31
349 /* prologue end (size=17) */
98:task/Comm.c **** OS_CLOSE_INT();
351 .LM17:
352 /* #APP */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -