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

📄 2410lib.txt

📁 此源码是sc3c2410串口测试程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000858  e3a00000          MOV      r0,#0
00085c  e5c40000          STRB     r0,[r4,#0]
;;;322        uart_sendbyte('\n');
000860  e3a0000a          MOV      r0,#0xa
000864  ebfffffe          BL       uart_sendbyte
;;;323    }
000868  e8bd4070          POP      {r4-r6,lr}
00086c  e12fff1e          BX       lr
                          ENDP

                  uart_getintnum PROC
;;;335    int uart_getintnum(void)
;;;336    {
000870  e92d43f0          PUSH     {r4-r9,lr}
000874  e24dd024          SUB      sp,sp,#0x24
;;;337        char str[30];
;;;338        char *pString = str;
000878  e28d4004          ADD      r4,sp,#4
;;;339        int base     = 10;
00087c  e3a0500a          MOV      r5,#0xa
;;;340        int minus    = 0;
000880  e3a06000          MOV      r6,#0
;;;341        int nResult   = 0;
000884  e3a07000          MOV      r7,#0
;;;342        int lastIndex;    
;;;343        int i;
;;;344        
;;;345        uart_getstring(pString);
000888  e1a00004          MOV      r0,r4
00088c  ebfffffe          BL       uart_getstring
;;;346        
;;;347        if(pString[0]=='-')
000890  e5d40000          LDRB     r0,[r4,#0]
000894  e350002d          CMP      r0,#0x2d
000898  1a000001          BNE      |L1.2212|
;;;348        {
;;;349            minus = 1;
00089c  e3a06001          MOV      r6,#1
;;;350            pString++;
0008a0  e2844001          ADD      r4,r4,#1
                  |L1.2212|
;;;351        }
;;;352        
;;;353        if(pString[0]=='0' && (pString[1]=='x' || pString[1]=='X'))
0008a4  e5d40000          LDRB     r0,[r4,#0]
0008a8  e3500030          CMP      r0,#0x30
0008ac  1a000007          BNE      |L1.2256|
0008b0  e5d40001          LDRB     r0,[r4,#1]
0008b4  e3500078          CMP      r0,#0x78
0008b8  0a000002          BEQ      |L1.2248|
0008bc  e5d40001          LDRB     r0,[r4,#1]
0008c0  e3500058          CMP      r0,#0x58
0008c4  1a000001          BNE      |L1.2256|
                  |L1.2248|
;;;354        {
;;;355            base    = 16;
0008c8  e3a05010          MOV      r5,#0x10
;;;356            pString += 2;
0008cc  e2844002          ADD      r4,r4,#2
                  |L1.2256|
;;;357        }
;;;358        
;;;359        lastIndex = strlen(pString) - 1;
0008d0  e1a00004          MOV      r0,r4
0008d4  ebfffffe          BL       strlen
0008d8  e2408001          SUB      r8,r0,#1
;;;360        
;;;361        if(lastIndex<0)
0008dc  e3580000          CMP      r8,#0
0008e0  aa000003          BGE      |L1.2292|
;;;362            return -1;
0008e4  e3e00000          MVN      r0,#0
                  |L1.2280|
0008e8  e28dd024          ADD      sp,sp,#0x24
0008ec  e8bd43f0          POP      {r4-r9,lr}
;;;363        
;;;364        if(pString[lastIndex]=='h' || pString[lastIndex]=='H' )
;;;365        {
;;;366            base = 16;
;;;367            pString[lastIndex] = 0;
;;;368            lastIndex--;
;;;369        }
;;;370    
;;;371        if(base==10)
;;;372        {
;;;373            nResult = atoi(pString);
;;;374            nResult = minus ? (-1*nResult):nResult;
;;;375        }
;;;376        else
;;;377        {
;;;378            for(i=0;i<=lastIndex;i++)
;;;379            {
;;;380                if(isalpha(pString[i]))
;;;381                {
;;;382                    if(isupper(pString[i]))
;;;383                        nResult = (nResult<<4) + pString[i] - 'A' + 10;
;;;384                    else
;;;385                        nResult = (nResult<<4) + pString[i] - 'a' + 10;
;;;386                }
;;;387                else
;;;388                    nResult = (nResult<<4) + pString[i] - '0';
;;;389            }
;;;390            nResult = minus ? (-1*nResult):nResult;
;;;391        }
;;;392        return nResult;
;;;393    }
0008f0  e12fff1e          BX       lr
                  |L1.2292|
0008f4  e7d40008          LDRB     r0,[r4,r8]
0008f8  e3500068          CMP      r0,#0x68
0008fc  0a000002          BEQ      |L1.2316|
000900  e7d40008          LDRB     r0,[r4,r8]
000904  e3500048          CMP      r0,#0x48
000908  1a000003          BNE      |L1.2332|
                  |L1.2316|
00090c  e3a05010          MOV      r5,#0x10
000910  e3a00000          MOV      r0,#0
000914  e7c40008          STRB     r0,[r4,r8]
000918  e2488001          SUB      r8,r8,#1
                  |L1.2332|
00091c  e355000a          CMP      r5,#0xa
000920  1a000009          BNE      |L1.2380|
000924  e1a00004          MOV      r0,r4
000928  ebfffffe          BL       atoi
00092c  e1a07000          MOV      r7,r0
000930  e3560000          CMP      r6,#0
000934  0a000001          BEQ      |L1.2368|
000938  e2670000          RSB      r0,r7,#0
00093c  ea000000          B        |L1.2372|
                  |L1.2368|
000940  e1a00007          MOV      r0,r7
                  |L1.2372|
000944  e1a07000          MOV      r7,r0
000948  ea000021          B        |L1.2516|
                  |L1.2380|
00094c  e3a09000          MOV      r9,#0
000950  ea000017          B        |L1.2484|
                  |L1.2388|
000954  ebfffffe          BL       __rt_ctype_table
000958  e5900000          LDR      r0,[r0,#0]
00095c  e7d41009          LDRB     r1,[r4,r9]
000960  e7d00001          LDRB     r0,[r0,r1]
000964  e3100098          TST      r0,#0x98
000968  0a00000d          BEQ      |L1.2468|
00096c  ebfffffe          BL       __rt_ctype_table
000970  e5900000          LDR      r0,[r0,#0]
000974  e7d41009          LDRB     r1,[r4,r9]
000978  e7d00001          LDRB     r0,[r0,r1]
00097c  e3100010          TST      r0,#0x10
000980  0a000003          BEQ      |L1.2452|
000984  e7d40009          LDRB     r0,[r4,r9]
000988  e0800207          ADD      r0,r0,r7,LSL #4
00098c  e2407037          SUB      r7,r0,#0x37
000990  ea000006          B        |L1.2480|
                  |L1.2452|
000994  e7d40009          LDRB     r0,[r4,r9]
000998  e0800207          ADD      r0,r0,r7,LSL #4
00099c  e2407057          SUB      r7,r0,#0x57
0009a0  ea000002          B        |L1.2480|
                  |L1.2468|
0009a4  e7d40009          LDRB     r0,[r4,r9]
0009a8  e0800207          ADD      r0,r0,r7,LSL #4
0009ac  e2407030          SUB      r7,r0,#0x30
                  |L1.2480|
0009b0  e2899001          ADD      r9,r9,#1
                  |L1.2484|
0009b4  e1590008          CMP      r9,r8
0009b8  daffffe5          BLE      |L1.2388|
0009bc  e3560000          CMP      r6,#0
0009c0  0a000001          BEQ      |L1.2508|
0009c4  e2670000          RSB      r0,r7,#0
0009c8  ea000000          B        |L1.2512|
                  |L1.2508|
0009cc  e1a00007          MOV      r0,r7
                  |L1.2512|
0009d0  e1a07000          MOV      r7,r0
                  |L1.2516|
0009d4  e1a00007          MOV      r0,r7
0009d8  eaffffc2          B        |L1.2280|
                          ENDP

                  beep PROC
;;;478    {
;;;479    	if (nBeepStatus==0)
0009dc  e3500000          CMP      r0,#0
0009e0  1a000005          BNE      |L1.2556|
;;;480    		rGPBDAT |= 0x1;
0009e4  e3a01456          MOV      r1,#0x56000000
0009e8  e5911014          LDR      r1,[r1,#0x14]
0009ec  e3811001          ORR      r1,r1,#1
0009f0  e3a02456          MOV      r2,#0x56000000
0009f4  e5821014          STR      r1,[r2,#0x14]
0009f8  ea000005          B        |L1.2580|
                  |L1.2556|
;;;481    	else
;;;482    		rGPBDAT &= 0x7fe;
0009fc  e3a01456          MOV      r1,#0x56000000
000a00  e5911014          LDR      r1,[r1,#0x14]
000a04  e59f2014          LDR      r2,|L1.2592|
000a08  e0011002          AND      r1,r1,r2
000a0c  e3a02456          MOV      r2,#0x56000000
000a10  e5821014          STR      r1,[r2,#0x14]
                  |L1.2580|
;;;483    
;;;484    }
000a14  e12fff1e          BX       lr
                  |L1.2584|
000a18  00000000          DCD      f_nWhichUart
                  |L1.2588|
000a1c  08200800          DCB      "\b\40\b\0"
                  |L1.2592|
000a20  000007fe          DCD      0x000007fe
                          ENDP

                  timer_start PROC
;;;494    {
;;;495        rWTCON = ((PCLK/1000000-1)<<8)|(divider<<3); //Watch-dog timer control register
000a24  e3a01c31          MOV      r1,#0x3100
000a28  e1811180          ORR      r1,r1,r0,LSL #3
000a2c  e3a02453          MOV      r2,#0x53000000
000a30  e5821000          STR      r1,[r2,#0]
;;;496        rWTDAT = 0xffff;							 //Watch-dog timer data register
000a34  e51f1680          LDR      r1,|L1.956|
000a38  e5821004          STR      r1,[r2,#4]
;;;497        rWTCNT = 0xffff;							 //Watch-dog count register
000a3c  e5821008          STR      r1,[r2,#8]
;;;498    
;;;499    	//Watch-dog timer enable & interrupt  disable
;;;500    //	rWTCON = rWTCON |(1<<5) & !(1<<2);	 //?
;;;501        rWTCON = rWTCON | (1<<5) | ~(1<<2);  //May 06, 2002 SOP
000a40  e3a01453          MOV      r1,#0x53000000
000a44  e5911000          LDR      r1,[r1,#0]
000a48  e3811020          ORR      r1,r1,#0x20
000a4c  e3e02004          MVN      r2,#4
000a50  e1811002          ORR      r1,r1,r2
000a54  e3a02453          MOV      r2,#0x53000000
000a58  e5821000          STR      r1,[r2,#0]
;;;502    }
000a5c  e12fff1e          BX       lr
                          ENDP

                  timer_stop PROC
;;;513    {
;;;514        rWTCON = ((PCLK/1000000-1)<<8);
000a60  e3a00c31          MOV      r0,#0x3100
000a64  e3a01453          MOV      r1,#0x53000000
000a68  e5810000          STR      r0,[r1,#0]
;;;515        return (0xffff - rWTCNT);
000a6c  e3a00453          MOV      r0,#0x53000000
000a70  e5900008          LDR      r0,[r0,#8]
000a74  e51f16c0          LDR      r1,|L1.956|
000a78  e0410000          SUB      r0,r1,r0
;;;516    }
000a7c  e12fff1e          BX       lr
                          ENDP

                  change_value_MPLL PROC
;;;521    {
;;;522        rMPLLCON = (nMdiv<<12) | (nPdiv<<4) | nSdiv;
000a80  e1a03600          LSL      r3,r0,#12
000a84  e1833201          ORR      r3,r3,r1,LSL #4
000a88  e1833002          ORR      r3,r3,r2
000a8c  e3a0c313          MOV      r12,#0x4c000000
000a90  e58c3004          STR      r3,[r12,#4]
;;;523    }
000a94  e12fff1e          BX       lr
                          ENDP

                  change_clock_divider PROC
;;;533         //     1,1         1:2:4
;;;534        rCLKDIVN = (nHdiv<<1) | nPdiv;    
000a98  e1812080          ORR      r2,r1,r0,LSL #1
000a9c  e3a03313          MOV      r3,#0x4c000000
000aa0  e5832014          STR      r2,[r3,#0x14]
;;;535        
;;;536    //    if(nHdiv)
;;;537    //        MMU_SetAsyncBusMode();
;;;538    //    else 
;;;539    //        MMU_SetFastBusMode();
;;;540    }
000aa4  e12fff1e          BX       lr
                          ENDP

                  ChangeUPllValue PROC
;;;545    {
;;;546        rUPLLCON = (nMdiv<<12) | (nPdiv<<4) | nSdiv;
000aa8  e1a03600          LSL      r3,r0,#12
000aac  e1833201          ORR      r3,r3,r1,LSL #4
000ab0  e1833002          ORR      r3,r3,r2
000ab4  e3a0c313          MOV      r12,#0x4c000000
000ab8  e58c3008          STR      r3,[r12,#8]
;;;547    }
000abc  e12fff1e          BX       lr
                          ENDP

                  __gccmain PROC
;;;618    {
;;;619    }
000ac0  e12fff1e          BX       lr
                          ENDP


                          AREA ||.data||, DATA, ALIGN=2

                  delayLoopCount
000000  000007ec          DCD      0x000007ec
                  f_nWhichUart
000004  00000000          DCD      0x00000000
                  ||Image$$RW_ZI$$ZI$$Limit||
000008  00                DCB      0x00

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -