⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac.lst

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -