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

📄 uart.lst

📁 AVRGCC编写的很好用的串口通讯源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 309 0104 8233      		cpi r24,lo8(50)
 310 0106 21F4      		brne .L14
  97:uart.c        **** 	{
  98:uart.c        **** 		AvrXWaitSemaphore(&tx_rdy);
 312               	.LM35:
 313 0108 80E0      		ldi r24,lo8(tx_rdy)
 314 010a 90E0      		ldi r25,hi8(tx_rdy)
 315 010c 0E94 0000 		call AvrXWaitSemaphore
 316               	.L14:
  99:uart.c        **** 	}
 100:uart.c        **** 	BeginCritical();
 318               	.LM36:
 319               	/* #APP */
 320 0110 F894      		cli
 321               	
 101:uart.c        **** 	if (tx_count || bit_is_clear(UCSRA, UDRE))
 323               	.LM37:
 324               	/* #NOAPP */
 325 0112 8091 0000 		lds r24,tx_count
 326 0116 8823      		tst r24
 327 0118 11F4      		brne .L16
 328 011a 5D99      		sbic 43-0x20,5
 329 011c 1CC0      		rjmp .L15
 330               	.L16:
 102:uart.c        **** 	{
 103:uart.c        **** 		tx_buffer[tx_wr] = c;
 332               	.LM38:
 333 011e 8091 0000 		lds r24,tx_wr
 334 0122 E82F      		mov r30,r24
 335 0124 FF27      		clr r31
 336 0126 E050      		subi r30,lo8(-(tx_buffer))
 337 0128 F040      		sbci r31,hi8(-(tx_buffer))
 338 012a C083      		st Z,r28
 104:uart.c        **** 		if (++tx_wr == TX_BUFFER_SIZE)
 340               	.LM39:
 341 012c 8F5F      		subi r24,lo8(-(1))
 342 012e 8093 0000 		sts tx_wr,r24
 343 0132 8233      		cpi r24,lo8(50)
 344 0134 11F4      		brne .L17
 105:uart.c        **** 		{
 106:uart.c        **** 			tx_wr = 0;
 346               	.LM40:
 347 0136 1092 0000 		sts tx_wr,__zero_reg__
 348               	.L17:
 107:uart.c        **** 		}
 108:uart.c        **** 		if (++tx_count == TX_BUFFER_SIZE)
 350               	.LM41:
 351 013a 8091 0000 		lds r24,tx_count
 352 013e 8F5F      		subi r24,lo8(-(1))
 353 0140 8093 0000 		sts tx_count,r24
 354 0144 8091 0000 		lds r24,tx_count
 355 0148 8233      		cpi r24,lo8(50)
 356 014a 31F4      		brne .L19
 109:uart.c        **** 		{
 110:uart.c        **** 			AvrXResetSemaphore(&tx_rdy);
 358               	.LM42:
 359 014c 80E0      		ldi r24,lo8(tx_rdy)
 360 014e 90E0      		ldi r25,hi8(tx_rdy)
 361 0150 0E94 0000 		call AvrXResetSemaphore
 362 0154 01C0      		rjmp .L19
 363               	.L15:
 111:uart.c        **** 		}
 112:uart.c        **** 	}
 113:uart.c        **** 	else
 114:uart.c        **** 	{
 115:uart.c        **** 		UDR = c;
 365               	.LM43:
 366 0156 CCB9      		out 44-0x20,r28
 367               	.L19:
 116:uart.c        **** 	}
 117:uart.c        **** 	EndCritical();
 369               	.LM44:
 370               	/* #APP */
 371 0158 7894      		sei
 372               	
 118:uart.c        **** 	
 119:uart.c        **** 	return 0;
 120:uart.c        **** }
 374               	.LM45:
 375               	/* #NOAPP */
 376 015a 80E0      		ldi r24,lo8(0)
 377 015c 90E0      		ldi r25,hi8(0)
 378               	/* epilogue: frame size=0 */
 379 015e CF91      		pop r28
 380 0160 0895      		ret
 381               	/* epilogue end (size=2) */
 382               	/* function UartPutc size 57 (54) */
 384               	.Lscope3:
 388               	.global	UartIOCtl
 390               	UartIOCtl:
 121:uart.c        **** 
 122:uart.c        **** void
 123:uart.c        **** UartInit(void)
 124:uart.c        **** {
 125:uart.c        **** 	uint32_t uart_param;
 126:uart.c        **** 	
 127:uart.c        **** 	AvrXResetSemaphore(&rx_rdy);
 128:uart.c        **** 	AvrXResetSemaphore(&tx_rdy);
 129:uart.c        **** 	
 130:uart.c        **** 	uart_param = UART_DEFAULT_DATABITS;
 131:uart.c        **** 	UartIOCtl(UART_SETDATABITS, &uart_param);
 132:uart.c        **** 	uart_param = UART_DEFAULT_PARITY;
 133:uart.c        **** 	UartIOCtl(UART_SETPARITY, &uart_param);
 134:uart.c        **** 	uart_param = UART__DEFAULT_STOPBITS;
 135:uart.c        **** 	UartIOCtl(UART_SETSTOPBITS, &uart_param);
 136:uart.c        **** 	uart_param = UART_DEFAULT_BAUD;
 137:uart.c        ****     UartIOCtl(UART_SETSPEED, &uart_param);
 138:uart.c        **** 	
 139:uart.c        **** 	UCSRB = BV(RXCIE) | BV(TXCIE) | BV(RXEN) | BV(TXEN);
 140:uart.c        **** 
 141:uart.c        **** 	fdevopen(UartPutc, UartGetc, 0);
 142:uart.c        **** }
 143:uart.c        **** 
 144:uart.c        **** void
 145:uart.c        **** UartIOCtl(uint16_t req, void *conf)
 146:uart.c        **** {
 392               	.LM46:
 393               	/* prologue: frame size=0 */
 394 0162 CF93      		push r28
 395 0164 DF93      		push r29
 396               	/* prologue end (size=2) */
 397 0166 EB01      		movw r28,r22
 147:uart.c        ****     uint32_t *lvp = (uint32_t *)conf;
 148:uart.c        ****     uint32_t lv = *lvp;
 399               	.LM47:
 400 0168 2881      		ld r18,Y
 401 016a 3981      		ldd r19,Y+1
 402 016c 4A81      		ldd r20,Y+2
 403 016e 5B81      		ldd r21,Y+3
 149:uart.c        ****     uint8_t bv = (uint8_t)lv;
 405               	.LM48:
 406 0170 622F      		mov r22,r18
 150:uart.c        ****     uint16_t sv;
 151:uart.c        **** 
 152:uart.c        ****     switch (req)
 408               	.LM49:
 409 0172 71E0      		ldi r23,hi8(260)
 410 0174 8430      		cpi r24,lo8(260)
 411 0176 9707      		cpc r25,r23
 412 0178 09F4      		brne .+2
 413 017a 6BC0      		rjmp .L28
 415               	.LM50:
 416 017c 71E0      		ldi r23,hi8(261)
 417 017e 8530      		cpi r24,lo8(261)
 418 0180 9707      		cpc r25,r23
 419 0182 68F4      		brsh .L37
 420 0184 71E0      		ldi r23,hi8(258)
 421 0186 8230      		cpi r24,lo8(258)
 422 0188 9707      		cpc r25,r23
 423 018a D1F1      		breq .L23
 424 018c 71E0      		ldi r23,hi8(259)
 425 018e 8330      		cpi r24,lo8(259)
 426 0190 9707      		cpc r25,r23
 427 0192 08F0      		brlo .+2
 428 0194 53C0      		rjmp .L26
 429 0196 8150      		subi r24,lo8(257)
 430 0198 9140      		sbci r25,hi8(257)
 431 019a A9F0      		breq .L22
 432 019c 8DC0      		rjmp .L20
 433               	.L37:
 434 019e 71E0      		ldi r23,hi8(262)
 435 01a0 8630      		cpi r24,lo8(262)
 436 01a2 9707      		cpc r25,r23
 437 01a4 09F4      		brne .+2
 438 01a6 68C0      		rjmp .L32
 439 01a8 21E0      		ldi r18,hi8(262)
 440 01aa 8630      		cpi r24,lo8(262)
 441 01ac 9207      		cpc r25,r18
 442 01ae 08F4      		brsh .+2
 443 01b0 58C0      		rjmp .L29
 444 01b2 71E0      		ldi r23,hi8(263)
 445 01b4 8730      		cpi r24,lo8(263)
 446 01b6 9707      		cpc r25,r23
 447 01b8 09F4      		brne .+2
 448 01ba 60C0      		rjmp .L34
 449 01bc 8850      		subi r24,lo8(264)
 450 01be 9140      		sbci r25,hi8(264)
 451 01c0 09F4      		brne .+2
 452 01c2 68C0      		rjmp .L36
 453 01c4 79C0      		rjmp .L20
 454               	.L22:
 153:uart.c        **** 	{
 154:uart.c        **** 		case UART_SETSPEED:
 155:uart.c        **** 		{
 156:uart.c        **** 			sv = (uint16_t) ((((2UL * CPUCLK) / (lv * 16UL)) + 1UL) / 2UL) - 1;
 456               	.LM51:
 457 01c6 F4E0      		ldi r31,4
 458 01c8 220F      	1:	lsl r18
 459 01ca 331F      		rol r19
 460 01cc 441F      		rol r20
 461 01ce 551F      		rol r21
 462 01d0 FA95      		dec r31
 463 01d2 D1F7      		brne 1b
 464 01d4 60E0      		ldi r22,lo8(14745600)
 465 01d6 70E0      		ldi r23,hi8(14745600)
 466 01d8 81EE      		ldi r24,hlo8(14745600)
 467 01da 90E0      		ldi r25,hhi8(14745600)
 468 01dc 0E94 0000 		call __udivmodsi4
 469 01e0 DA01      		movw r26,r20
 470 01e2 C901      		movw r24,r18
 471 01e4 0196      		adiw r24,1
 472 01e6 A11D      		adc r26,__zero_reg__
 473 01e8 B11D      		adc r27,__zero_reg__
 474 01ea B695      		lsr r27
 475 01ec A795      		ror r26
 476 01ee 9795      		ror r25
 477 01f0 8795      		ror r24
 478 01f2 9C01      		movw r18,r24
 479 01f4 2150      		subi r18,lo8(-(-1))
 480 01f6 3040      		sbci r19,hi8(-(-1))
 157:uart.c        **** 			UBRRL = (uint8_t) sv;
 482               	.LM52:
 483 01f8 29B9      		out 41-0x20,r18
 158:uart.c        **** 			UBRRH = (uint8_t) (sv >> 8);
 485               	.LM53:
 486 01fa 832F      		mov r24,r19
 487 01fc 9927      		clr r25
 488 01fe 48C0      		rjmp .L38
 489               	.L23:
 159:uart.c        **** 		}
 160:uart.c        ****         break;
 161:uart.c        **** 
 162:uart.c        **** 		case UART_GETSPEED:
 163:uart.c        **** 		{
 164:uart.c        **** 			sv = ((uint16_t)UBRRH << 8) || UBRRL;
 491               	.LM54:
 492 0200 20E0      		ldi r18,lo8(0)
 493 0202 30E0      		ldi r19,hi8(0)
 494 0204 80B5      		in r24,64-0x20
 495 0206 8823      		tst r24
 496 0208 19F4      		brne .L25
 497 020a 89B1      		in r24,41-0x20
 498 020c 8823      		tst r24
 499 020e 11F0      		breq .L24
 500               	.L25:
 501 0210 21E0      		ldi r18,lo8(1)
 502 0212 30E0      		ldi r19,hi8(1)
 503               	.L24:
 165:uart.c        **** 			*lvp = CPUCLK / (16UL * (uint32_t)(sv + 1));
 505               	.LM55:
 506 0214 2F5F      		subi r18,lo8(-(1))
 507 0216 3F4F      		sbci r19,hi8(-(1))
 508 0218 4427      		clr r20
 509 021a 5527      		clr r21
 510 021c 64E0      		ldi r22,4
 511 021e 220F      	1:	lsl r18
 512 0220 331F      		rol r19
 513 0222 441F      		rol r20
 514 0224 551F      		rol r21
 515 0226 6A95      		dec r22
 516 0228 D1F7      		brne 1b
 517 022a 60E0      		ldi r22,lo8(7372800)
 518 022c 70E8      		ldi r23,hi8(7372800)
 519 022e 80E7      		ldi r24,hlo8(7372800)
 520 0230 90E0      		ldi r25,hhi8(7372800)
 521 0232 0E94 0000 		call __udivmodsi4
 522 0236 DA01      		movw r26,r20
 523 0238 C901      		movw r24,r18
 524 023a 3AC0      		rjmp .L40
 525               	.L26:
 166:uart.c        **** 		}
 167:uart.c        ****         break;
 168:uart.c        **** 
 169:uart.c        **** 		case UART_SETDATABITS:
 170:uart.c        **** 		{
 171:uart.c        **** 			if (bv >= 5 && bv <= 8)
 527               	.LM56:
 528 023c 922F      		mov r25,r18
 529 023e 9550      		subi r25,lo8(-(-5))
 530 0240 9430      		cpi r25,lo8(4)
 531 0242 D0F5      		brsh .L20
 172:uart.c        **** 			{
 173:uart.c        **** 				bv = (bv - 5) << 1;
 533               	.LM57:
 534 0244 990F      		lsl r25
 174:uart.c        **** 				UCSRC = (UCSRC & 0xF9) | bv;
 536               	.LM58:
 537 0246 80B5      		in r24,64-0x20
 538 0248 897F      		andi r24,lo8(-7)
 539 024a 892B      		or r24,r25
 540 024c 80BD      		out 64-0x20,r24
 175:uart.c        **** 				UCSRB &= 0xFB;
 542               	.LM59:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -