📄 mac.lst
字号:
164:mac.c **** }
165:mac.c ****
166:mac.c **** /*************************************************************************
167:mac.c **** *功能描述:发送广播数据包的接口函数
168:mac.c **** *参数说明:包地址,包长度(MAC包数据部分的长度)
169:mac.c **** *返回值:
170:mac.c **** **************************************************************************/
171:mac.c **** result_t MACBroadcastMsg(void* data, uint8_t length)
172:mac.c **** {
226 .LM25:
227 /* prologue: frame size=0 */
228 /* prologue end (size=0) */
229 0090 FC01 movw r30,r24
173:mac.c **** char intEnabled;
174:mac.c ****
175:mac.c **** // 错误的发送方式
176:mac.c **** if (data == 0 || length == 0 || length > MAX_PKT_LEN - - MAC_HEADER_LEN) {
231 .LM26:
232 0092 892B or r24,r25
233 0094 A9F0 breq .L12
235 .LM27:
236 0096 6623 tst r22
237 0098 99F0 breq .L12
238 009a 6C36 cpi r22,lo8(108)
239 009c 88F4 brsh .L12
177:mac.c **** return FAIL;
178:mac.c **** }
179:mac.c ****
180:mac.c **** // 设置发送请求标识
181:mac.c **** intEnabled = inp(SREG) & 0x80;
241 .LM28:
242 009e 9FB7 in r25,95-0x20
243 00a0 9078 andi r25,lo8(-128)
182:mac.c **** cli();
245 .LM29:
246 /* #APP */
247 00a2 F894 cli
183:mac.c ****
184:mac.c **** if (txRequest == 0) {
249 .LM30:
250 /* #NOAPP */
251 00a4 8091 0000 lds r24,txRequest
252 00a8 8823 tst r24
253 00aa 39F4 brne .L9
185:mac.c **** txRequest = 1;
255 .LM31:
256 00ac 81E0 ldi r24,lo8(1)
257 00ae 8093 0000 sts txRequest,r24
186:mac.c **** if (intEnabled) sei();
259 .LM32:
260 00b2 9923 tst r25
261 00b4 41F0 breq .L11
262 /* #APP */
263 00b6 7894 sei
264 /* #NOAPP */
265 00b8 06C0 rjmp .L11
266 .L9:
187:mac.c **** } else {
188:mac.c **** if (intEnabled) sei();
268 .LM33:
269 00ba 9923 tst r25
270 00bc 09F0 breq .L12
271 /* #APP */
272 00be 7894 sei
273 /* #NOAPP */
274 .L12:
189:mac.c **** return FAIL;
276 .LM34:
277 00c0 80E0 ldi r24,lo8(0)
278 00c2 90E0 ldi r25,hi8(0)
279 00c4 0895 ret
280 .L11:
190:mac.c **** }
191:mac.c ****
192:mac.c **** dataPkt = (OSMACMsgPtr)data;
282 .LM35:
283 00c6 F093 0000 sts (dataPkt)+1,r31
284 00ca E093 0000 sts dataPkt,r30
193:mac.c **** txPktLen = length + MAC_HEADER_LEN;
286 .LM36:
287 00ce 695F subi r22,lo8(-(7))
288 00d0 6093 0000 sts txPktLen,r22
194:mac.c **** sendAddr = OS_BCAST_ADDR;
290 .LM37:
291 00d4 8091 0000 lds r24,OS_BCAST_ADDR
292 00d8 9927 clr r25
293 00da 9093 0000 sts (sendAddr)+1,r25
294 00de 8093 0000 sts sendAddr,r24
195:mac.c **** // 数据包包头设置
196:mac.c **** dataPkt->type = DATA_PKT;
296 .LM38:
297 00e2 82E0 ldi r24,lo8(2)
298 00e4 8183 std Z+1,r24
197:mac.c **** dataPkt->toAddr = OS_BCAST_ADDR;
300 .LM39:
301 00e6 E091 0000 lds r30,dataPkt
302 00ea F091 0000 lds r31,(dataPkt)+1
303 00ee 8091 0000 lds r24,OS_BCAST_ADDR
304 00f2 8283 std Z+2,r24
198:mac.c **** dataPkt->fromAddr = OS_LOCAL_ADDRESS;
306 .LM40:
307 00f4 E091 0000 lds r30,dataPkt
308 00f8 F091 0000 lds r31,(dataPkt)+1
309 00fc 8091 0000 lds r24,OS_LOCAL_ADDRESS
310 0100 8383 std Z+3,r24
199:mac.c **** dataPkt->group = 0x01;
312 .LM41:
313 0102 E091 0000 lds r30,dataPkt
314 0106 F091 0000 lds r31,(dataPkt)+1
315 010a 81E0 ldi r24,lo8(1)
316 010c 8483 std Z+4,r24
200:mac.c ****
201:mac.c **** tryToSend();
318 .LM42:
319 010e 0E94 0000 call tryToSend
202:mac.c ****
203:mac.c **** return SUCCESS;
321 .LM43:
322 0112 81E0 ldi r24,lo8(1)
323 0114 90E0 ldi r25,hi8(1)
204:mac.c **** }
325 .LM44:
326 0116 0895 ret
327 /* epilogue: frame size=0 */
328 0118 0895 ret
329 /* epilogue end (size=1) */
330 /* function MACBroadcastMsg size 72 (71) */
337 .global MACUnicastMsg
339 MACUnicastMsg:
205:mac.c ****
206:mac.c **** /*************************************************************************
207:mac.c **** *功能描述:发送单播数据包的接口函数
208:mac.c **** *参数说明:包地址,包长度(包括包头),目的地址
209:mac.c **** *返回值:
210:mac.c **** **************************************************************************/
211:mac.c **** result_t MACUnicastMsg(void* data, uint8_t length, uint16_t toAddr)
212:mac.c **** {
341 .LM45:
342 /* prologue: frame size=0 */
343 /* prologue end (size=0) */
213:mac.c ****
214:mac.c **** return SUCCESS;
215:mac.c **** }
345 .LM46:
346 011a 81E0 ldi r24,lo8(1)
347 011c 90E0 ldi r25,hi8(1)
348 /* epilogue: frame size=0 */
349 011e 0895 ret
350 /* epilogue end (size=1) */
351 /* function MACUnicastMsg size 3 (2) */
354 .global MACTxReset
356 MACTxReset:
216:mac.c ****
217:mac.c **** /*************************************************************************
218:mac.c **** *功能描述:强行取消所有正在发送的任务
219:mac.c **** *参数说明:无
220:mac.c **** *返回值:
221:mac.c **** **************************************************************************/
222:mac.c **** result_t MACTxReset()
223:mac.c **** {
358 .LM47:
359 /* prologue: frame size=0 */
360 /* prologue end (size=0) */
224:mac.c **** txRequest = 0;
362 .LM48:
363 0120 1092 0000 sts txRequest,__zero_reg__
225:mac.c **** state = IDLE;
365 .LM49:
366 0124 81E0 ldi r24,lo8(1)
367 0126 8093 0000 sts state,r24
226:mac.c **** return SUCCESS;
227:mac.c **** }
369 .LM50:
370 012a 81E0 ldi r24,lo8(1)
371 012c 90E0 ldi r25,hi8(1)
372 /* epilogue: frame size=0 */
373 012e 0895 ret
374 /* epilogue end (size=1) */
375 /* function MACTxReset size 8 (7) */
379 .global MACPhysicalTxPktDone
381 MACPhysicalTxPktDone:
228:mac.c ****
229:mac.c **** /*************************************************************************
230:mac.c **** *功能描述:发送广播包
231:mac.c **** *参数说明:无
232:mac.c **** *返回值:
233:mac.c **** **************************************************************************/
234:mac.c **** static void startBcast()
235:mac.c **** {
236:mac.c **** PhysicalTxPkt(dataPkt, txPktLen); // 调用物理层发送接口发送数据包
237:mac.c ****
238:mac.c **** radioState = RADIO_TX;
239:mac.c **** state = TX_PKT;
240:mac.c **** geneTime = TX_PKT_DONE_TIME; // 设置超时计时
241:mac.c **** }
242:mac.c ****
243:mac.c **** /*************************************************************************
244:mac.c **** *功能描述:单播包分段发送完成,通知上层
245:mac.c **** *参数说明:无
246:mac.c **** *返回值:
247:mac.c **** **************************************************************************/
248:mac.c **** static void txMsgDone()
249:mac.c **** {
250:mac.c **** // 发送下一个分段
251:mac.c **** txRequest = 0;
252:mac.c **** state = IDLE;
253:mac.c ****
254:mac.c **** // testMACUnicastDone(dataPkt);
255:mac.c **** LedYellowToggle();
256:mac.c **** }
257:mac.c ****
258:mac.c **** /*************************************************************************
259:mac.c **** *功能描述:物理层发送完成,通知MAC
260:mac.c **** *参数说明:包地址
261:mac.c **** *返回值:
262:mac.c **** **************************************************************************/
263:mac.c **** result_t MACPhysicalTxPktDone(void* packet)
264:mac.c **** {
383 .LM51:
384 /* prologue: frame size=0 */
385 /* prologue end (size=0) */
386 0130 FC01 movw r30,r24
265:mac.c **** char pktType;
266:mac.c **** geneTime = 0;
388 .LM52:
389 0132 1092 0000 sts (geneTime)+1,__zero_reg__
390 0136 1092 0000 sts geneTime,__zero_reg__
267:mac.c **** radioState = RADIO_IDLE;
392 .LM53:
393 013a 21E0 ldi r18,lo8(1)
394 013c 2093 0000 sts radioState,r18
268:mac.c **** if (packet == 0 || state != TX_PKT)
396 .LM54:
397 0140 892B or r24,r25
398 0142 21F0 breq .L17
400 .LM55:
401 0144 8091 0000 lds r24,state
402 0148 8330 cpi r24,lo8(3)
403 014a 19F0 breq .L16
404 .L17:
269:mac.c **** return FAIL;
406 .LM56:
407 014c 80E0 ldi r24,lo8(0)
408 014e 90E0 ldi r25,hi8(0)
409 0150 0895 ret
410 .L16:
270:mac.c **** pktType = *((char*)packet + 1);
412 .LM57:
413 0152 8181 ldd r24,Z+1
271:mac.c **** switch (pktType) {
415 .LM58:
416 0154 8230 cpi r24,lo8(2)
417 0156 59F4 brne .L18
272:mac.c **** case RTS_PKT:
273:mac.c **** break;
274:mac.c **** case CTS_PKT:
275:mac.c **** break;
276:mac.c **** case DATA_PKT:
277:mac.c **** if (((OSMACMsgPtr)packet)->toAddr == OS_BCAST_ADDR) {
419 .LM59:
420 0158 9281 ldd r25,Z+2
421 015a 8091 0000 lds r24,OS_BCAST_ADDR
422 015e 9817 cp r25,r24
423 0160 31F4 brne .L18
278:mac.c **** state = IDLE;
425 .LM60:
426 0162 2093 0000 sts state,r18
279:mac.c **** txRequest = 0;
428 .LM61:
429 0166 1092 0000 sts txRequest,__zero_reg__
280:mac.c **** // testMACBroadcastDone(dataPkt);
281:mac.c **** LedYellowToggle();
431 .LM62:
432 016a 0E94 0000 call LedYellowToggle
433 .L18:
282:mac.c **** }
283:mac.c **** break;
284:mac.c **** case ACK_PKT: // ACK发送完成,进入空闲
285:mac.c **** break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -