📄 led16x16.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\SDRAM\led16x16.o --depend=.\SDRAM\led16x16.d --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -IC:\Keil\ARM\INC\Samsung --omf_browse=.\SDRAM\led16x16.crf Source\led16x16.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
led_update PROC
;;;53 static void led_update(void)
;;;54 {
000000 e92d4010 PUSH {r4,lr}
;;;55 int j = 20;
000004 e3a04014 MOV r4,#0x14
;;;56 while(j--)
000008 ea000000 B |L1.16|
|L1.12|
;;;57 {
;;;58 led_char_disp();
00000c ebfffffe BL led_char_disp
|L1.16|
000010 e1b00004 MOVS r0,r4 ;56
000014 e2444001 SUB r4,r4,#1 ;56
000018 1afffffb BNE |L1.12|
;;;59 }
;;;60 }
00001c e8bd4010 POP {r4,lr}
000020 e12fff1e BX lr
;;;61
ENDP
refresh_l_display_array PROC
;;;70 static void refresh_l_display_array(u8 bits, u8 *str)
;;;71 {
000024 e92d4010 PUSH {r4,lr}
;;;72 u32 i;
;;;73 u32 remaining_bits = 8-bits;
000028 e2603008 RSB r3,r0,#8
;;;74
;;;75 for(i=0;i<16;i++)
00002c e3a02000 MOV r2,#0
000030 ea00000f B |L1.116|
|L1.52|
;;;76 {
;;;77 l_display_array[2*i] = (*str<<bits) |(*(str+16)>>remaining_bits);
000034 e5d1c000 LDRB r12,[r1,#0]
000038 e1a0c01c LSL r12,r12,r0
00003c e5d1e010 LDRB lr,[r1,#0x10]
000040 e18cc35e ORR r12,r12,lr,ASR r3
000044 e59f41a0 LDR r4,|L1.492|
000048 e7c4c082 STRB r12,[r4,r2,LSL #1]
;;;78 l_display_array[2*(i+1)-1] = (*(str+16)<<bits) |(*(str+32)>>remaining_bits);
00004c e5d1c010 LDRB r12,[r1,#0x10]
000050 e1a0c01c LSL r12,r12,r0
000054 e5d1e020 LDRB lr,[r1,#0x20]
000058 e18cc35e ORR r12,r12,lr,ASR r3
00005c e282e001 ADD lr,r2,#1
000060 e1a0e08e LSL lr,lr,#1
000064 e24ee001 SUB lr,lr,#1
000068 e7c4c00e STRB r12,[r4,lr]
;;;79 str++;
00006c e2811001 ADD r1,r1,#1
000070 e2822001 ADD r2,r2,#1 ;75
|L1.116|
000074 e3520010 CMP r2,#0x10 ;75
000078 3affffed BCC |L1.52|
;;;80 }
;;;81 }
00007c e8bd4010 POP {r4,lr}
000080 e12fff1e BX lr
;;;82
ENDP
l_display_scroll PROC
;;;91 static void l_display_scroll ( u8 *str )
;;;92 {
000084 e92d4070 PUSH {r4-r6,lr}
000088 e1a05000 MOV r5,r0
;;;93 int i;
;;;94 for(i=0;i<8;i++)
00008c e3a04000 MOV r4,#0
000090 ea000004 B |L1.168|
|L1.148|
;;;95 {
;;;96 refresh_l_display_array(i, str);
000094 e20400ff AND r0,r4,#0xff
000098 e1a01005 MOV r1,r5
00009c ebfffffe BL refresh_l_display_array
;;;97 led_update();
0000a0 ebfffffe BL led_update
0000a4 e2844001 ADD r4,r4,#1 ;94
|L1.168|
0000a8 e3540008 CMP r4,#8 ;94
0000ac bafffff8 BLT |L1.148|
;;;98 }
;;;99 }
0000b0 e8bd4070 POP {r4-r6,lr}
0000b4 e12fff1e BX lr
;;;100
ENDP
copy_data PROC
;;;110 {
;;;111 while(size--)
0000b8 ea000001 B |L1.196|
|L1.188|
;;;112 *(dst++) = *(src++);
0000bc e4d13001 LDRB r3,[r1],#1
0000c0 e4c03001 STRB r3,[r0],#1
|L1.196|
0000c4 e1b03002 MOVS r3,r2 ;111
0000c8 e2422001 SUB r2,r2,#1 ;111
0000cc 1afffffa BNE |L1.188|
;;;113 }
0000d0 e12fff1e BX lr
;;;114
ENDP
refresh_assic_buffer PROC
;;;123 static void refresh_assic_buffer(u8 *str)
;;;124 {
0000d4 e92d4010 PUSH {r4,lr}
0000d8 e1a04000 MOV r4,r0
;;;125 copy_data(&assic_buffer[0], &assic_buffer[16],16);
0000dc e3a02010 MOV r2,#0x10
0000e0 e59f1108 LDR r1,|L1.496|
0000e4 e2410010 SUB r0,r1,#0x10
0000e8 ebfffffe BL copy_data
;;;126 copy_data(&assic_buffer[16], &assic_buffer[32],16);
0000ec e3a02010 MOV r2,#0x10
0000f0 e59f10fc LDR r1,|L1.500|
0000f4 e2410010 SUB r0,r1,#0x10
0000f8 ebfffffe BL copy_data
;;;127 copy_data(&assic_buffer[32], str,16);
0000fc e3a02010 MOV r2,#0x10
000100 e1a01004 MOV r1,r4
000104 e59f00e8 LDR r0,|L1.500|
000108 ebfffffe BL copy_data
;;;128 l_display_scroll(assic_buffer);
00010c e59f00e4 LDR r0,|L1.504|
000110 ebfffffe BL l_display_scroll
;;;129 }
000114 e8bd4010 POP {r4,lr}
000118 e12fff1e BX lr
;;;130
ENDP
char_out PROC
;;;139 void char_out(u8 font, u8 *str)
;;;140 {
00011c e92d41f0 PUSH {r4-r8,lr}
000120 e1a04000 MOV r4,r0
000124 e1a05001 MOV r5,r1
;;;141 u8 *str_ptr;
;;;142 u8 glyph;
;;;143
;;;144 glyph = ( u8 )*str;
000128 e5d57000 LDRB r7,[r5,#0]
;;;145
;;;146 while(glyph != '\0' )
00012c ea000011 B |L1.376|
|L1.304|
;;;147 {
;;;148 str_ptr = fonts[font].ascii_code + ( glyph - fonts[font].ascii_beg) * fonts[font].ascii_height;
000130 e0840084 ADD r0,r4,r4,LSL #1
000134 e59f10c0 LDR r1,|L1.508|
000138 e0810100 ADD r0,r1,r0,LSL #2
00013c e5900004 LDR r0,[r0,#4]
000140 e0841084 ADD r1,r4,r4,LSL #1
000144 e59f20b0 LDR r2,|L1.508|
000148 e0821101 ADD r1,r2,r1,LSL #2
00014c e5d11008 LDRB r1,[r1,#8]
000150 e0471001 SUB r1,r7,r1
000154 e0842084 ADD r2,r4,r4,LSL #1
000158 e59f309c LDR r3,|L1.508|
00015c e0832102 ADD r2,r3,r2,LSL #2
000160 e5d22001 LDRB r2,[r2,#1]
000164 e0260291 MLA r6,r1,r2,r0
;;;149 refresh_assic_buffer(str_ptr);
000168 e1a00006 MOV r0,r6
00016c ebfffffe BL refresh_assic_buffer
;;;150 str++;
000170 e2855001 ADD r5,r5,#1
;;;151 glyph = ( u8 )*str;
000174 e5d57000 LDRB r7,[r5,#0]
|L1.376|
000178 e3570000 CMP r7,#0 ;146
00017c 1affffeb BNE |L1.304|
;;;152 }
;;;153 }
000180 e8bd41f0 POP {r4-r8,lr}
000184 e12fff1e BX lr
;;;154
ENDP
led_init PROC
;;;165 {
;;;166 rGPBCON = rGPBCON & 0xfff0ff | 0x500; // GPB4,GPB5=01:Output
000188 e3a00456 MOV r0,#0x56000000
00018c e5900010 LDR r0,[r0,#0x10]
000190 e3c004ff BIC r0,r0,#0xff000000
000194 e3c00c0f BIC r0,r0,#0xf00
000198 e3800c05 ORR r0,r0,#0x500
00019c e3a01456 MOV r1,#0x56000000
0001a0 e5810010 STR r0,[r1,#0x10]
;;;167 rGPCCON = rGPCCON & 0xffff3ffc | 0x4001; // GPC0,GPC7=01:Output
0001a4 e3a00456 MOV r0,#0x56000000
0001a8 e5900020 LDR r0,[r0,#0x20]
0001ac e3c00903 BIC r0,r0,#0xc000
0001b0 e3c00003 BIC r0,r0,#3
0001b4 e3800901 ORR r0,r0,#0x4000
0001b8 e3800001 ORR r0,r0,#1
0001bc e5810020 STR r0,[r1,#0x20]
;;;168 rGPDCON = rGPDCON & 0xffcfffff | 0x100000; // GPD10=01:Output
0001c0 e3a00456 MOV r0,#0x56000000
0001c4 e5900030 LDR r0,[r0,#0x30]
0001c8 e3c00603 BIC r0,r0,#0x300000
0001cc e3800601 ORR r0,r0,#0x100000
0001d0 e5810030 STR r0,[r1,#0x30]
;;;169 rGPGCON = rGPGCON & 0xfffcffff | 0x10000; // GPG8=01:Output
0001d4 e3a00456 MOV r0,#0x56000000
0001d8 e5900060 LDR r0,[r0,#0x60]
0001dc e3c00803 BIC r0,r0,#0x30000
0001e0 e3800801 ORR r0,r0,#0x10000
0001e4 e5810060 STR r0,[r1,#0x60]
;;;170 }
0001e8 e12fff1e BX lr
ENDP
|L1.492|
0001ec 00000000 DCD l_display_array
|L1.496|
0001f0 00000010 DCD assic_buffer+0x10
|L1.500|
0001f4 00000020 DCD assic_buffer+0x20
|L1.504|
0001f8 00000000 DCD assic_buffer
|L1.508|
0001fc 00000000 DCD fonts
AREA ||.bss||, DATA, NOINIT, ALIGN=0
l_display_array
% 32
assic_buffer
% 48
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -