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

📄 io.txt

📁 基于ARM的电梯控制程序
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oio.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips IO.c]

                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  IOInit PROC
;;;13     {  
;;;14     	PINSEL0 |= 0x00005500;			// 设置SPI0管脚连接
000000  e59f0114          LDR      r0,|L1.284|
000004  e5900000          LDR      r0,[r0,#0]
000008  e3800c55          ORR      r0,r0,#0x5500
00000c  e59f1108          LDR      r1,|L1.284|
000010  e5810000          STR      r0,[r1,#0]
000014  e2410901          SUB      r0,r1,#0x4000
000018  e5900018          LDR      r0,[r0,#0x18]
00001c  e3800403          ORR      r0,r0,#0x3000000
000020  e2411901          SUB      r1,r1,#0x4000
000024  e5810018          STR      r0,[r1,#0x18]
000028  e3a00052          MOV      r0,#0x52
00002c  e1c11480          BIC      r1,r1,r0,LSL #9
000030  e5c1000c          STRB     r0,[r1,#0xc]
000034  e3a00030          MOV      r0,#0x30
000038  e5c10000          STRB     r0,[r1,#0]
00003c  e12fff1e          BX       lr
;;;15     	IO1DIR |=(ST|PS);				// 设置ST与PS引脚为输出
;;;16     	S0SPCCR = 0x52;					// 设置SPI0时钟分频
;;;17     	S0SPCR = 0x30;		    		// 设置SPI0接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
;;;18     }
                          ENDP

                  SendoutputData PROC
;;;28        //uint16 result;					// 临时变量
;;;29        IO1CLR = ST;			    		// 锁存595数据
000040  e3a01402          MOV      r1,#0x2000000
000044  e59f20d4          LDR      r2,|L1.288|
000048  e582101c          STR      r1,[r2,#0x1c]
00004c  e1a01440          ASR      r1,r0,#8
000050  e2422902          SUB      r2,r2,#0x8000
000054  e5c21008          STRB     r1,[r2,#8]
000058  e1a00000          MOV      r0,r0
                  |L1.92|
00005c  e59f10c0          LDR      r1,|L1.292|
000060  e5d11004          LDRB     r1,[r1,#4]
000064  e3110080          TST      r1,#0x80
000068  0afffffb          BEQ      |L1.92|
00006c  e59f20b0          LDR      r2,|L1.292|
000070  e5c20008          STRB     r0,[r2,#8]
000074  e1a00000          MOV      r0,r0
                  |L1.120|
000078  e59f10a4          LDR      r1,|L1.292|
00007c  e5d11004          LDRB     r1,[r1,#4]
000080  e3110080          TST      r1,#0x80
000084  0afffffb          BEQ      |L1.120|
000088  e3a01402          MOV      r1,#0x2000000
00008c  e59f208c          LDR      r2,|L1.288|
000090  e5821014          STR      r1,[r2,#0x14]
000094  e12fff1e          BX       lr
;;;30        
;;;31        S0SPDR = (data>>8);				// 发送高8位
;;;32        while( 0==(S0SPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
;;;33       
;;;34        
;;;35        S0SPDR = (data&0xff);				// 发送低8位
;;;36        while( 0==(S0SPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
;;;37        
;;;38        IO1SET = ST;						// 595数据输出
;;;39        
;;;40        
;;;41     }
                          ENDP

                  RcvinputData PROC
;;;48     uint16  RcvinputData(uint16 data)
;;;49     {  
000098  e1a01000          MOV      r1,r0
00009c  e3a02402          MOV      r2,#0x2000000
0000a0  e59f3078          LDR      r3,|L1.288|
0000a4  e583201c          STR      r2,[r3,#0x1c]
0000a8  e3a02401          MOV      r2,#0x1000000
0000ac  e5832014          STR      r2,[r3,#0x14]
0000b0  e583201c          STR      r2,[r3,#0x1c]
0000b4  e1a02441          ASR      r2,r1,#8
0000b8  e2433902          SUB      r3,r3,#0x8000
0000bc  e5c32008          STRB     r2,[r3,#8]
0000c0  e1a00000          MOV      r0,r0
                  |L1.196|
0000c4  e59f2058          LDR      r2,|L1.292|
0000c8  e5d22004          LDRB     r2,[r2,#4]
0000cc  e3120080          TST      r2,#0x80
0000d0  0afffffb          BEQ      |L1.196|
0000d4  e59f2048          LDR      r2,|L1.292|
0000d8  e5d20008          LDRB     r0,[r2,#8]
0000dc  e59f2044          LDR      r2,|L1.296|
0000e0  e0020400          AND      r0,r2,r0,LSL #8
0000e4  e59f3038          LDR      r3,|L1.292|
0000e8  e5c31008          STRB     r1,[r3,#8]
0000ec  e1a00000          MOV      r0,r0
                  |L1.240|
0000f0  e59f202c          LDR      r2,|L1.292|
0000f4  e5d22004          LDRB     r2,[r2,#4]
0000f8  e3120080          TST      r2,#0x80
0000fc  0afffffb          BEQ      |L1.240|
000100  e59f201c          LDR      r2,|L1.292|
000104  e5d22008          LDRB     r2,[r2,#8]
000108  e1800002          ORR      r0,r0,r2
00010c  e3a02402          MOV      r2,#0x2000000
000110  e59f3008          LDR      r3,|L1.288|
000114  e5832014          STR      r2,[r3,#0x14]
000118  e12fff1e          BX       lr
                  |L1.284|
00011c  e002c000          DCD      0xe002c000
                  |L1.288|
000120  e0028000          DCD      0xe0028000
                  |L1.292|
000124  e0020000          DCD      0xe0020000
                  |L1.296|
000128  0000ffff          DCD      0x0000ffff
;;;50        uint16 result;					// 临时变量
;;;51       IO1CLR = ST;						// 595数据输出
;;;52        
;;;53        IO1SET = PS;			    		// 将4021的数据锁入锁存器
;;;54        ;
;;;55        IO1CLR = PS;
;;;56        
;;;57        S0SPDR = (data>>8);				// 发送高8位
;;;58        while( 0==(S0SPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
;;;59        //DelayNS(10);
;;;60        result=S0SPDR;					// 得到输入的高8位数据
;;;61        result=(result<<8);				// 移入高8位
;;;62        
;;;63        S0SPDR = (data&0xff);				// 发送低8位
;;;64        while( 0==(S0SPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
;;;65        //DelayNS(10);
;;;66        result|=S0SPDR;					// 放入低8位
;;;67        
;;;68       IO1SET = ST;						// 595数据输出
;;;69        
;;;70        return(result);  				// 返回输入的16位数据
;;;71     }
                          ENDP


⌨️ 快捷键说明

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