📄 io.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 + -