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

📄 led16x16.txt

📁 led显示程序~~ARM S3C2410 分享了~~谢谢支持~~
💻 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 + -