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

📄 main.lst

📁 ARM7系列CAN总线在低速波特率下的通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000062   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000064   0028               CMP         R0,#+0
   \   00000066   04D0               BEQ         ??AT91F_CAN1_Handler_4
   \   00000068   221C               MOV         R2,R4
   \   0000006A   ....               LDR         R1,??DataTable19   ;; `?<Constant "%d">`
   \   0000006C   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   0000006E   ........           _BLF        fprintf,fprintf??rT
     69            if((status & AT91C_CAN_WAKEUP) == AT91C_CAN_WAKEUP) {
   \                     ??AT91F_CAN1_Handler_4:
   \   00000072   0098               LDR         R0,[SP, #+0]
   \   00000074   8002               LSL         R0,R0,#+0xA
   \   00000076   02D5               BPL         ??AT91F_CAN1_Handler_5
     70              testCAN1 = AT91C_TEST_OK;
   \   00000078   0748               LDR         R0,??AT91F_CAN1_Handler_0+0x10  ;; testCAN1
   \   0000007A   0121               MOV         R1,#+0x1
   \   0000007C   0170               STRB        R1,[R0, #+0]
     71              TRACE_DEBUG_H("=> CAN1 WAKEUP ");
     72            }
     73          
     74          }
   \                     ??AT91F_CAN1_Handler_5:
   \   0000007E   01B0               ADD         SP,#+0x4
   \   00000080   30BC               POP         {R4,R5}
   \   00000082   01BC               POP         {R0}
   \   00000084   0047               BX          R0                 ;; return
   \   00000086   C046               NOP         
   \                     ??AT91F_CAN1_Handler_0:
   \   00000088   0042F8FF           DC32        0xfff84200
   \   0000008C   ........           DC32        `?<Constant "\\r\\n______Interrupt rec...">`
   \   00000090   ........           DC32        `?<Constant "\\r\\n_______Interrupt re...">`
   \   00000094   1C42F8FF           DC32        0xfff8421c
   \   00000098   ........           DC32        testCAN1
     75          
     76          //*--------------------------------------------------------------------------------------
     77          //* Function Name       : Main
     78          //* Object              : Software entry point
     79          //*--------------------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     80          void main()
     81          {
   \                     main:
   \   00000000   10B5               PUSH        {R4,LR}
     82            ////////////////////////////////////////////////////////////////////////////////////////////////////
     83            //   设置MCK ,can的时钟为 MCK ,如今MCK=48mHz ,为了降到5K的波特率,需要降低主时钟,现如今将MCK时钟
     84            //   降为原来的 8 分之一 ,现 MCK=6M ,
     85            //*****************   #define AT91B_MAIN_OSC        18432000     // Main Oscillator MAINCK ???
     86            ////////////////////////////////////////////////////////////////////////////////////////////////////
     87            //AT91C_BASE_PMC->PMC_SCDR |=AT91C_PMC_PCK ;
     88            //AT91C_BASE_PMC->PMC_MCKR  =AT91C_PMC_CSS_MAIN_CLK ;    //选择主时钟
     89            //AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_4     ;  // 4分频
     90          
     91            AT91C_BASE_CKGR->CKGR_MOR=0x00000701 ;                 //时钟在56个慢时钟周期后启动
   \   00000002   5A48               LDR         R0,??main_0        ;; 0xfffffc20
   \   00000004   5A49               LDR         R1,??main_0+0x4    ;; 0x701
   \   00000006   0160               STR         R1,[R0, #+0]
     92           //必须等待PMC_SR 寄存器中的MOSCS域置位,可通过轮询状态寄存器或等待当PMC_IER 寄存器中与MOSCS相关的中断的中断线上升
     93            //>>>>>
     94            unsigned int status ;
     95            do{
     96               status=AT91C_BASE_CKGR->CKGR_MCFR ;
   \                     ??main_1:
   \   00000008   5A48               LDR         R0,??main_0+0x8    ;; 0xfffffc24
   \   0000000A   0068               LDR         R0,[R0, #+0]
   \   0000000C   041C               MOV         R4,R0
     97               status &= 0x00010000 ;
   \   0000000E   201C               MOV         R0,R4
   \   00000010   8024               MOV         R4,#+0x80
   \   00000012   6402               LSL         R4,R4,#+0x9        ;; #+0x10000
   \   00000014   0440               AND         R4,R0
     98              }
     99            while(status!=0x10000);
   \   00000016   8020               MOV         R0,#+0x80
   \   00000018   4002               LSL         R0,R0,#+0x9        ;; #+0x10000
   \   0000001A   8442               CMP         R4,R0
   \   0000001C   F4D1               BNE         ??main_1
    100            //等待CKGR_MCFR寄存器中的MAINRDY域置位(下)
    101          
    102            do{
    103              status=AT91C_BASE_CKGR->CKGR_MCFR ;
   \                     ??main_2:
   \   0000001E   5548               LDR         R0,??main_0+0x8    ;; 0xfffffc24
   \   00000020   0068               LDR         R0,[R0, #+0]
   \   00000022   041C               MOV         R4,R0
    104              status &= 0x000010000 ;
   \   00000024   201C               MOV         R0,R4
   \   00000026   8024               MOV         R4,#+0x80
   \   00000028   6402               LSL         R4,R4,#+0x9        ;; #+0x10000
   \   0000002A   0440               AND         R4,R0
    105              }
    106            while(status!=0x10000)  ;                          //AT91C_BASE_CKGR->CKGR_MCFR=0x1FFFF   ;
   \   0000002C   8020               MOV         R0,#+0x80
   \   0000002E   4002               LSL         R0,R0,#+0x9        ;; #+0x10000
   \   00000030   8442               CMP         R4,R0
   \   00000032   F4D1               BNE         ??main_2
    107              status=(AT91C_BASE_CKGR->CKGR_MCFR & 0x0FFFF) ;  //读出16个慢时钟周期中主时钟周期数
   \   00000034   4F48               LDR         R0,??main_0+0x8    ;; 0xfffffc24
   \   00000036   0068               LDR         R0,[R0, #+0]
   \   00000038   0004               LSL         R0,R0,#+0x10       ;; ZeroExt     R0,R0,#+0x10,#+0x10
   \   0000003A   000C               LSR         R0,R0,#+0x10
   \   0000003C   041C               MOV         R4,R0
    108            //AT91C_BASE_CKGR->CKGR_PLLR=0x00040805 ;            //PLL分频时钟
    109            AT91C_BASE_PMC->PMC_MCKR =AT91C_PMC_CSS_MAIN_CLK ;            //处理器时钟为主机时钟。,4分频
   \   0000003E   4E48               LDR         R0,??main_0+0xC    ;; 0xfffffc30
   \   00000040   0121               MOV         R1,#+0x1
   \   00000042   0160               STR         R1,[R0, #+0]
    110            AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_4  ;
   \   00000044   4C48               LDR         R0,??main_0+0xC    ;; 0xfffffc30
   \   00000046   4C49               LDR         R1,??main_0+0xC    ;; 0xfffffc30
   \   00000048   0968               LDR         R1,[R1, #+0]
   \   0000004A   0822               MOV         R2,#+0x8
   \   0000004C   0A43               ORR         R2,R1
   \   0000004E   0260               STR         R2,[R0, #+0]
    111            do{
    112              status=AT91C_BASE_CKGR->CKGR_MCFR ;
   \                     ??main_3:
   \   00000050   4848               LDR         R0,??main_0+0x8    ;; 0xfffffc24
   \   00000052   0068               LDR         R0,[R0, #+0]
   \   00000054   041C               MOV         R4,R0
    113              status &= 0x000010000 ;
   \   00000056   201C               MOV         R0,R4
   \   00000058   8024               MOV         R4,#+0x80
   \   0000005A   6402               LSL         R4,R4,#+0x9        ;; #+0x10000
   \   0000005C   0440               AND         R4,R0
    114              }
    115            while(status!=0x10000)  ;
   \   0000005E   8020               MOV         R0,#+0x80
   \   00000060   4002               LSL         R0,R0,#+0x9        ;; #+0x10000
   \   00000062   8442               CMP         R4,R0
   \   00000064   F4D1               BNE         ??main_3
    116          
    117            //AT91C_BASE_PMC->PMC_PCER=0xFFFFFFFF              ; //使能外设时钟(1,4,5,6,7,8)0x000001F2
    118          
    119           // AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINF ;
    120           // AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINRDY ;
    121          
    122          /*
    123            AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINF ;
    124            AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINRDY ;
    125            AT91C_BASE_PMC->PMC_MOR |=AT91C_CKGR_MOSCEN  ;
    126            AT91C_BASE_PMC->PMC_MOR |=AT91C_CKGR_OSCOUNT ;
    127          */
    128          //  AT91C_BASE_PMC->PMC_SCER |=AT91C_PMC_PCK ;
    129          
    130          
    131            /////////////////////////////////////////////////////////////////////////////////////////////////////
    132            // Enable DBGU Clock
    133            AT91F_DBGU_CfgPMC();    // DBGU is always clocked
   \   00000066   ........           _BLF        AT91F_DBGU_CfgPMC,AT91F_DBGU_CfgPMC??rT
    134            // Open PIO for DBGU
    135            AT91F_DBGU_CfgPIO();
   \   0000006A   ........           _BLF        AT91F_DBGU_CfgPIO,AT91F_DBGU_CfgPIO??rT
    136            AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
    137                                AT91C_MASTER_CLOCK/2,
    138                                AT91C_US_ASYNC_MODE,  	// mode Register to be programmed
    139                                115200,	                // baudrate to be programmedAT91C_BAUDRATE_115200
    140                                0);                   	// timeguard to be programmed
   \   0000006E   0020               MOV         R0,#+0
   \   00000070   01B4               PUSH        {R0}
   \   00000072   E123               MOV         R3,#+0xE1
   \   00000074   5B02               LSL         R3,R3,#+0x9        ;; #+0x1C200
   \   00000076   8C22               MOV         R2,#+0x8C
   \   00000078   1201               LSL         R2,R2,#+0x4        ;; #+0x8C0
   \   0000007A   4049               LDR         R1,??main_0+0x10   ;; 0x16e3600
   \   0000007C   4048               LDR         R0,??main_0+0x14   ;; 0xfffff200
   \   0000007E   ........           _BLF        AT91F_US_Configure,AT91F_US_Configure??rT
   \   00000082   01B0               ADD         SP,#+0x4
    141            // Enable Transmitter
    142            AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
   \   00000084   3E48               LDR         R0,??main_0+0x14   ;; 0xfffff200
   \   00000086   ........           _BLF        AT91F_US_EnableTx,AT91F_US_EnableTx??rT
    143          
    144            TRACE_INFO("\n\n\r======================================\n\r");
   \   0000008A   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   0000008C   0028               CMP         R0,#+0
   \   0000008E   03D0               BEQ         ??main_4
   \   00000090   3C49               LDR         R1,??main_0+0x18   ;; `?<Constant "\\n\\n\\r==================...">`
   \   00000092   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000094   ........           _BLF        fprintf,fprintf??rT
    145            TRACE_INFO("*****AT91SAM7A3 Basic CAN in 12mHz 10K 16bit Carry / 1 bit***** \n\r");
   \                     ??main_4:
   \   00000098   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   0000009A   0028               CMP         R0,#+0
   \   0000009C   03D0               BEQ         ??main_5
   \   0000009E   3A49               LDR         R1,??main_0+0x1C   ;; `?<Constant "*****AT91SAM7A3 Basic...">`
   \   000000A0   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   000000A2   ........           _BLF        fprintf,fprintf??rT
    146            TRACE_INFO("======================================\n\r");
   \                     ??main_5:
   \   000000A6   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   000000A8   0028               CMP         R0,#+0
   \   000000AA   03D0               BEQ         ??main_6
   \   000000AC   3749               LDR         R1,??main_0+0x20   ;; `?<Constant "=====================...">`
   \   000000AE   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   000000B0   ........           _BLF        fprintf,fprintf??rT
    147          
    148            ///////////////////////////////////////////////////////////////////////////////////////////
    149            //  Init CAN0 and CAN1
    150            ///////////////////////////////////////////////////////////////////////////////////////////
    151          
    152            // Enable CAN0 and CAN1 PIOs
    153            AT91F_CAN0_CfgPIO();

⌨️ 快捷键说明

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