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

📄 serial.lst

📁 本代码已经经过修改
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   00000018   0422               MOV         R2,#+0x4
   \   0000001A   0A43               ORR         R2,R1
   \   0000001C   0280               STRH        R2,[R0, #+0]
    180          
    181          	return pdPASS;
   \   0000001E   0120               MOV         R0,#+0x1
   \                     ??xSerialPutChar_1:
   \   00000020   01B0               ADD         SP,#+0x4
   \   00000022   02BC               POP         {R1}
   \   00000024   0847               BX          R1                 ;; return
    182          }
    183          /*-----------------------------------------------------------*/
    184          

   \                                 In segment CODE, align 4, keep-with-next
    185          void vSerialClose( xComPortHandle xPort )
    186          {
    187          	/* Not supported as not required by the demo application. */
    188          }
   \                     vSerialClose:
   \   00000000   7047               BX          LR                 ;; return
    189          /*-----------------------------------------------------------*/
    190          
    191          /* Serial port ISR.  This can cause a context switch so is not defined as a
    192          standard ISR using the __irq keyword.  Instead a wrapper function is defined
    193          within serialISR.s79 which in turn calls this function.  See the port
    194          documentation on the FreeRTOS.org website for more information. */

   \                                 In segment CODE, align 4, keep-with-next
    195          __arm void vSerialISR( void )
    196          {
   \                     vSerialISR:
   \   00000000   10402DE9           STMDB       SP!,{R4,LR}        ;; Push
   \   00000004   08D04DE2           SUB         SP,SP,#+0x8
    197          unsigned portSHORT usStatus;
    198          signed portCHAR cChar;
    199          portBASE_TYPE xTaskWokenByTx = pdFALSE, xTaskWokenByPost = pdFALSE;
   \   00000008   0010A0E3           MOV         R1,#+0
   \   0000000C   04108DE5           STR         R1,[SP, #+0x4]
    200          
    201          	/* What caused the interrupt? */
    202          	usStatus = UART_FlagStatus( UART0 );
   \   00000010   C004A0E3           MOV         R0,#-1073741824
   \   00000014   400C80E3           ORR         R0,R0,#+0x4000
   \   00000018   ........           _BLF        UART_FlagStatus,UART_FlagStatus??rA
   \   0000001C   0040A0E1           MOV         R4,R0
    203          
    204          	if( usStatus & UART_TxHalfEmpty )
   \   00000020   040010E3           TST         R0,#+0x4
   \   00000024   1100000A           BEQ         ??vSerialISR_0
    205          	{
    206          		/* The interrupt was caused by the THR becoming empty.  Are there any
    207          		more characters to transmit? */
    208          		if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == pdTRUE )
   \   00000028   04208DE2           ADD         R2,SP,#+0x4
   \   0000002C   0D10A0E1           MOV         R1,SP
   \   00000030   ........           LDR         R0,??DataTable7    ;; ??xCharsForTx
   \   00000034   000090E5           LDR         R0,[R0, #+0]
   \   00000038   ........           _BLF        xQueueReceiveFromISR,xQueueReceiveFromISR??rA
   \   0000003C   010050E3           CMP         R0,#+0x1
   \   00000040   0300001A           BNE         ??vSerialISR_1
    209          		{
    210          			/* A character was retrieved from the queue so can be sent to the
    211          			THR now. */
    212          			UART0->TxBUFR = cChar;
   \   00000044   4C02A0E3           MOV         R0,#-1073741820
   \   00000048   400C80E3           ORR         R0,R0,#+0x4000
   \   0000004C   D010DDE1           LDRSB       R1,[SP, #+0]
   \   00000050   050000EA           B           ??vSerialISR_2
    213          		}
    214          		else
    215          		{
    216          			/* Queue empty, nothing to send so turn off the Tx interrupt. */
    217          			serINTERRUPT_OFF();
   \                     ??vSerialISR_1:
   \   00000054   4301A0E3           MOV         R0,#-1073741808
   \   00000058   400C80E3           ORR         R0,R0,#+0x4000
   \   0000005C   B010D0E1           LDRH        R1,[R0, #+0]
   \   00000060   FB20A0E3           MOV         R2,#+0xFB
   \   00000064   FF2C82E3           ORR         R2,R2,#+0xFF00
   \   00000068   011002E0           AND         R1,R2,R1
   \                     ??vSerialISR_2:
   \   0000006C   B010C0E1           STRH        R1,[R0, #+0]
    218          		}		
    219          	}
    220          
    221          	if( usStatus & 	UART_RxBufFull )
   \                     ??vSerialISR_0:
   \   00000070   010014E3           TST         R4,#+0x1
   \   00000074   0A00000A           BEQ         ??vSerialISR_3
    222          	{
    223          		/* The interrupt was caused by a character being received.  Grab the
    224          		character from the RHR and place it in the queue of received
    225          		characters. */
    226          		cChar = UART0->RxBUFR;
   \   00000078   8C12A0E3           MOV         R1,#-1073741816
   \   0000007C   401C81E3           ORR         R1,R1,#+0x4000
   \   00000080   B010D1E1           LDRH        R1,[R1, #+0]
   \   00000084   0010CDE5           STRB        R1,[SP, #+0]
    227          		xTaskWokenByPost = xQueueSendFromISR( xRxedChars, &cChar, xTaskWokenByPost );
    228          	}
    229          
    230          	/* If a task was woken by either a character being received or a character
    231          	being transmitted then we may need to switch to another task. */
    232          	portEND_SWITCHING_ISR( ( xTaskWokenByPost || xTaskWokenByTx ) );
   \   00000088   0020A0E3           MOV         R2,#+0
   \   0000008C   0D10A0E1           MOV         R1,SP
   \   00000090   ........           LDR         R0,??DataTable8    ;; ??xRxedChars
   \   00000094   000090E5           LDR         R0,[R0, #+0]
   \   00000098   ........           _BLF        xQueueSendFromISR,xQueueSendFromISR??rA
   \   0000009C   000050E3           CMP         R0,#+0
   \   000000A0   0200001A           BNE         ??vSerialISR_4
   \                     ??vSerialISR_3:
   \   000000A4   04009DE5           LDR         R0,[SP, #+0x4]
   \   000000A8   000050E3           CMP         R0,#+0
   \   000000AC   0000000A           BEQ         ??vSerialISR_5
   \                     ??vSerialISR_4:
   \   000000B0   ........           _BLF        vTaskSwitchContext,vTaskSwitchContext??rA
    233          
    234          	/* End the interrupt in the EIC. */
    235          	portCLEAR_EIC();
   \                     ??vSerialISR_5:
   \   000000B4   BF00E0E3           MVN         R0,#+0xBF
   \   000000B8   700EC0E3           BIC         R0,R0,#+0x700
   \   000000BC   0110A0E3           MOV         R1,#+0x1
   \   000000C0   3C2040E2           SUB         R2,R0,#+0x3C
   \   000000C4   002092E5           LDR         R2,[R2, #+0]
   \   000000C8   1112A0E1           MOV         R1,R1, LSL R2
   \   000000CC   001080E5           STR         R1,[R0, #+0]
    236          }
   \   000000D0   08D08DE2           ADD         SP,SP,#+0x8        ;; stack cleaning
   \   000000D4   1040BDE8           LDMIA       SP!,{R4,LR}        ;; Pop
   \   000000D8   1EFF2FE1           BX          LR                 ;; return

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable6:
   \   00000000   104000C0           DC32        0xc0004010

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable7:
   \   00000000   ........           DC32        ??xCharsForTx

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable8:
   \   00000000   ........           DC32        ??xRxedChars
    237          
    238          
    239          
    240          
    241          
    242          	

   Maximum stack usage in bytes:

     Function               CSTACK
     --------               ------
     UART_FlagStatus            0
     vSerialClose               0
     vSerialISR                16
     vSerialPutString          12
     xSerialGetChar             4
     xSerialPortInitMinimal    28
     xSerialPutChar             8


   Segment part sizes:

     Function/Label         Bytes
     --------------         -----
     UART_FlagStatus           4
     xRxedChars                4
     xCharsForTx               4
     xSerialPortInitMinimal  220
     xSerialGetChar           22
     vSerialPutString         54
     xSerialPutChar           38
     vSerialClose              2
     vSerialISR              220
     ??DataTable6              4
     ??DataTable7              4
     ??DataTable8              4
      Others                 216

 
 776 bytes in segment CODE
   8 bytes in segment DATA_Z
  12 bytes in segment INITTAB
 
 568 bytes of CODE memory (+ 220 bytes shared)
   8 bytes of DATA memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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