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

📄 io.lst

📁 基于ARM的电梯控制程序
💻 LST
字号:
ARM COMPILER V2.40a,  IO                                                                   19/07/07  01:23:00  PAGE 1   


ARM COMPILER V2.40a, COMPILATION OF MODULE IO
OBJECT MODULE PLACED IN IO.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\ARM\BIN\CA.exe IO.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /****************************************************************************
    2          文件名:IO.c
    3          功  能:IO口驱动文件
    4          ****************************************************************************/
    5          #include "config.h"
    6          /****************************************************************************
    7          * 名称:IOInit()
    8          * 功能:初始化SPI0及IO口,设置为主机。
    9          * 入口参数:无
   10          * 出口参数:无
   11          ****************************************************************************/
   12          void IOInit(void)
   13          {  
   14   1          PINSEL0 |= 0x00005500;          // 设置SPI0管脚连接
   15   1          IO1DIR |=(ST|PS);               // 设置ST与PS引脚为输出
   16   1          S0SPCCR = 0x52;                 // 设置SPI0时钟分频
   17   1          S0SPCR = 0x30;                  // 设置SPI0接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
   18   1      }
   19          
   20          /****************************************************************************
   21          * 名称:SendoutputData()
   22          * 功能:向SPI总线发送数据
   23          * 入口参数:data        待发送的16位数据
   24          * 出口参数:no
   25          ****************************************************************************/
   26          void  SendoutputData(uint16 data)
   27          {  
   28   1         //uint16 result;                 // 临时变量
   29   1         IO1CLR = ST;                     // 锁存595数据
   30   1         
   31   1         S0SPDR = (data>>8);              // 发送高8位
   32   1         while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
   33   1        
   34   1         
   35   1         S0SPDR = (data&0xff);                // 发送低8位
   36   1         while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
   37   1         
   38   1         IO1SET = ST;                     // 595数据输出
   39   1         
   40   1         
   41   1      }
   42          /****************************************************************************
   43          * 名称: RcvinputData()
   44          * 功能:向SPI总线发送数据,并接收从机发回的数据。
   45          * 入口参数:data        I/O输出值
   46          * 出口参数:返回值为接收到的16位数据
   47          ****************************************************************************/
   48          uint16  RcvinputData(uint16 data)
   49          {  
   50   1         uint16 result;                   // 临时变量
   51   1        IO1CLR = ST;                      // 595数据输出
   52   1         
   53   1         IO1SET = PS;                     // 将4021的数据锁入锁存器
   54   1         
   55   1         IO1CLR = PS;
   56   1         
   57   1         S0SPDR = (data>>8);              // 发送高8位
   58   1         while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
   59   1         //DelayNS(10);
ARM COMPILER V2.40a,  IO                                                                   19/07/07  01:23:00  PAGE 2   

   60   1         result=S0SPDR;                   // 得到输入的高8位数据
   61   1         result=(result<<8);              // 移入高8位
   62   1         
   63   1         S0SPDR = (data&0xff);                // 发送低8位
   64   1         while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
   65   1         //DelayNS(10);
   66   1         result|=S0SPDR;                  // 放入低8位
   67   1         
   68   1        IO1SET = ST;                      // 595数据输出
   69   1         
   70   1         return(result);                  // 返回输入的16位数据
   71   1      }
   72          
   73          
   74          
ARM COMPILER V2.40a,  IO                                                                   19/07/07  01:23:00  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** PUBLICS:
 PUBLIC         IOInit?T
 PUBLIC         SendoutputData?T
 PUBLIC         RcvinputData?T



