?? lpclib.lst
字號:
561 1 #if (Fpclk / (Fcclk / 4)) == 4
VPBDIV = 1;
#endif
564 1
565 1 #if (Fcco / Fcclk) == 2
PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
568 1 #if (Fcco / Fcclk) == 4
569 1 PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
570 1 #endif
571 1 #if (Fcco / Fcclk) == 8
PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
574 1 #if (Fcco / Fcclk) == 16
PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
577 1 PLLFEED = 0xaa;
578 1 PLLFEED = 0x55;
579 1 while((PLLSTAT & (1 << 10)) == 0);
580 1 PLLCON = 3;
581 1 PLLFEED = 0xaa;
582 1 PLLFEED = 0x55;
583 1
584 1 /* 設置存儲器加速模塊 */
585 1 /* Set memory accelerater module*/
586 1 MAMCR = 0;
ARM COMPILER V2.54a, lpclib 04/09/07 10:03:16 PAGE 10
587 1 #if Fcclk < 20000000
MAMTIM = 1;
#else
590 1 #if Fcclk < 40000000
MAMTIM = 2;
#else
593 1 MAMTIM = 3;
594 1 #endif
595 1 #endif
596 1 MAMCR = 2;
597 1
598 1 /* 初始化VIC */
599 1 /* initialize VIC*/
600 1 VICIntEnClr = 0xffffffff; //清除中斷標志位
601 1 VICVectAddr = 0x00000000; //向量中斷地址寄存器清0
602 1 VICIntSelect= 0x00000000; //所有中斷為IRQ中斷
603 1
604 1 VICVectCntl0 = 0x0000002e;
605 1 VICVectAddr0 = (unsigned int)IRQ_Eint0; // 0
606 1
607 1 VICVectCntl1 = 0x0000002f;
608 1 VICVectAddr1 = (unsigned int)IRQ_Eint1; // 1
609 1
610 1 VICVectCntl2 = 0x00000030;
611 1 VICVectAddr2 = (unsigned int)IRQ_Eint2; // 2
612 1
613 1 VICVectCntl3 = 0x00000031;
614 1 VICVectAddr3 = (unsigned int)IRQ_Eint3; // 3
615 1
616 1 VICVectCntl4 = 0x00000025;
617 1 VICVectAddr4 = (unsigned int)IRQ_TIME1; // 4
618 1
619 1 VICVectCntl5 = 0x00000027 ;
620 1 VICVectAddr5 = (unsigned int)IRQ_UART1; // 5
621 1 INT_INIT (); //中斷初始化
622 1 //EN_UART1_INT(); //開串行中斷1
623 1 //EN_W_INT(); //開寫卡中斷
624 1
625 1 Port_Init();
626 1 // Hd1_off();
627 1 //Hd2_off();
628 1 //Hd3_off();
629 1 CLR_HD2();
630 1 CLR_HD3();
631 1 UART1_Init (9600);
632 1 //------------------------------------------------------------------------------------------
633 1 // UART1= 0x00000027 串行中斷0中斷號
634 1 // TIME1= 0x00000025 捕獲中斷3中斷號
635 1 // Eint0= 0x0000002e 外部中斷0中斷號
636 1 // Eint1= 0x0000002f 外部中斷1中斷號
637 1 // Eint2= 0x00000030 外部中斷2中斷號
638 1 // Eint3= 0x00000031 外部中斷3中斷號
639 1 //------------------------------------------------------------------------------------------
640 1 }
ARM COMPILER V2.54a, lpclib 04/09/07 10:03:16 PAGE 11
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (vsprintf?T)
EXTERN DATA (FLAG_TRACK2)
EXTERN DATA (FLAG_TRACK3)
EXTERN CODE32 (IRQ_Eint0?A)
EXTERN CODE32 (IRQ_Eint1?A)
EXTERN CODE32 (IRQ_Eint2?A)
EXTERN CODE32 (IRQ_Eint3?A)
EXTERN CODE32 (IRQ_TIME1?A)
EXTERN CODE32 (IRQ_UART1?A)
EXTERN CODE16 (?C?UDIV?T)
EXTERN CODE16 (?C?SDIV?T)
*** PUBLICS:
PUBLIC R_CPD?T
PUBLIC R_HD1?T
PUBLIC R_HD2?T
PUBLIC R_HD3?T
PUBLIC b_lrc?T
PUBLIC EN_R_INT?T
PUBLIC CLR_R_INT?T
PUBLIC EN_W_INT?T
PUBLIC CLR_W_INT?T
PUBLIC CLR_UART1_INT?T
PUBLIC EN_UART1_INT?T
PUBLIC Uart_Printf?T
PUBLIC Uart_GetString?T
PUBLIC Uart_SendString?T
PUBLIC Uart_SendByte?T
PUBLIC Uart_Getch?T
PUBLIC UART1_Init?T
PUBLIC UART0_Init?T
PUBLIC DelayNS?T
PUBLIC Port_Init?T
PUBLIC Beep_OFF?T
PUBLIC Beep_ON?T
PUBLIC LED_ERR_OFF?T
PUBLIC LED_ERR_ON?T
PUBLIC LED_W_OFF?T
PUBLIC LED_W_ON?T
PUBLIC LED_R_OFF?T
PUBLIC LED_R_ON?T
PUBLIC CS_HD?T
PUBLIC CLR_HD2?T
PUBLIC CLR_HD3?T
PUBLIC Hd1_L?T
PUBLIC Hd1_H?T
PUBLIC Hd2_L?T
PUBLIC Hd2_H?T
PUBLIC Hd3_L?T
PUBLIC Hd3_H?T
PUBLIC TargetResetInit?T
PUBLIC EN_HD3?T
PUBLIC EN_HD2?T
PUBLIC INT_INIT?T
*** DATA SEGMENT '?CON?lpclib':
00000000 ??S_1:
00000000 DB 0x08,' ',0x08,0x00
*** CODE SEGMENT '?PR?b_lrc?T?lpclib':
18: unsigned char b_lrc (unsigned char dat)
00000000 1C01 MOV R1,R0 ; dat
00000002 ---- Variable 'dat' assigned to Register 'R1' ----
ARM COMPILER V2.54a, lpclib 04/09/07 10:03:16 PAGE 12
19: {
00000002 ; SCOPE-START
22: tmp=(dat>>4)&0x0f;
00000002 1C08 MOV R0,R1 ; dat
00000004 0602 LSL R2,R0,#0x18 ; dat
00000006 0E12 LSR R2,R2,#0x18
00000008 0912 LSR R2,R2,#0x4
0000000A 230F MOV R3,#0xF
0000000C 401A AND R2,R3
0000000E 0612 LSL R2,R2,#0x18
00000010 0E12 LSR R2,R2,#0x18
00000012 ---- Variable 'tmp' assigned to Register 'R2' ----
23: tmpdat=(dat&0x0f)^tmp; //低四位或高4位
00000012 1C08 MOV R0,R1 ; dat
00000014 0601 LSL R1,R0,#0x18 ; dat
00000016 0E09 LSR R1,R1,#0x18
00000018 4019 AND R1,R3
0000001A 1C10 MOV R0,R2 ; tmp
0000001C 0600 LSL R0,R0,#0x18 ; tmp
0000001E 0E00 LSR R0,R0,#0x18
00000020 4041 EOR R1,R0
00000022 0609 LSL R1,R1,#0x18
00000024 0E09 LSR R1,R1,#0x18
00000026 ---- Variable 'tmpdat' assigned to Register 'R1' ----
24: tmp=(tmpdat>>2)&0x03; //取低二位
00000026 1C08 MOV R0,R1 ; tmpdat
00000028 0602 LSL R2,R0,#0x18 ; tmpdat
0000002A 0E12 LSR R2,R2,#0x18
0000002C 0892 LSR R2,R2,#0x2
0000002E 2003 MOV R0,#0x3
00000030 4002 AND R2,R0
00000032 0612 LSL R2,R2,#0x18
00000034 0E12 LSR R2,R2,#0x18
25: tmpdat=(tmpdat&0x03)^tmp;
00000036 0609 LSL R1,R1,#0x18 ; tmpdat
00000038 0E09 LSR R1,R1,#0x18
0000003A 4001 AND R1,R0
0000003C 1C10 MOV R0,R2 ; tmp
0000003E 0600 LSL R0,R0,#0x18 ; tmp
00000040 0E00 LSR R0,R0,#0x18
00000042 4041 EOR R1,R0
00000044 0609 LSL R1,R1,#0x18
00000046 0E09 LSR R1,R1,#0x18
26: tmp=(tmpdat>>1)&0x01;
00000048 1C08 MOV R0,R1 ; tmpdat
0000004A 0602 LSL R2,R0,#0x18 ; tmpdat
0000004C 0E12 LSR R2,R2,#0x18
0000004E 0852 LSR R2,R2,#0x1
00000050 2001 MOV R0,#0x1
00000052 4002 AND R2,R0
00000054 0612 LSL R2,R2,#0x18
00000056 0E12 LSR R2,R2,#0x18
27: tmpdat=(tmpdat&0x01)^tmp;
00000058 0609 LSL R1,R1,#0x18 ; tmpdat
0000005A 0E09 LSR R1,R1,#0x18
0000005C 4001 AND R1,R0
0000005E 1C10 MOV R0,R2 ; tmp
00000060 0600 LSL R0,R0,#0x18 ; tmp
00000062 0E00 LSR R0,R0,#0x18
00000064 4041 EOR R1,R0
00000066 0609 LSL R1,R1,#0x18
00000068 0E09 LSR R1,R1,#0x18
28: return(tmpdat);
0000006A 1C08 MOV R0,R1 ; tmpdat
0000006C 0600 LSL R0,R0,#0x18 ; tmpdat
0000006E 0E00 LSR R0,R0,#0x18
ARM COMPILER V2.54a, lpclib 04/09/07 10:03:16 PAGE 13
00000070 ; SCOPE-END
30: }
00000070 4770 BX R14
00000072 ENDP ; 'b_lrc?T'
*** CODE SEGMENT '?PR?DelayNS?T?lpclib':
35: void DelayNS (uint32 dly)
00000000 ---- Variable 'dly' assigned to Register 'R0' ----
36: {
00000000 ; SCOPE-START
38: for ( ; dly>0; dly--)
00000000 E006 B L_4 ; T=0x00000010
39: for (i=0; i<50000; i++);
00000002 L_11:
00000002 2100 MOV R1,#0x0
00000004 ---- Variable 'i' assigned to Register 'R1' ----
00000004 L_7:
00000004 3101 ADD R1,#0x1
00000006 1C0A MOV R2,R1 ; i
00000008 4800 LDR R3,=0xC350
0000000A 429A CMP R2,R3 ; i
0000000C D3FA BCC L_7 ; T=0x00000004
0000000E 3801 SUB R0,#0x1
00000010 L_4:
00000010 1C01 MOV R1,R0 ; dly
00000012 2900 CMP R1,#0x0 ; dly
00000014 D8F5 BHI L_11 ; T=0x00000002
00000016 ; SCOPE-END
40: }
00000016 4770 BX R14
00000018 ENDP ; 'DelayNS?T'
*** CODE SEGMENT '?PR?UART0_Init?T?lpclib':
46: void UART0_Init (uint32 baud)
00000000 B500 PUSH {LR}
00000002 1C02 MOV R2,R0 ; baud
00000004 ---- Variable 'baud' assigned to Register 'R2' ----
47: {
00000004 ; SCOPE-START
49: PINSEL0 =(PINSEL0&(~0x0f))|0x05; //設置UART0連接,其他為普通IO 口
00000004 4800 LDR R0,=0xE002C000
00000006 6801 LDR R1,[R0,#0x0]
00000008 200F MOV R0,#0xF
0000000A 4381 BIC R1,R0
0000000C 2005 MOV R0,#0x5
0000000E 4301 ORR R1,R0
00000010 4800 LDR R0,=0xE002C000
00000012 6001 STR R1,[R0,#0x0]
50: U0LCR = 0x80; // DLAB=1,允許設置波特率
00000014 2180 MOV R1,#0x80
00000016 4800 LDR R0,=0xE000C00C
00000018 7001 STRB R1,[R0,#0x0]
51: Fdiv = (Fpclk / 16) / baud; // 設置波特率
0000001A 1C11 MOV R1,R2 ; baud
0000001C 4800 LDR R0,=0xA8C00
0000001E F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000020 FFEF BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000022 1C08 MOV R0,R1
00000024 0403 LSL R3,R0,#0x10
00000026 0C1B LSR R3,R3,#0x10
00000028 ---- Variable 'Fdiv' assigned to Register 'R3' ----
52: U0DLM = Fdiv / 256;
00000028 1C18 MOV R0,R3 ; Fdiv
0000002A 0400 LSL R0,R0,#0x10 ; Fdiv
0000002C 0C00 LSR R0,R0,#0x10
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -