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

📄 test.lst

📁 ucos在avr上的移植代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    132          /*
    133          **************************************************************************************************************
    134          *                                                  TASKS
    135          **************************************************************************************************************
    136          */
    137          void Task (void *data)
    138          {
   \   000001A2   ....                       RCALL   ?PROLOGUE4_L09
   \   000001A4   2197                       SBIW    R28,LOW(1)
   \   000001A6   A02F                       MOV     R26,R16
   \   000001A8   B12F                       MOV     R27,R17
   \                     ?0035:
    139              INT8U x;
    140              INT8U y;
    141              INT8U err;
    142          
    143              for (;;) {
    144                  OSSemPend(RandomSem, 0, &err);                  /* Acquire semaphore to perform random numbers      */
   \   000001AA   5FDF                       RCALL   ?0072
   \   000001AC   17D0                       RCALL   ?0080
   \   000001AE   ....                       RCALL   OSSemPend
    145                  x = random(80);                                 /* Find X position where task number will appear    */
   \   000001B0   00E5                       LDI     R16,80
   \   000001B2   E4D0                       RCALL   random
   \   000001B4   802F                       MOV     R24,R16
    146                  y = random(16);                                 /* Find Y position where task number will appear    */
   \   000001B6   00E1                       LDI     R16,16
   \   000001B8   E1D0                       RCALL   random
   \   000001BA   902F                       MOV     R25,R16
    147                  OSSemPost(RandomSem);                           /* Release semaphore                                */
   \   000001BC   0FD0                       RCALL   ?0080
   \   000001BE   ....                       RCALL   OSSemPost
    148                                                                  /* Display the task number on the screen            */
    149                  VT102DispChar(x + 1, y + 5, *(char *)data, COLOR_WHITE, COLOR_BLACK);
   \   000001C0   47DF                       RCALL   ?0068
   \   000001C2   EA2F                       MOV     R30,R26
   \   000001C4   FB2F                       MOV     R31,R27
   \   000001C6   0081                       LD      R16,Z
   \   000001C8   0A93                       ST      -Y,R16
   \   000001CA   9B5F                       SUBI    R25,LOW(251)
   \   000001CC   492F                       MOV     R20,R25
   \   000001CE   8395                       INC     R24
   \   000001D0   082F                       MOV     R16,R24
   \   000001D2   37D1                       RCALL   VT102DispChar
    150                  OSTimeDly(3);                                   /* Delay 3 clock ticks                              */
   \   000001D4   03E0                       LDI     R16,LOW(3)
   \   000001D6   10E0                       LDI     R17,0
   \   000001D8   ....                       RCALL   OSTimeDly
    151              }
    152          }
   \   000001DA   E7CF                       RJMP    ?0035
   \                     ?0080:
   \   000001DC   0091....                   LDS     R16,LWRD(RandomSem)
   \   000001E0   1091....                   LDS     R17,LWRD((RandomSem+1))
   \   000001E4   0895                       RET     
   \                     ;	data            	R26-R27
   \                     ;	y               	R25
   \                     ;	x               	R24
   \                     UART_TX_interrupt:
    153          
    154          /*
    155          **************************************************************************************************************
    156          *                                                  SUPPORT ROUTINES
    157          **************************************************************************************************************
    158          */
    159          
    160          interrupt [UART_TX_vect] void UART_TX_interrupt (void)
    161          {
   \   000001E6   0A92                       ST      -Y,R0
   \   000001E8   1A92                       ST      -Y,R1
   \   000001EA   2A92                       ST      -Y,R2
   \   000001EC   3A92                       ST      -Y,R3
   \   000001EE   0A93                       ST      -Y,R16
   \   000001F0   1A93                       ST      -Y,R17
   \   000001F2   2A93                       ST      -Y,R18
   \   000001F4   3A93                       ST      -Y,R19
   \   000001F6   4A93                       ST      -Y,R20
   \   000001F8   5A93                       ST      -Y,R21
   \   000001FA   6A93                       ST      -Y,R22
   \   000001FC   7A93                       ST      -Y,R23
   \   000001FE   EA93                       ST      -Y,R30
   \   00000200   FA93                       ST      -Y,R31
   \   00000202   FFB7                       IN      R31,LOW(63)
   \   00000204   FA93                       ST      -Y,R31
    162              UartTxCount--;                                      /* Decrement number of characters left to send      */
   \   00000206   0091....                   LDS     R16,LWRD(UartTxCount)
   \   0000020A   0150                       SUBI    R16,LOW(1)
   \   0000020C   0093....                   STS     LWRD(UartTxCount),R16
    163              if (UartTxCount) {
   \   00000210   79F0                       BREQ    ?0037
    164                  UDR = UartTxBuf[UartTxRdPtr];                   /* Place next character into UART transmit register */
   \   00000212   E091....                   LDS     R30,LWRD(UartTxRdPtr)
   \   00000216   FF27                       CLR     R31
   \   00000218   ....                       SUBI    R30,LOW(-(UartTxBuf))
   \   0000021A   ....                       SBCI    R31,HIGH(-(UartTxBuf))
   \   0000021C   0081                       LD      R16,Z
   \   0000021E   0CB9                       OUT     LOW(12),R16
    165                  UartTxRdPtr++;                                  /* Advance to next character                        */
   \   00000220   0091....                   LDS     R16,LWRD(UartTxRdPtr)
   \   00000224   0395                       INC     R16
   \   00000226   0093....                   STS     LWRD(UartTxRdPtr),R16
    166                  OSSemPost(UartTxSem);                           /* Signal that we have room for one more character  */
   \   0000022A   14D0                       RCALL   ?0083
   \   0000022C   ....                       RCALL   OSSemPost
    167              } else {
   \   0000022E   01C0                       RJMP    ?0038
   \                     ?0037:
    168                  UCR &= ~0x40;                                   /* Disable UART transmit complete interrupt         */
   \   00000230   5698                       CBI     LOW(10),LOW(6)
   \                     ?0038:
    169              }
    170          }
   \   00000232   F991                       LD      R31,Y+
   \   00000234   FFBF                       OUT     LOW(63),R31
   \   00000236   F991                       LD      R31,Y+
   \   00000238   E991                       LD      R30,Y+
   \   0000023A   7991                       LD      R23,Y+
   \   0000023C   6991                       LD      R22,Y+
   \   0000023E   5991                       LD      R21,Y+
   \   00000240   4991                       LD      R20,Y+
   \   00000242   3991                       LD      R19,Y+
   \   00000244   2991                       LD      R18,Y+
   \   00000246   1991                       LD      R17,Y+
   \   00000248   0991                       LD      R16,Y+
   \   0000024A   3990                       LD      R3,Y+
   \   0000024C   2990                       LD      R2,Y+
   \   0000024E   1990                       LD      R1,Y+
   \   00000250   0990                       LD      R0,Y+
   \   00000252   1895                       RETI    
   \                     ?0083:
   \   00000254   0091....                   LDS     R16,LWRD(UartTxSem)
   \   00000258   1091....                   LDS     R17,LWRD((UartTxSem+1))
   \   0000025C   0895                       RET     
   \                     AvrInit:
    171          
    172          void AvrInit (void)
    173          {
    174              TCCR0       = 0x05;                                 /* Set TIMER0 prescaler to CLK/1024                 */
   \   0000025E   05E0                       LDI     R16,5
   \   00000260   03BF                       OUT     LOW(51),R16
    175              TIMSK       = 0x02;                                 /* Enable TIMER0 overflow interrupt                 */
   \   00000262   02E0                       LDI     R16,2
   \   00000264   09BF                       OUT     LOW(57),R16
    176              UBRR        = 23;                                   /* 19200 BAUD at 7.3728MHz                          */
   \   00000266   07E1                       LDI     R16,23
   \   00000268   09B9                       OUT     LOW(9),R16
    177              MCUCR      |= 0x80;                                 /* Enable external RAM                              */
   \   0000026A   05B7                       IN      R16,LOW(53)
   \   0000026C   0068                       ORI     R16,LOW(128)
   \   0000026E   05BF                       OUT     LOW(53),R16
    178              UCR         = 0x08;                                 /* Enable UART transmitter                          */
   \   00000270   08E0                       LDI     R16,8
   \   00000272   0AB9                       OUT     LOW(10),R16
    179              UDR        |= 0x40;                                 /* Clear UART transmit complete bit (TXC)           */
   \   00000274   669A                       SBI     LOW(12),LOW(6)
    180              UartTxCount = 0;                                    /* Clear number of characters to send               */
   \   00000276   0027                       CLR     R16
   \   00000278   0093....                   STS     LWRD(UartTxCount),R16
    181              UartTxRdPtr = 0;                                    /* Initialize transmit buffer read pointer          */
   \   0000027C   0093....                   STS     LWRD(UartTxRdPtr),R16
    182              UartTxWrPtr = 0;                                    /* Initialize transmit buffer write pointer         */
   \   00000280   0093....                   STS     LWRD(UartTxWrPtr),R16
    183          }
   \   00000284   0895                       RET     
   \                     PutChar:
    184          
    185          
    186          void PutChar (char c)
    187          {
   \   00000286   8A93                       ST      -Y,R24
   \   00000288   2197                       SBIW    R28,LOW(1)
   \   0000028A   802F                       MOV     R24,R16
    188              INT8U err;
    189          
    190              if (UartTxCount) {
   \   0000028C   0091....                   LDS     R16,LWRD(UartTxCount)
   \   00000290   0023                       TST     R16
   \   00000292   19F0                       BREQ    ?0040
    191                  OSSemPend(UartTxSem, 0, &err);                  /* Wait for space in transmit buffer                */
   \   00000294   EADE                       RCALL   ?0072
   \   00000296   DEDF                       RCALL   ?0083
   \   00000298   ....                       RCALL   OSSemPend
   \                     ?0040:
    192              }
    193              OS_ENTER_CRITICAL();
   \   0000029A   0A93                       DW      LWRD(37642)
   \   0000029C   0FB7                       DW      LWRD(46863)
   \   0000029E   F894                       CLI     
   \   000002A0   0F93                       DW      LWRD(37647)
   \   000002A2   0991                       DW      LWRD(37129)
    194              if (UartTxCount) {
   \   000002A4   0091....                   LDS     R16,LWRD(UartTxCount)
   \   000002A8   0023                       TST     R16
   \   000002AA   89F0                       BREQ    ?0042
    195                  UartTxBuf[UartTxWrPtr] = c;                     /* Put character to send in transmit buffer         */
   \   000002AC   E091....                   LDS     R30,LWRD(UartTxWrPtr)
   \   000002B0   FF27                       CLR     R31
   \   000002B2   ....                       SUBI    R30,LOW(-(UartTxBuf))
   \   000002B4   ....                       SBCI    R31,HIGH(-(UartTxBuf))
   \   000002B6   8083                       ST      Z,R24
    196                  UartTxWrPtr++;                                  /* Prepare for next character                       */
   \   000002B8   0091....                   LDS     R16,LWRD(UartTxWrPtr)
   \   000002BC   0395                       INC     R16
   \   000002BE   0093....                   STS     LWRD(UartTxWrPtr),R16
    197                  UartTxCount++;                                  /* Increment number of characters to send           */
   \   000002C2   0091....                   LDS     R16,LWRD(UartTxCount)
   \   000002C6   0395                       INC     R16
   \   000002C8   0093....                   STS     LWRD(UartTxCount),R16
    198              } else {
   \   000002CC   05C0                       RJMP    ?0043
   \                     ?0042:
    199                  UDR         = c;                                /* Write first char directly to the UART            */
   \   000002CE   8CB9                       OUT     LOW(12),R24
    200                  UartTxCount = 1;

⌨️ 快捷键说明

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