*** CODE SEGMENT '?PR?IOInit?T?IO':
   14:     PINSEL0 |= 0x00005500;          // 设置SPI0管脚连接
 00000000  4800      LDR         R2,=0x5500
 00000002  4800      LDR         R0,=0xE002C000
 00000004  6801      LDR         R1,[R0,#0x0]
 00000006  4311      ORR         R1,R2
 00000008  6001      STR         R1,[R0,#0x0]
   15:     IO1DIR |=(ST|PS);               // 设置ST与PS引脚为输出
 0000000A  4800      LDR         R2,=0x3000000
 0000000C  4800      LDR         R0,=0xE0028018
 0000000E  6801      LDR         R1,[R0,#0x0]
 00000010  4311      ORR         R1,R2
 00000012  6001      STR         R1,[R0,#0x0]
   16:     S0SPCCR = 0x52;                 // 设置SPI0时钟分频
 00000014  2152      MOV         R1,#0x52
 00000016  4800      LDR         R0,=0xE002000C
 00000018  7001      STRB        R1,[R0,#0x0]
   17:     S0SPCR = 0x30;                  // 设置SPI0接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
 0000001A  2130      MOV         R1,#0x30
 0000001C  4800      LDR         R0,=0xE0020000
 0000001E  8001      STRH        R1,[R0,#0x0]
   18: }
 00000020  4770      BX          R14
 00000022          ENDP ; 'IOInit?T'


*** CODE SEGMENT '?PR?SendoutputData?T?IO':
   26: void  SendoutputData(uint16 data)
 00000000  1C01      MOV         R1,R0 ; data
 00000002  ---- Variable 'data' assigned to Register 'R1' ----
   29:    IO1CLR = ST;                     // 锁存595数据
 00000002  4800      LDR         R2,=0x2000000
 00000004  4800      LDR         R0,=0xE002801C
 00000006  6002      STR         R2,[R0,#0x0]
   31:    S0SPDR = (data>>8);              // 发送高8位
 00000008  1C08      MOV         R0,R1 ; data
 0000000A  0402      LSL         R2,R0,#0x10 ; data
 0000000C  0C12      LSR         R2,R2,#0x10
 0000000E  0A12      LSR         R2,R2,#0x8
 00000010  4800      LDR         R0,=0xE0020008
 00000012  8002      STRH        R2,[R0,#0x0]
   32:    while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
 00000014          L_1:
 00000014  4800      LDR         R0,=0xE0020004
 00000016  7800      LDRB        R0,[R0,#0x0]
 00000018  2280      MOV         R2,#0x80
 0000001A  4210      TST         R0,R2
 0000001C  D0FA      BEQ         L_1  ; T=0x00000014
   35:    S0SPDR = (data&0xff);                // 发送低8位
 0000001E  1C08      MOV         R0,R1 ; data
 00000020  0401      LSL         R1,R0,#0x10 ; data
 00000022  0C09      LSR         R1,R1,#0x10
 00000024  20FF      MOV         R0,#0xFF
 00000026  4001      AND         R1,R0
 00000028  4800      LDR         R0,=0xE0020008
 0000002A  8001      STRH        R1,[R0,#0x0]
   36:    while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
 0000002C          L_5:
 0000002C  4800      LDR         R0,=0xE0020004
 0000002E  7800      LDRB        R0,[R0,#0x0]
ARM COMPILER V2.40a,  IO                                                                   19/07/07  01:23:00  PAGE 4   

 00000030  2180      MOV         R1,#0x80
 00000032  4208      TST         R0,R1
 00000034  D0FA      BEQ         L_5  ; T=0x0000002C
   38:    IO1SET = ST;                     // 595数据输出
 00000036  4800      LDR         R1,=0x2000000
 00000038  4800      LDR         R0,=0xE0028014
 0000003A  6001      STR         R1,[R0,#0x0]
   41: }
 0000003C  4770      BX          R14
 0000003E          ENDP ; 'SendoutputData?T'


*** CODE SEGMENT '?PR?RcvinputData?T?IO':
   48: uint16  RcvinputData(uint16 data)
 00000000  1C02      MOV         R2,R0 ; data
 00000002  ---- Variable 'data' assigned to Register 'R2' ----
   49: {  
 00000002            ; SCOPE-START
   51:   IO1CLR = ST;                      // 595数据输出
 00000002  4800      LDR         R1,=0x2000000
 00000004  4800      LDR         R0,=0xE002801C
 00000006  6001      STR         R1,[R0,#0x0]
   53:    IO1SET = PS;                     // 将4021的数据锁入锁存器
 00000008  4800      LDR         R1,=0x1000000
 0000000A  4800      LDR         R0,=0xE0028014
 0000000C  6001      STR         R1,[R0,#0x0]
   55:    IO1CLR = PS;
 0000000E  4800      LDR         R1,=0x1000000
 00000010  4800      LDR         R0,=0xE002801C
 00000012  6001      STR         R1,[R0,#0x0]
   57:    S0SPDR = (data>>8);              // 发送高8位
 00000014  1C10      MOV         R0,R2 ; data
 00000016  0401      LSL         R1,R0,#0x10 ; data
 00000018  0C09      LSR         R1,R1,#0x10
 0000001A  0A09      LSR         R1,R1,#0x8
 0000001C  4800      LDR         R0,=0xE0020008
 0000001E  8001      STRH        R1,[R0,#0x0]
   58:    while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
 00000020          L_9:
 00000020  4800      LDR         R0,=0xE0020004
 00000022  7800      LDRB        R0,[R0,#0x0]
 00000024  2180      MOV         R1,#0x80
 00000026  4208      TST         R0,R1
 00000028  D0FA      BEQ         L_9  ; T=0x00000020
   60:    result=S0SPDR;                   // 得到输入的高8位数据
 0000002A  4800      LDR         R0,=0xE0020008
 0000002C  8801      LDRH        R1,[R0,#0x0]
 0000002E  ---- Variable 'result' assigned to Register 'R1' ----
   61:    result=(result<<8);              // 移入高8位
 0000002E  1C08      MOV         R0,R1 ; result
 00000030  0401      LSL         R1,R0,#0x10 ; result
 00000032  0C09      LSR         R1,R1,#0x10
 00000034  0209      LSL         R1,R1,#0x8
   63:    S0SPDR = (data&0xff);                // 发送低8位
 00000036  1C10      MOV         R0,R2 ; data
 00000038  0402      LSL         R2,R0,#0x10 ; data
 0000003A  0C12      LSR         R2,R2,#0x10
 0000003C  20FF      MOV         R0,#0xFF
 0000003E  4002      AND         R2,R0
 00000040  4800      LDR         R0,=0xE0020008
 00000042  8002      STRH        R2,[R0,#0x0]
   64:    while( 0==(S0SPSR&0x80) );       // 等待SPIF置位,即等待数据发送完毕
 00000044          L_13:
 00000044  4800      LDR         R0,=0xE0020004
 00000046  7800      LDRB        R0,[R0,#0x0]
 00000048  2280      MOV         R2,#0x80
 0000004A  4210      TST         R0,R2
 0000004C  D0FA      BEQ         L_13  ; T=0x00000044
ARM COMPILER V2.40a,  IO                                                                   19/07/07  01:23:00  PAGE 5   

   66:    result|=S0SPDR;                  // 放入低8位
 0000004E  4800      LDR         R0,=0xE0020008
 00000050  8800      LDRH        R0,[R0,#0x0]
 00000052  4301      ORR         R1,R0
   68:   IO1SET = ST;                      // 595数据输出
 00000054  4800      LDR         R2,=0x2000000
 00000056  4800      LDR         R0,=0xE0028014
 00000058  6002      STR         R2,[R0,#0x0]
   70:    return(result);                  // 返回输入的16位数据
 0000005A  1C08      MOV         R0,R1 ; result
 0000005C  0400      LSL         R0,R0,#0x10 ; result
 0000005E  0C00      LSR         R0,R0,#0x10
 00000060            ; SCOPE-END
   71: }
 00000060  4770      BX          R14
 00000062          ENDP ; 'RcvinputData?T'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =    ------
  const size           =    ------
End of Module Information.


ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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