📄 uart.lst
字号:
536 ldmfd sp!, {r4, pc}
537 03b0 30309FE5 .L57:
538 03b4 B040C3E1 .align 2
539 03b8 2C309FE5 .L56:
540 03bc B040C3E1 .word -536690688
541 .word -536805376
542 03c0 28309FE5 .word -4096
543 03c4 004083E5 .word uart1ISR
544 .word uart1_rx_extract_idx
545 03c8 24309FE5 .word uart1_tx_insert_idx
546 03cc B040C3E1 .word uart1_tx_extract_idx
398:uart.c **** #endif
399:uart.c **** #endif
400:uart.c **** }
547 ng
548 03d0 1080BDE8 .word uart1_rx_insert_idx
549 .LFE10:
551 .align 2
552 03d4 00C002E0 .global uart1Putch
554 03dc 00F0FFFF uart1Putch:
555 03e0 00000000 .LFB11:
556 03e4 00000000 .loc 1 418 0
557 03e8 00000000 @ args = 0, pretend = 0, frame = 0
558 03ec 00000000 @ frame_needed = 0, uses_anonymous_args = 0
559 03f0 00000000 .LVL38:
560 03f4 00000000 stmfd sp!, {r4, r5, r6, r7, lr}
561 .LCFI7:
562 .loc 1 423 0
563 ldr r6, .L67
564 ldrh r3, [r6, #0]
565 ldr r2, .L67+4
566 add r3, r3, #1
567 and r2, r3, r2
401:uart.c ****
402:uart.c **** /******************************************************************************
403:uart.c **** *
404:uart.c **** * Function Name: uart1Putch()
405:uart.c **** *
406:uart.c **** * Description:
407:uart.c **** * This function puts a character into the UART output queue for
408:uart.c **** * transmission.
409:uart.c **** *
410:uart.c **** * Calling Sequence:
411:uart.c **** * ch - character to be transmitted
412:uart.c **** *
413:uart.c **** * Returns:
414:uart.c **** * ch on success, -1 on error (queue full)
415:uart.c **** *
416:uart.c **** *****************************************************************************/
417:uart.c **** int uart1Putch(int ch)
418:uart.c **** {
568 , .L67+8
569 .loc 1 423 0
570 mov r2, r2, asl #16
571 .loc 1 425 0
572 03f8 F0402DE9 ldrh r3, [r3, #0]
573 .loc 1 423 0
419:uart.c **** #ifdef UART1_TX_INT_MODE
420:uart.c **** uint16_t temp;
421:uart.c **** unsigned cpsr;
422:uart.c ****
423:uart.c **** temp = (uart1_tx_insert_idx + 1) % UART1_TX_BUFFER_SIZE;
574 5, r2, lsr #16
575 03fc 94609FE5 .LVL39:
576 0400 B030D6E1 .loc 1 425 0
577 0404 90209FE5 cmp r3, r5
578 0408 013083E2 .loc 1 429 0
579 040c 022003E0 ldr r7, .L67+12
424:uart.c ****
425:uart.c **** if (temp == uart1_tx_extract_idx)
580 1 425 0
581 0410 88309FE5 mvn r3, #0
582 .loc 1 418 0
583 0414 0228A0E1 mov r4, r0
584 .loc 1 425 0
585 0418 B030D3E1 beq .L62
586 .LVL40:
587 041c 2258A0E1 .loc 1 428 0
588 bl disableIRQ
589 .loc 1 429 0
590 0420 050053E1 ldrb r3, [r7, #4] @ zero_extendqisi2
426:uart.c **** return -1; // no room
427:uart.c ****
428:uart.c **** cpsr = disableIRQ(); // disable global interrupts
429:uart.c **** U1IER &= ~UIER_ETBEI; // disable TX interrupts
591 , #253
592 0424 78709FE5 strb r3, [r7, #4]
593 .loc 1 430 0
594 0428 0030E0E3 bl restoreIRQ
595 .loc 1 433 0
596 042c 0040A0E1 ldr r1, .L67+16
597 ldr r3, [r1, #0]
598 0430 1600000A cmp r3, #0
599 .loc 1 443 0
600 and r2, r4, #255
601 0434 FEFFFFEB .loc 1 436 0
602 ldrne r3, .L67+20
603 0438 0430D7E5 ldrneh r2, [r6, #0]
604 043c FD3003E2 .loc 1 442 0
605 0440 0430C7E5 moveq r3, #1
430:uart.c **** restoreIRQ(cpsr); // restore global interrupts
606 strneb r4, [r2, r3]
607 0444 FEFFFFEB .loc 1 442 0
431:uart.c ****
432:uart.c **** // check if in process of sending data
433:uart.c **** if (uart1_tx_running)
608 treq r3, [r1, #0]
609 0448 58109FE5 .loc 1 443 0
610 044c 003091E5 streqb r2, [r7, #0]
611 0450 000053E3 .loc 1 437 0
434:uart.c **** {
435:uart.c **** // add to queue
436:uart.c **** uart1_tx_buffer[uart1_tx_insert_idx] = (uint8_t)ch;
437:uart.c **** uart1_tx_insert_idx = temp;
438:uart.c **** }
439:uart.c **** else
440:uart.c **** {
441:uart.c **** // set running flag and write to output register
442:uart.c **** uart1_tx_running = 1;
443:uart.c **** U1THR = (uint8_t)ch;
612 neh r5, [r6, #0] @ movhi
613 0454 FF2004E2 .loc 1 446 0
614 bl disableIRQ
615 0458 4C309F15 .loc 1 447 0
616 045c B020D611 ldr r2, .L67+12
617 ldrb r3, [r2, #4] @ zero_extendqisi2
618 0460 0130A003 orr r3, r3, #2
619 strb r3, [r2, #4]
620 0464 0340C217 .loc 1 448 0
621 bl restoreIRQ
622 0468 00308105 .loc 1 455 0
623 and r3, r4, #255
624 046c 0020C705 .LVL41:
625 .L62:
626 0470 B050C611 .loc 1 456 0
444:uart.c **** }
445:uart.c ****
446:uart.c **** cpsr = disableIRQ(); // disable global interrupts
627 mfd sp!, {r4, r5, r6, r7, pc}
628 0474 FEFFFFEB .L68:
447:uart.c **** U1IER |= UIER_ETBEI; // enable TX interrupts
629 align 2
630 0478 24209FE5 .L67:
631 047c 0430D2E5 .word uart1_tx_insert_idx
632 0480 023083E3 .word -2147483521
633 0484 0430C2E5 .word uart1_tx_extract_idx
448:uart.c **** restoreIRQ(cpsr); // restore global interrupts
634 d -536805376
635 0488 FEFFFFEB .word uart1_tx_running
449:uart.c **** #else
450:uart.c **** while (!(U1LSR & ULSR_THRE)) // wait for TX buffer to empty
451:uart.c **** continue; // also either WDOG() or swap()
452:uart.c ****
453:uart.c **** U1THR = (uint8_t)ch;
454:uart.c **** #endif
455:uart.c **** return (uint8_t)ch;
636 word uart1_tx_buffer
637 048c FF3004E2 .LFE11:
639 .align 2
456:uart.c **** }
640 obal uart1Space
642 0494 F080BDE8 uart1Space:
643 .LFB12:
644 .loc 1 473 0
645 @ args = 0, pretend = 0, frame = 0
646 0498 00000000 @ frame_needed = 0, uses_anonymous_args = 0
647 049c 7F000080 @ link register save eliminated.
648 04a0 00000000 .LVL42:
649 04a4 000001E0 .loc 1 477 0
650 04a8 00000000 ldr r3, .L73
651 04ac 00000000 ldrh r2, [r3, #0]
652 ldr r3, .L73+4
653 ldrh r3, [r3, #0]
654 rsb r0, r3, r2
655 .LVL43:
656 cmp r0, #0
657 .loc 1 478 0
658 addle r0, r0, #128
457:uart.c ****
458:uart.c **** /******************************************************************************
459:uart.c **** *
460:uart.c **** * Function Name: uart1Space()
461:uart.c **** *
462:uart.c **** * Description:
463:uart.c **** * This function gets the available space in the transmit queue
464:uart.c **** *
465:uart.c **** * Calling Sequence:
466:uart.c **** * void
467:uart.c **** *
468:uart.c **** * Returns:
469:uart.c **** * available space in the transmit queue
470:uart.c **** *
471:uart.c **** *****************************************************************************/
472:uart.c **** uint16_t uart1Space(void)
473:uart.c **** {
659 L44:
660 mov r0, r0, asl #16
661 .loc 1 484 0
662 mov r0, r0, lsr #16
663 .loc 1 473 0
474:uart.c **** #ifdef UART1_TX_INT_MODE
475:uart.c **** int space;
476:uart.c ****
477:uart.c **** if ((space = (uart1_tx_extract_idx - uart1_tx_insert_idx)) <= 0)
664 needed for prologue
665 04b0 24309FE5 .loc 1 484 0
666 04b4 B020D3E1 bx lr
667 04b8 20309FE5 .L74:
668 04bc B030D3E1 .align 2
669 04c0 020063E0 .L73:
670 .word uart1_tx_extract_idx
671 04c4 000050E3 .word uart1_tx_insert_idx
478:uart.c **** space += UART1_TX_BUFFER_SIZE;
673 04c8 800080D2 .align 2
674 04cc 010040E2 .global uart1Puts
676 04d0 0008A0E1 uart1Puts:
479:uart.c ****
480:uart.c **** return (uint16_t)(space - 1);
481:uart.c **** #else
482:uart.c **** return USHRT_MAX;
483:uart.c **** #endif
484:uart.c **** }
677 3:
678 04d4 2008A0E1 .loc 1 503 0
679 @ args = 0, pretend = 0, frame = 0
680 @ frame_needed = 0, uses_anonymous_args = 0
681 .LVL45:
682 04d8 1EFF2FE1 stmfd sp!, {r4, lr}
683 .LCFI8:
684 .loc 1 503 0
685 mov r4, r0
686 04dc 00000000 b .L76
687 04e0 00000000 .LVL46:
688 .L77:
689 .loc 1 507 0
690 add r4, r4, #1
691 .LVL47:
692 .L76:
693 .loc 1 506 0
694 ldrb r3, [r4, #0] @ zero_extendqisi2
485:uart.c ****
486:uart.c **** /******************************************************************************
487:uart.c **** *
488:uart.c **** * Function Name: uart1Puts()
489:uart.c **** *
490:uart.c **** * Description:
491:uart.c **** * This function writes a NULL terminated 'string' to the UART output
492:uart.c **** * queue, returning a pointer to the next character to be written.
493:uart.c **** *
494:uart.c **** * Calling Sequence:
495:uart.c **** * address of the string
496:uart.c **** *
497:uart.c **** * Returns:
498:uart.c **** * a pointer to the next character to be written
499:uart.c **** * (\0 if full string is written)
500:uart.c **** *
501:uart.c **** *****************************************************************************/
502:uart.c **** const char *uart1Puts(const char *string)
503:uart.c **** {
695 r3, #0
696 beq .L78
697 .LVL49:
698 bl uart1Putch
699 04e4 10402DE9 .LVL50:
700 cmp r0, #0
701 bge .L77
702 04e8 0040A0E1 .LVL51:
703 04ec 000000EA .L78:
704 .loc 1 510 0
705 mov r0, r4
504:uart.c **** register char ch;
505:uart.c ****
506:uart.c **** while ((ch = *string) && (uart1Putch(ch) >= 0))
507:uart.c **** string++;
706 mfd sp!, {r4, pc}
707 04f0 014084E2 .LFE13:
709 .align 2
710 .global uart1Write
712 uart1Write:
713 04f8 000053E2 .LFB14:
714 04fc 0200000A .loc 1 529 0
715 @ args = 0, pretend = 0, frame = 0
716 0500 FEFFFFEB @ frame_needed = 0, uses_anonymous_args = 0
717 .LVL53:
718 0504 000050E3 stmfd sp!, {r4, r5, r6, lr}
719 0508 F8FFFFAA .LCFI9:
720 .loc 1 529 0
721 mov r1, r1, asl #16
508:uart.c ****
509:uart.c **** return string;
510:uart.c **** }
722 r1, lsr #16
723 050c 0400A0E1 .LVL55:
724 mov r5, r0
725 0510 1080BDE8 .loc 1 531 0
726 bl uart1Space
727 .LVL56:
728 cmp r6, r0
729 mvnhi r0, #0
730 ldmhifd sp!, {r4, r5, r6, pc}
731 b .L82
732 .LVL57:
511:uart.c ****
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -