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

📄 spi.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 2 页
字号:
     87          {
   \                     SPIRW:
   \   00000000   30B5               PUSH     {R4,R5,LR}
   \   00000002   81B0               SUB      SP,SP,#+4
   \   00000004   0400               MOVS     R4,R0
   \   00000006   0D00               MOVS     R5,R1
     88              uint8 temp, err;
     89              
     90              temp = GetOSPrioCur();
   \   00000008   ........           BL       GetOSPrioCur
   \   0000000C   0006               LSLS     R0,R0,#+24
   \   0000000E   000E               LSRS     R0,R0,#+24
     91              if (temp == UseSPITaskPro)
   \   00000010   ....               LDR      R1,??DataTable13  ;; UseSPITaskPro
   \   00000012   0978               LDRB     R1,[R1, #+0]
   \   00000014   8842               CMP      R0,R1
   \   00000016   0CD1               BNE      ??SPIRW_0
     92              {
     93                  SPI_SPDR = Data;
   \   00000018   ....               LDR      R0,??DataTable15  ;; 0xe0020008
   \   0000001A   0570               STRB     R5,[R0, #+0]
     94                  temp = (unsigned int)OSMboxPend(SPIReviceMbox, 0, &err);
   \   0000001C   6A46               MOV      R2,SP
   \   0000001E   0021               MOVS     R1,#+0
   \   00000020   ....               LDR      R0,??DataTable16  ;; SPIReviceMbox
   \   00000022   0068               LDR      R0,[R0, #+0]
   \   00000024   ........           _BLF     OSMboxPend,??OSMboxPend??rT
   \   00000028   0006               LSLS     R0,R0,#+24
   \   0000002A   000E               LSRS     R0,R0,#+24
     95                  *Rt = temp;
   \   0000002C   2070               STRB     R0,[R4, #+0]
     96                  return TRUE;
   \   0000002E   0120               MOVS     R0,#+1
   \   00000030   00E0               B        ??SPIRW_1
     97              }
     98              else
     99              {
    100                  return FALSE;
   \                     ??SPIRW_0:
   \   00000032   0020               MOVS     R0,#+0
   \                     ??SPIRW_1:
   \   00000034   01B0               ADD      SP,SP,#+4
   \   00000036   30BC               POP      {R4,R5}
   \   00000038   02BC               POP      {R1}
   \   0000003A   0847               BX       R1               ;; return
    101              }
    102          }
    103          
    104          /*********************************************************************************************************
    105          ** 函数名称: SPIEnd
    106          ** 功能描述: 访问SPI结束
    107          ********************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    108                 uint8 SPIEnd(void)
    109          {
   \                     SPIEnd:
   \   00000000   00B5               PUSH     {LR}
    110              uint8 temp;
    111              
    112              temp = GetOSPrioCur();
   \   00000002   ........           BL       GetOSPrioCur
   \   00000006   0006               LSLS     R0,R0,#+24
   \   00000008   000E               LSRS     R0,R0,#+24
    113              if (temp == UseSPITaskPro)
   \   0000000A   ....               LDR      R1,??DataTable13  ;; UseSPITaskPro
   \   0000000C   0978               LDRB     R1,[R1, #+0]
   \   0000000E   8842               CMP      R0,R1
   \   00000010   08D1               BNE      ??SPIEnd_0
    114              {
    115                  UseSPITaskPro = OS_PRIO_SELF;
   \   00000012   ....               LDR      R0,??DataTable13  ;; UseSPITaskPro
   \   00000014   FF21               MOVS     R1,#+255
   \   00000016   0170               STRB     R1,[R0, #+0]
    116                  OSSemPost(SPISem);
   \   00000018   ....               LDR      R0,??DataTable14  ;; SPISem
   \   0000001A   0068               LDR      R0,[R0, #+0]
   \   0000001C   ........           _BLF     OSSemPost,??OSSemPost??rT
    117                  return TRUE;
   \   00000020   0120               MOVS     R0,#+1
   \   00000022   00E0               B        ??SPIEnd_1
    118              }
    119              else
    120              {
    121                  return FALSE;
   \                     ??SPIEnd_0:
   \   00000024   0020               MOVS     R0,#+0
   \                     ??SPIEnd_1:
   \   00000026   02BC               POP      {R1}
   \   00000028   0847               BX       R1               ;; return
    122              }
    123          }
    124          
    125          /*********************************************************************************************************
    126          ** 函数名称: SPI_Exception
    127          ** 功能描述: SPI中断服务程序
    128          ********************************************************************************************************/

   \                                 In segment DATA_Z, align 4, align-sorted
    129          OS_CPU_SR cpu_sr;
   \                     cpu_sr:
   \   00000000                      DS8 4

   \                                 In segment CODE, align 4, keep-with-next
    130          void SPI_Exception(void)
    131          {
   \                     SPI_Exception:
   \   00000000   10B5               PUSH     {R4,LR}
    132              INT8U temp, temp1;
    133              
    134              OS_ENTER_CRITICAL();
   \   00000002   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
   \   00000006   1049               LDR      R1,??SPI_Exception_0  ;; cpu_sr
   \   00000008   0860               STR      R0,[R1, #+0]
    135              temp = SPI_SPSR;
   \   0000000A   1048               LDR      R0,??SPI_Exception_0+0x4  ;; 0xe0020004
   \   0000000C   0478               LDRB     R4,[R0, #+0]
    136              if ((temp & 0x80) != 0)
   \   0000000E   2006               LSLS     R0,R4,#+24
   \   00000010   08D5               BPL      ??SPI_Exception_1
    137              {
    138                  temp1 = SPI_SPDR;
   \   00000012   ....               LDR      R0,??DataTable15  ;; 0xe0020008
   \   00000014   0078               LDRB     R0,[R0, #+0]
    139                  OSMboxPost(SPIReviceMbox, (void *)(temp1|0x100));
   \   00000016   8021               MOVS     R1,#+128
   \   00000018   4900               LSLS     R1,R1,#+1        ;; #+256
   \   0000001A   0143               ORRS     R1,R1,R0
   \   0000001C   ....               LDR      R0,??DataTable16  ;; SPIReviceMbox
   \   0000001E   0068               LDR      R0,[R0, #+0]
   \   00000020   ........           _BLF     OSMboxPost,??OSMboxPost??rT
    140              }
    141              
    142              if ((temp & 0x10) != 0)
   \                     ??SPI_Exception_1:
   \   00000024   E006               LSLS     R0,R4,#+27
   \   00000026   02D5               BPL      ??SPI_Exception_2
    143              {
    144                  SPI_SPCR = 0xa0 | SPI_MOD;
   \   00000028   ....               LDR      R0,??DataTable17  ;; 0xe0020000
   \   0000002A   A021               MOVS     R1,#+160
   \   0000002C   0170               STRB     R1,[R0, #+0]
    145              }
    146              SPI_SPINT = 0x01;    
   \                     ??SPI_Exception_2:
   \   0000002E   0848               LDR      R0,??SPI_Exception_0+0x8  ;; 0xe002001c
   \   00000030   0121               MOVS     R1,#+1
   \   00000032   0170               STRB     R1,[R0, #+0]
    147              VICVectAddr = 0;            // 通知中断控制器中断结束
   \   00000034   0748               LDR      R0,??SPI_Exception_0+0xC  ;; 0xfffff030
   \   00000036   0021               MOVS     R1,#+0
   \   00000038   0160               STR      R1,[R0, #+0]
    148              OS_EXIT_CRITICAL();
   \   0000003A   0348               LDR      R0,??SPI_Exception_0  ;; cpu_sr
   \   0000003C   0068               LDR      R0,[R0, #+0]
   \   0000003E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    149          }
   \   00000042   10BC               POP      {R4}
   \   00000044   01BC               POP      {R0}
   \   00000046   0047               BX       R0               ;; return
   \                     ??SPI_Exception_0:
   \   00000048   ........           DC32     cpu_sr
   \   0000004C   040002E0           DC32     0xe0020004
   \   00000050   1C0002E0           DC32     0xe002001c
   \   00000054   30F0FFFF           DC32     0xfffff030

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

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

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable15:
   \   00000000   080002E0           DC32     0xe0020008

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

   \                                 In segment CODE, align 4, keep-with-next
   \                     ??DataTable17:
   \   00000000   000002E0           DC32     0xe0020000
    150          
    151          /*********************************************************************************************************
    152          **                            End Of File
    153          ********************************************************************************************************/

   Maximum stack usage in bytes:

     Function      CSTACK
     --------      ------
     GetOSPrioCur      0
     GetSPIFlag       16
     SPIEnd            4
     SPIInit           4
     SPIRW            16
     SPIStart          8
     SPI_Exception     8


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     VICVectAddr       4
     _A_PINSEL0        4
     SPIReviceMbox     4
     SPISem            4
     UseSPITaskPro     1
     SPIInit          92
     GetSPIFlag       38
     GetOSPrioCur     12
     SPIStart         32
     SPIRW            60
     SPIEnd           42
     cpu_sr            4
     SPI_Exception    88
     ??DataTable13     4
     ??DataTable14     4
     ??DataTable15     4
     ??DataTable16     4
     ??DataTable17     4
      Others         140

 
 512 bytes in segment CODE
   8 bytes in segment DATA_AN
  13 bytes in segment DATA_Z
  12 bytes in segment INITTAB
 
 384 bytes of CODE memory (+ 140 bytes shared)
  13 bytes of DATA memory (+   8 bytes shared)

Errors: none
Warnings: none

⌨️ 快捷键说明

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