📄 lpc_main.lst
字号:
\ 000000BC 001080E5 STR R1,[R0, #+0]
92 VICIntSelect = 0;
\ 000000C0 F300E0E3 MVN R0,#+243
\ 000000C4 F00EC0E3 BIC R0,R0,#0xF00
\ 000000C8 0010A0E3 MOV R1,#+0
\ 000000CC 001080E5 STR R1,[R0, #+0]
93
94 /* 添加自己的代码 */
95
96 }
\ 000000D0 0EF0A0E1 MOV PC,LR ;; return
\ ??TargetResetInit_0:
\ 000000D4 80C01FE0 DC32 0xe01fc080
\ 000000D8 00C11FE0 DC32 0xe01fc100
\ 000000DC 84C01FE0 DC32 0xe01fc084
\ 000000E0 8CC01FE0 DC32 0xe01fc08c
\ 000000E4 88C01FE0 DC32 0xe01fc088
97
98
99
100
101 #define SPI_CS 0x00000100 /* P0.8 */
102 #define SPI_DATA 0x00000040 /* P0.6 */
103 #define SPI_CLK 0x00000010 /* P0.4 */
104
105 #define SPI_IOCON 0x00000150 /* 定义SPI接口的I/O设置字 */
106
107
108
109 /****************************************************************************
110 * 名称:DelayNS()
111 * 功能:长软件延时
112 * 入口参数:dly 延时参数,值越大,延时越久
113 * 出口参数:无
114 ****************************************************************************/
\ In segment CODE, align 4, keep-with-next
115 void DelayNS(uint32 dly)
116 { uint32 i;
\ DelayNS:
\ 00000000 050000EA B ??DelayNS_0
117
118 for(; dly>0; dly--)
119 for(i=0; i<5000; i++);
\ ??DelayNS_1:
\ 00000004 011091E2 ADDS R1,R1,#+1
\ ??DelayNS_2:
\ 00000008 8820A0E3 MOV R2,#+136
\ 0000000C 4C2D82E3 ORR R2,R2,#0x1300
\ 00000010 020051E1 CMP R1,R2
\ 00000014 FAFFFF3A BCC ??DelayNS_1
\ 00000018 010050E2 SUBS R0,R0,#+1
\ ??DelayNS_0:
\ 0000001C 000050E3 CMP R0,#+0
\ 00000020 0100000A BEQ ??DelayNS_3
\ 00000024 0010A0E3 MOV R1,#+0
\ 00000028 F6FFFFEA B ??DelayNS_2
120 }
\ ??DelayNS_3:
\ 0000002C 0EF0A0E1 MOV PC,LR ;; return
121
122
123 /****************************************************************************
124 * 名称:HC595_SendDat()
125 * 功能:向74HC595发送一字节数据
126 * 入口参数:dat 要发送的数据
127 * 出口参数:无
128 * 说明:发送数据时,高位先发送。
129 ****************************************************************************/
\ In segment CODE, align 4, keep-with-next
130 void HC595_SendDat(uint8 dat)
131 { uint8 i;
132
133 IO0CLR = SPI_CS; // SPI_CS = 0
\ HC595_SendDat:
\ 00000000 CE12A0E3 MOV R1,#-536870900
\ 00000004 A01B81E3 ORR R1,R1,#0x28000
\ 00000008 402FA0E3 MOV R2,#+256
\ 0000000C 002081E5 STR R2,[R1, #+0]
134 for(i=0; i<8; i++) // 发送8位数据
\ 00000010 0010A0E3 MOV R1,#+0
\ 00000014 090000EA B ??HC595_SendDat_0
135 { IO0CLR = SPI_CLK; // SPI_CLK = 0
136 /* 设置SPI_DATA输出值 */
137 if( (dat&0x80)!=0 ) IO0SET = SPI_DATA;
138 else IO0CLR = SPI_DATA;
\ ??HC595_SendDat_1:
\ 00000018 CE22A0E3 MOV R2,#-536870900
\ 0000001C A02B82E3 ORR R2,R2,#0x28000
\ 00000020 4030A0E3 MOV R3,#+64
\ 00000024 003082E5 STR R3,[R2, #+0]
139 dat <<= 1;
\ ??HC595_SendDat_2:
\ 00000028 8000B0E1 LSLS R0,R0,#+1
140 IO0SET = SPI_CLK; // SPI_CLK = 1
\ 0000002C 4E22A0E3 MOV R2,#-536870908
\ 00000030 A02B82E3 ORR R2,R2,#0x28000
\ 00000034 1030A0E3 MOV R3,#+16
\ 00000038 003082E5 STR R3,[R2, #+0]
\ 0000003C 011091E2 ADDS R1,R1,#+1
\ ??HC595_SendDat_0:
\ 00000040 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 00000044 080051E3 CMP R1,#+8
\ 00000048 0A00002A BCS ??HC595_SendDat_3
\ 0000004C CE22A0E3 MOV R2,#-536870900
\ 00000050 A02B82E3 ORR R2,R2,#0x28000
\ 00000054 1030A0E3 MOV R3,#+16
\ 00000058 003082E5 STR R3,[R2, #+0]
\ 0000005C 800010E3 TST R0,#0x80
\ 00000060 ECFFFF0A BEQ ??HC595_SendDat_1
\ 00000064 4E22A0E3 MOV R2,#-536870908
\ 00000068 A02B82E3 ORR R2,R2,#0x28000
\ 0000006C 4030A0E3 MOV R3,#+64
\ 00000070 003082E5 STR R3,[R2, #+0]
\ 00000074 EBFFFFEA B ??HC595_SendDat_2
141 }
142
143 IO0SET = SPI_CS; // SPI_CS = 1,输出显示数据
\ ??HC595_SendDat_3:
\ 00000078 4E02A0E3 MOV R0,#-536870908
\ 0000007C A00B80E3 ORR R0,R0,#0x28000
\ 00000080 401FA0E3 MOV R1,#+256
\ 00000084 001080E5 STR R1,[R0, #+0]
144 }
\ 00000088 0EF0A0E1 MOV PC,LR ;; return
145
146
\ In segment DATA_C, align 4, align-sorted
147 const uint8 DISP_TAB[16] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
\ DISP_TAB:
\ 00000000 010204081020 DC8 1, 2, 4, 8, 16, 32, 64, 128, 129, 66, 36, 24, 36, 66, 129, 0
\ 408081422418
\ 24428100
148 0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00 };
149 /****************************************************************************
150 * 名称:main()
151 * 功能:根据表DISP_TAB来控制LED显示。
152 ****************************************************************************/
\ In segment CODE, align 4, keep-with-next
153 void main(void)
154 { uint8 i;
\ main:
\ 00000000 10402DE9 PUSH {R4,LR}
155 TargetResetInit();
\ 00000004 ........ BL TargetResetInit
156 PINSEL0 = 0x00000000; // 设置管脚连接GPIO
\ 00000008 E004A0E3 MOV R0,#-536870912
\ 0000000C B00B80E3 ORR R0,R0,#0x2C000
\ 00000010 0010A0E3 MOV R1,#+0
\ 00000014 001080E5 STR R1,[R0, #+0]
157
158 IO0DIR = SPI_IOCON; // 设置SPI控制口为输出
\ 00000018 8E02A0E3 MOV R0,#-536870904
\ 0000001C A00B80E3 ORR R0,R0,#0x28000
\ 00000020 541FA0E3 MOV R1,#+336
\ 00000024 001080E5 STR R1,[R0, #+0]
159 while(1)
160 { for(i=0; i<16; i++)
\ ??main_0:
\ 00000028 0040A0E3 MOV R4,#+0
\ ??main_1:
\ 0000002C FF4014E2 ANDS R4,R4,#0xFF ;; Zero extend
\ 00000030 100054E3 CMP R4,#+16
\ 00000034 FBFFFF2A BCS ??main_0
161 { HC595_SendDat(~DISP_TAB[i]); // 输出LED显示数据
\ 00000038 0400B0E1 MOVS R0,R4
\ 0000003C FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000040 1C109FE5 LDR R1,??main_2 ;; DISP_TAB
\ 00000044 0100D0E7 LDRB R0,[R0, +R1]
\ 00000048 0000F0E1 MVNS R0,R0
\ 0000004C FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000050 ........ BL HC595_SendDat
162 DelayNS(4); // 延时
\ 00000054 0400A0E3 MOV R0,#+4
\ 00000058 ........ BL DelayNS
163 }
\ 0000005C 014094E2 ADDS R4,R4,#+1
\ 00000060 F1FFFFEA B ??main_1
\ ??main_2:
\ 00000064 ........ DC32 DISP_TAB
164 }
165 }
166
167 /*********************************************************************************************************
168 ** End Of File
169 ********************************************************************************************************/
Maximum stack usage in bytes:
Function CSTACK
-------- ------
DelayNS 0
HC595_SendDat 0
TargetResetInit 0
main 8
Segment part sizes:
Function/Label Bytes
-------------- -----
_A_PLLCON 4
_A_PLLCFG 4
_A_PLLSTAT 4
_A_PLLFEED 4
_A_VPBDIV 4
_A_MAMCR 4
_A_MAMTIM 4
_A_VICIntSelect 4
_A_VICIntEnClear 4
VICVectAddr 4
_A_PINSEL0 4
_A_IO0SET 4
_A_IO0DIR 4
_A_IO0CLR 4
TargetResetInit 232
DelayNS 48
HC595_SendDat 140
DISP_TAB 16
main 104
524 bytes in segment CODE
56 bytes in segment DATA_AN
16 bytes in segment DATA_C
524 bytes of CODE memory
16 bytes of CONST memory
0 bytes of DATA memory (+ 56 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -