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

📄 bsp.txt

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;1386   
;;;1387       MAMCR       = 0;                                            /* Disable MAM functionality                                */
00090c  e3a00000          MOV      r0,#0
000910  e59f1558          LDR      r1,|L1.3696|
000914  e5810000          STR      r0,[r1,#0]
;;;1388   
;;;1389       if (clk_freq <  20000000) {                                 /* Compare current clock frequency with MAM modes           */
000918  e59f0584          LDR      r0,|L1.3748|
00091c  e1540000          CMP      r4,r0
000920  2a000002          BCS      |L1.2352|
;;;1390           MAMTIM  =  1;                                           /* Set MAM fetch cycles to 1 processor clock in duration    */
000924  e3a00001          MOV      r0,#1
000928  e59f1540          LDR      r1,|L1.3696|
00092c  e5810004          STR      r0,[r1,#4]
                  |L1.2352|
;;;1391       }
;;;1392   
;;;1393       if (clk_freq <  40000000) {
000930  e59f0570          LDR      r0,|L1.3752|
000934  e1540000          CMP      r4,r0
000938  2a000002          BCS      |L1.2376|
;;;1394           MAMTIM  =  2;                                           /* Set MAM fetch cycles to 2 processor clock in duration    */
00093c  e3a00002          MOV      r0,#2
000940  e59f1528          LDR      r1,|L1.3696|
000944  e5810004          STR      r0,[r1,#4]
                  |L1.2376|
;;;1395       }
;;;1396   
;;;1397       if (clk_freq >= 40000000) {
000948  e59f0558          LDR      r0,|L1.3752|
00094c  e1540000          CMP      r4,r0
000950  3a000002          BCC      |L1.2400|
;;;1398           MAMTIM  =  3;                                           /* Set MAM fetch cycles to 3 processor clock in duration    */
000954  e3a00003          MOV      r0,#3
000958  e59f1510          LDR      r1,|L1.3696|
00095c  e5810004          STR      r0,[r1,#4]
                  |L1.2400|
;;;1399       }
;;;1400   
;;;1401       MAMCR       =  2;                                           /* Enable full MAM functionality                            */
000960  e3a00002          MOV      r0,#2
000964  e59f1504          LDR      r1,|L1.3696|
000968  e5810000          STR      r0,[r1,#0]
;;;1402   }
00096c  e8bd4010          POP      {r4,lr}
000970  e12fff1e          BX       lr
                          ENDP

                  PLL_Init PROC
;;;1295   static  void  PLL_Init (void)
;;;1296   {
000974  e92d41f0          PUSH     {r4-r8,lr}
;;;1297   #if CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL /* Allocate storage for CPU status register                 */
;;;1298       CPU_SR  cpu_sr = 0;
000978  e3a04000          MOV      r4,#0
;;;1299   #endif
;;;1300   
;;;1301   	CPU_INT32U  m;
;;;1302       CPU_INT32U  n;
;;;1303       CPU_INT32U  clk_div;
;;;1304       CPU_INT32U  clk_div_usb;
;;;1305   
;;;1306   
;;;1307       m           =       11;                                     /* PLL Multiplier = 20, MSEL bits = 12 - 1 = 11             */
00097c  e3a0500b          MOV      r5,#0xb
;;;1308       n           =        0;                                     /* PLL Divider    =  1, NSEL bits =  1 - 1 =  0             */
000980  e3a06000          MOV      r6,#0
;;;1309       clk_div     =        5;                                     /* Configure the  ARM Core clock div to 6. CCLKSEL =  6 - 1 */
000984  e3a07005          MOV      r7,#5
;;;1310       clk_div_usb =        5;                                     /* Configure the USB clock divider to 6, USBSEL  = 6 - 1    */
000988  e3a08005          MOV      r8,#5
;;;1311   
;;;1312       if ((PLLSTAT & (1 << 25)) > 0) {                            /* If the PLL is already running                            */
00098c  e59f04dc          LDR      r0,|L1.3696|
000990  e5900088          LDR      r0,[r0,#0x88]
000994  e3100402          TST      r0,#0x2000000
000998  0a00000c          BEQ      |L1.2512|
;;;1313           CPU_CRITICAL_ENTER();
00099c  ebfffffe          BL       CPU_SR_Save
0009a0  e1a04000          MOV      r4,r0
;;;1314           PLLCON  &= ~(1 << 1);                                   /* Disconnect the PLL                                       */
0009a4  e59f04c4          LDR      r0,|L1.3696|
0009a8  e5900080          LDR      r0,[r0,#0x80]
0009ac  e3c00002          BIC      r0,r0,#2
0009b0  e59f14b8          LDR      r1,|L1.3696|
0009b4  e5810080          STR      r0,[r1,#0x80]
;;;1315           PLLFEED  =    0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
0009b8  e3a000aa          MOV      r0,#0xaa
0009bc  e581008c          STR      r0,[r1,#0x8c]
;;;1316           PLLFEED  =    0x55;
0009c0  e3a00055          MOV      r0,#0x55
0009c4  e581008c          STR      r0,[r1,#0x8c]
;;;1317           CPU_CRITICAL_EXIT();
0009c8  e1a00004          MOV      r0,r4
0009cc  ebfffffe          BL       CPU_SR_Restore
                  |L1.2512|
;;;1318       }
;;;1319   
;;;1320       CPU_CRITICAL_ENTER();
0009d0  ebfffffe          BL       CPU_SR_Save
0009d4  e1a04000          MOV      r4,r0
;;;1321       PLLCON     &= ~(1 << 0);                                    /* Disable the PLL                                          */
0009d8  e59f0490          LDR      r0,|L1.3696|
0009dc  e5900080          LDR      r0,[r0,#0x80]
0009e0  e3c00001          BIC      r0,r0,#1
0009e4  e59f1484          LDR      r1,|L1.3696|
0009e8  e5810080          STR      r0,[r1,#0x80]
;;;1322       PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
0009ec  e3a000aa          MOV      r0,#0xaa
0009f0  e581008c          STR      r0,[r1,#0x8c]
;;;1323       PLLFEED     =     0x55;
0009f4  e3a00055          MOV      r0,#0x55
0009f8  e581008c          STR      r0,[r1,#0x8c]
;;;1324       CPU_CRITICAL_EXIT();
0009fc  e1a00004          MOV      r0,r4
000a00  ebfffffe          BL       CPU_SR_Restore
;;;1325   
;;;1326       SCS        &= ~(1 << 4);                                    /* OSCRANGE = 0, Main OSC is between 1 and 20 Mhz           */
000a04  e59f0464          LDR      r0,|L1.3696|
000a08  e59001a0          LDR      r0,[r0,#0x1a0]
000a0c  e3c00010          BIC      r0,r0,#0x10
000a10  e59f1458          LDR      r1,|L1.3696|
000a14  e58101a0          STR      r0,[r1,#0x1a0]
;;;1327   	SCS        |=  (1 << 5);                                    /* OSCEN = 1, Enable the main oscillator                    */
000a18  e1a00001          MOV      r0,r1
000a1c  e59001a0          LDR      r0,[r0,#0x1a0]
000a20  e3800020          ORR      r0,r0,#0x20
000a24  e58101a0          STR      r0,[r1,#0x1a0]
;;;1328   
;;;1329       while ((SCS &  (1 << 6)) == 0) {                            /* Wait until OSCSTAT is set (Main OSC ready to be used)    */
000a28  e1a00000          MOV      r0,r0
                  |L1.2604|
000a2c  e59f043c          LDR      r0,|L1.3696|
000a30  e59001a0          LDR      r0,[r0,#0x1a0]
000a34  e3100040          TST      r0,#0x40
000a38  0afffffb          BEQ      |L1.2604|
;;;1330           ;
;;;1331       }
;;;1332   
;;;1333       CLKSRCSEL   =  (1 << 0);		                            /* Select main OSC, 12MHz, as the PLL clock source          */
000a3c  e3a00001          MOV      r0,#1
000a40  e59f1428          LDR      r1,|L1.3696|
000a44  e581010c          STR      r0,[r1,#0x10c]
;;;1334   
;;;1335       CPU_CRITICAL_ENTER();
000a48  ebfffffe          BL       CPU_SR_Save
000a4c  e1a04000          MOV      r4,r0
;;;1336       PLLCFG      =  (m << 0) | (n << 16);                        /* Configure the PLL multiplier and divider                 */
000a50  e1850806          ORR      r0,r5,r6,LSL #16
000a54  e59f1414          LDR      r1,|L1.3696|
000a58  e5810084          STR      r0,[r1,#0x84]
;;;1337       PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
000a5c  e3a000aa          MOV      r0,#0xaa
000a60  e581008c          STR      r0,[r1,#0x8c]
;;;1338       PLLFEED     =     0x55;
000a64  e3a00055          MOV      r0,#0x55
000a68  e581008c          STR      r0,[r1,#0x8c]
;;;1339       CPU_CRITICAL_EXIT();
000a6c  e1a00004          MOV      r0,r4
000a70  ebfffffe          BL       CPU_SR_Restore
;;;1340   
;;;1341       CPU_CRITICAL_ENTER();
000a74  ebfffffe          BL       CPU_SR_Save
000a78  e1a04000          MOV      r4,r0
;;;1342       PLLCON     |=  (1 << 0);                                    /* Enable the PLL                                           */
000a7c  e59f03ec          LDR      r0,|L1.3696|
000a80  e5900080          LDR      r0,[r0,#0x80]
000a84  e3800001          ORR      r0,r0,#1
000a88  e59f13e0          LDR      r1,|L1.3696|
000a8c  e5810080          STR      r0,[r1,#0x80]
;;;1343       PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
000a90  e3a000aa          MOV      r0,#0xaa
000a94  e581008c          STR      r0,[r1,#0x8c]
;;;1344       PLLFEED     =     0x55;
000a98  e3a00055          MOV      r0,#0x55
000a9c  e581008c          STR      r0,[r1,#0x8c]
;;;1345       CPU_CRITICAL_EXIT();
000aa0  e1a00004          MOV      r0,r4
000aa4  ebfffffe          BL       CPU_SR_Restore
;;;1346   
;;;1347       CCLKCFG     =   clk_div;                                    /* Configure the ARM Core Processor clock divider           */
000aa8  e59f03c0          LDR      r0,|L1.3696|
000aac  e5807104          STR      r7,[r0,#0x104]
;;;1348       USBCLKCFG   =   clk_div_usb;                                /* Configure the USB clock divider                          */
000ab0  e5808108          STR      r8,[r0,#0x108]
;;;1349   
;;;1350       while ((PLLSTAT & (1 << 26)) == 0) {	                    /* Wait for PLOCK to become set                             */
000ab4  e1a00000          MOV      r0,r0
                  |L1.2744|
000ab8  e59f03b0          LDR      r0,|L1.3696|
000abc  e5900088          LDR      r0,[r0,#0x88]
000ac0  e3100301          TST      r0,#0x4000000
000ac4  0afffffb          BEQ      |L1.2744|
;;;1351           ;
;;;1352       }
;;;1353   
;;;1354       PCLKSEL0    =   0xAAAAAAAA;                                 /* Set peripheral clocks to be half of main clock           */
000ac8  e59f03dc          LDR      r0,|L1.3756|
000acc  e59f139c          LDR      r1,|L1.3696|
000ad0  e58101a8          STR      r0,[r1,#0x1a8]
;;;1355       PCLKSEL1    =   0x22AAA8AA;
000ad4  e59f03d4          LDR      r0,|L1.3760|
000ad8  e58101ac          STR      r0,[r1,#0x1ac]
;;;1356   
;;;1357       CPU_CRITICAL_ENTER();
000adc  ebfffffe          BL       CPU_SR_Save
000ae0  e1a04000          MOV      r4,r0
;;;1358       PLLCON     |=  (1 << 1);                                    /* Connect the PLL. The PLL is now the active clock source  */
000ae4  e59f0384          LDR      r0,|L1.3696|
000ae8  e5900080          LDR      r0,[r0,#0x80]
000aec  e3800002          ORR      r0,r0,#2
000af0  e59f1378          LDR      r1,|L1.3696|
000af4  e5810080          STR      r0,[r1,#0x80]
;;;1359       PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
000af8  e3a000aa          MOV      r0,#0xaa
000afc  e581008c          STR      r0,[r1,#0x8c]
;;;1360       PLLFEED     =     0x55;
000b00  e3a00055          MOV      r0,#0x55
000b04  e581008c          STR      r0,[r1,#0x8c]
;;;1361       CPU_CRITICAL_EXIT();
000b08  e1a00004          MOV      r0,r4
000b0c  ebfffffe          BL       CPU_SR_Restore
;;;1362   
;;;1363       while ((PLLSTAT & (1 << 25)) == 0) {                        /* Wait PLLC, the PLL connect status bit to become set      */
000b10  e1a00000          MOV      r0,r0
                  |L1.2836|
000b14  e59f0354          LDR      r0,|L1.3696|
000b18  e5900088          LDR      r0,[r0,#0x88]
000b1c  e3100402          TST      r0,#0x2000000
000b20  0afffffb          BEQ      |L1.2836|
;;;1364           ;
;;;1365       }
;;;1366   }
000b24  e8bd41f0          POP      {r4-r8,lr}
000b28  e12fff1e          BX       lr
                          ENDP

                  BSP_Init PROC
;;;215    void  BSP_Init (void)
;;;216    {
000b2c  e92d4010          PUSH     {r4,lr}
;;;217        PLL_Init();                                                 /* Initialize the PLL                                       */
000b30  ebfffffe          BL       PLL_Init
;;;218        MAM_Init();                                                 /* Initialize the Memory Acceleration Module                */
000b34  ebfffffe          BL       MAM_Init
;;;219        GPIO_Init();                                                /* Initialize the board's I/Os                              */
000b38  ebfffffe          BL       GPIO_Init
;;;220        ADC_Init();                                                 /* Initialize the board's ADCs                              */
000b3c  ebfffffe          BL       ADC_Init
;;;221        VIC_Init();                                                 /* Initialize the Vectored Interrupt Controller             */
000b40  ebfffffe          BL       VIC_Init
;;;222        I2C_Init();                                                 /* Initialize the I2C                                       */
000b44  ebfffffe          BL       I2C_Init
;;;223    
;;;224        Tmr_TickInit();                                             /* Initialize the uC/OS-II tick interrupt                   */
000b48  ebfffffe          BL       Tmr_TickInit
;;;225    }
000b4c  e8bd4010          POP      {r4,lr}
000b50  e12fff1e          BX       lr
                          ENDP

                  BSP_IntDisAll PROC
;;;375    {
;;;376        VICIntEnClear = 0xFFFFFFFFL;                                        /* Disable ALL interrupts                                   */
000b54  e3e00000          MVN      r0,#0
000b58  e3a01000          MOV      r1,#0
000b5c  e5010fec          STR      r0,[r1,#-0xfec]
;;;377    }
000b60  e12fff1e          BX       lr
                          ENDP

                  OS_CPU_ExceptHndlr PROC
;;;399    void  OS_CPU_ExceptHndlr (CPU_DATA ID)
;;;400    {
000b64  e92d4070          PUSH     {r4-r6,lr}
000b68  e1a05000          MOV      r5,r0
;;;401        BSP_FNCT_PTR  pfnct;
;;;402    
;;;403                                                                            /* If this exception is either an IRQ or FIQ                */
;;;404        if ((ID == OS_CPU_ARM_EXCEPT_IRQ) || (ID == OS_CPU_ARM_EXCEPT_FIQ)) {
000b6c  e3550006          CMP      r5,#6
000b70  0a000001          BEQ      |L1.2940|
000b74  e3550007          CMP      r5,#7
000b78  1a000008          BNE      |L1.2976|
                  |L1.2940|
;;;405            pfnct = (BSP_FNCT_PTR)VICAddress;                               /* Read the interrupt vector from the VIC                   */
000b7c  e3a00000          MOV      r0,#0
000b80  e5104100          LDR      r4,[r0,#-0x100]
;;;406            if (pfnct != (BSP_FNCT_PTR)0) {                                 /* Make sure we don't have a NULL pointer                   */
000b84  e3540000          CMP      r4,#0
000b88  0a000004          BEQ      |L1.2976|
;;;407              (*pfn

⌨️ 快捷键说明

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