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