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

📄 main.lst

📁 针对arm开发板开发的can总线应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000066   04D0               BEQ      ??AT91F_CAN1_Handler_4
   \   00000068   2200               MOVS     R2,R4
   \   0000006A   ....               ADR      R1,??DataTable19  ;; "%d"
   \   0000006C   ....               LDR      R0,??DataTable26  ;; _Stdout
   \   0000006E   ........           _BLF     fprintf,??fprintf??rT
     68            if((status & AT91C_CAN_WAKEUP) == AT91C_CAN_WAKEUP) {
   \                     ??AT91F_CAN1_Handler_4:
   \   00000072   0098               LDR      R0,[SP, #+0]
   \   00000074   8002               LSLS     R0,R0,#+10
   \   00000076   02D5               BPL      ??AT91F_CAN1_Handler_5
     69              testCAN1 = AT91C_TEST_OK;
   \   00000078   0748               LDR      R0,??AT91F_CAN1_Handler_0+0x10  ;; testCAN1
   \   0000007A   0121               MOVS     R1,#+1
   \   0000007C   0170               STRB     R1,[R0, #+0]
     70              TRACE_DEBUG_H("=> CAN1 WAKEUP ");
     71            }
     72          
     73          }
   \                     ??AT91F_CAN1_Handler_5:
   \   0000007E   01B0               ADD      SP,SP,#+4
   \   00000080   30BC               POP      {R4,R5}
   \   00000082   01BC               POP      {R0}
   \   00000084   0047               BX       R0               ;; return
   \   00000086   C046               Nop      
   \                     ??AT91F_CAN1_Handler_0:
   \   00000088   0042F8FF           DC32     0xfffffffffff84200
   \   0000008C   ........           DC32     `?<Constant "\\r\\n______Interrupt rec...">`
   \   00000090   ........           DC32     `?<Constant "\\r\\n_______Interrupt re...">`
   \   00000094   1C42F8FF           DC32     0xfffffffffff8421c
   \   00000098   ........           DC32     testCAN1
     74          
     75          //*--------------------------------------------------------------------------------------
     76          //* Function Name       : Main
     77          //* Object              : Software entry point
     78          
     79          //* 主程序主要实现 CAN 在较低拨特率( 5K , 10K )下的通讯 ,主要工作在于设置正确的拨特率 ,
     80          //* 由于在 MCK=48mHz的情况下不能得到如此低的拨特率,于是采用降低主频的方式。在 波特率为5K
     81          //* 的测试条件下,将主频降为 6mHz ,即 MCK的8分频。得到分频数 BRP= 6m/5K/16 -1 =74= 0x4A ,
     82          //* 现在的状态即为 MCK=6M, CAN baudrate= 5 k 的测试程序。调试串口输出的拨特率为 9600 。
     83          //***************************************************************************************
     84          //***************在测试 CAN baudrate= 10 k 的时候,仅需要改动几个如下部分而已************
     85          //* 1。将MCK 4分频,降低为 12mHz,即将  AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_8  ;
     86          //*    改为  AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_4  ;
     87          //* 2。将 DBGU调试串口配置为 :波特率设置为 115200 ,主时钟为 AT91C_MASTER_CLOCK/2
     88          //*    改动点在函数  AT91F_US_Configure(...)中
     89          //* 3。CAN 波特率寄存器的值 : 频数 BRP= 12m/10K /16 -1 =74= 0x4A , 所有低波特率情况下,当
     90          //*    CAN的传输延迟时间小于一个bit的时间时候,都可以 PROPAG=0 ,PHASE1= PHASE2=6。即 0x004A3066
     91          //*    和 5K的时候一样。
     92          //*********************************配置调试串口的一点注意********************************
     93          //* 本测试程序在 10K 的时候设定波特率为 115200,却 在 5K的时候配置为9600 。按照串口的波特率
     94          //* 计算公式 baudrate=MCK/16/ CD (CD为16 bit的波特率发生器寄存),5K 时,CD=6m/16/115200
     95          //* =3.2552 似乎可行,但输出全是乱码, 原因在于当 CD小于 6.5的时候,波特率计算公式会根据不同的
     96          //* 情况调整,可能得不到预期的值。最好大于6.5。(9600时,CD=39.0625)
     97          //*--------------------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     98          void main()
     99          {
   \                     main:
   \   00000000   10B5               PUSH     {R4,LR}
    100            ////////////////////////////////////////////////////////////////////////////////////////////////////
    101            //   设置MCK ,can的时钟为 MCK ,如今MCK=48mHz ,为了降到5K的波特率,需要降低主时钟,现如今将MCK时钟
    102            //   降为原来的 8 分之一 ,现 MCK=6M ,
    103            ////////////////////////////////////////////////////////////////////////////////////////////////////
    104            AT91C_BASE_CKGR->CKGR_MOR=0x00000701 ;                 //时钟在56个慢时钟周期后启动
   \   00000002   5A48               LDR      R0,??main_0      ;; 0xfffffffffffffc20
   \   00000004   5A49               LDR      R1,??main_0+0x4  ;; 0x701
   \   00000006   0160               STR      R1,[R0, #+0]
    105           //必须等待PMC_SR 寄存器中的MOSCS域置位,可通过轮询状态寄存器或等待当PMC_IER 寄存器中与MOSCS相关的中断的中断线上升
    106            //>>>>>
    107            unsigned int status ;
    108            do{                                                         //等待CKGR_MCFR寄存器中的MAINRDY域置位
    109               status=AT91C_BASE_CKGR->CKGR_MCFR ;
   \                     ??main_1:
   \   00000008   5A48               LDR      R0,??main_0+0x8  ;; 0xfffffffffffffc24
   \   0000000A   0068               LDR      R0,[R0, #+0]
   \   0000000C   0400               MOVS     R4,R0
    110               status &= 0x00010000 ;
   \   0000000E   2000               MOVS     R0,R4
   \   00000010   8024               MOVS     R4,#+128
   \   00000012   6402               LSLS     R4,R4,#+9        ;; #+65536
   \   00000014   0440               ANDS     R4,R4,R0
    111              }
    112            while(status!=0x10000);
   \   00000016   8020               MOVS     R0,#+128
   \   00000018   4002               LSLS     R0,R0,#+9        ;; #+65536
   \   0000001A   8442               CMP      R4,R0
   \   0000001C   F4D1               BNE      ??main_1
    113                                                                        //等待CKGR_MCFR寄存器中的MAINRDY域置位(下)
    114          
    115            do{
    116              status=AT91C_BASE_CKGR->CKGR_MCFR ;
   \                     ??main_2:
   \   0000001E   5548               LDR      R0,??main_0+0x8  ;; 0xfffffffffffffc24
   \   00000020   0068               LDR      R0,[R0, #+0]
   \   00000022   0400               MOVS     R4,R0
    117              status &= 0x000010000 ;
   \   00000024   2000               MOVS     R0,R4
   \   00000026   8024               MOVS     R4,#+128
   \   00000028   6402               LSLS     R4,R4,#+9        ;; #+65536
   \   0000002A   0440               ANDS     R4,R4,R0
    118              }
    119            while(status!=0x10000)  ;                                  //AT91C_BASE_CKGR->CKGR_MCFR=0x1FFFF   ;
   \   0000002C   8020               MOVS     R0,#+128
   \   0000002E   4002               LSLS     R0,R0,#+9        ;; #+65536
   \   00000030   8442               CMP      R4,R0
   \   00000032   F4D1               BNE      ??main_2
    120              status=(AT91C_BASE_CKGR->CKGR_MCFR & 0x0FFFF) ;          //***读出16个慢时钟周期中主时钟周期数 ,没有使用
   \   00000034   4F48               LDR      R0,??main_0+0x8  ;; 0xfffffffffffffc24
   \   00000036   0068               LDR      R0,[R0, #+0]
   \   00000038   0004               LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
   \   0000003A   000C               LSRS     R0,R0,#+16
   \   0000003C   0400               MOVS     R4,R0
    121          
    122            AT91C_BASE_PMC->PMC_MCKR =AT91C_PMC_CSS_MAIN_CLK ;         //处理器时钟为主机时钟。 8分频
   \   0000003E   4E48               LDR      R0,??main_0+0xC  ;; 0xfffffffffffffc30
   \   00000040   0121               MOVS     R1,#+1
   \   00000042   0160               STR      R1,[R0, #+0]
    123            AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_8  ;         //此时 MCk=48/8 =6M
   \   00000044   4C48               LDR      R0,??main_0+0xC  ;; 0xfffffffffffffc30
   \   00000046   4C49               LDR      R1,??main_0+0xC  ;; 0xfffffffffffffc30
   \   00000048   0968               LDR      R1,[R1, #+0]
   \   0000004A   0C22               MOVS     R2,#+12
   \   0000004C   0A43               ORRS     R2,R2,R1
   \   0000004E   0260               STR      R2,[R0, #+0]
    124            do{
    125              status=AT91C_BASE_CKGR->CKGR_MCFR ;
   \                     ??main_3:
   \   00000050   4848               LDR      R0,??main_0+0x8  ;; 0xfffffffffffffc24
   \   00000052   0068               LDR      R0,[R0, #+0]
   \   00000054   0400               MOVS     R4,R0
    126              status &= 0x000010000 ;
   \   00000056   2000               MOVS     R0,R4
   \   00000058   8024               MOVS     R4,#+128
   \   0000005A   6402               LSLS     R4,R4,#+9        ;; #+65536
   \   0000005C   0440               ANDS     R4,R4,R0
    127              }
    128            while(status!=0x10000)  ;
   \   0000005E   8020               MOVS     R0,#+128
   \   00000060   4002               LSLS     R0,R0,#+9        ;; #+65536
   \   00000062   8442               CMP      R4,R0
   \   00000064   F4D1               BNE      ??main_3
    129          
    130            //AT91C_BASE_PMC->PMC_PCER=0xFFFFFFFF              ; //使能外设时钟(1,4,5,6,7,8)0x000001F2
    131          
    132           // AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINF ;
    133           // AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINRDY ;
    134          
    135          /*
    136            AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINF ;
    137            AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINRDY ;
    138            AT91C_BASE_PMC->PMC_MOR |=AT91C_CKGR_MOSCEN  ;
    139            AT91C_BASE_PMC->PMC_MOR |=AT91C_CKGR_OSCOUNT ;
    140          */
    141          //  AT91C_BASE_PMC->PMC_SCER |=AT91C_PMC_PCK ;
    142          
    143          
    144            /////////////////////////////////////////////////////////////////////////////////////////////////////
    145            // Enable DBGU Clock
    146            AT91F_DBGU_CfgPMC();    // DBGU is always clocked
   \   00000066   ........           _BLF     AT91F_DBGU_CfgPMC,??AT91F_DBGU_CfgPMC??rT
    147            // Open PIO for DBGU
    148            AT91F_DBGU_CfgPIO();
   \   0000006A   ........           _BLF     AT91F_DBGU_CfgPIO,??AT91F_DBGU_CfgPIO??rT
    149            //在设置波特率的时候,当CD值为小于6.5的 ,系统的算法会进行调整,而得不到想要的值,请避开
    150            AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
    151                                AT91C_MASTER_CLOCK/4,
    152                                AT91C_US_ASYNC_MODE,  	// mode Register to be programmed
    153                                9600,	                // ******baudrate to be programmedAT91C_BAUDRATE_115200
    154                                0);                   	// timeguard to be programmed
   \   0000006E   0020               MOVS     R0,#+0
   \   00000070   01B4               PUSH     {R0}
   \   00000072   9623               MOVS     R3,#+150
   \   00000074   9B01               LSLS     R3,R3,#+6        ;; #+9600
   \   00000076   8C22               MOVS     R2,#+140
   \   00000078   1201               LSLS     R2,R2,#+4        ;; #+2240
   \   0000007A   4049               LDR      R1,??main_0+0x10  ;; 0xb71b00
   \   0000007C   4048               LDR      R0,??main_0+0x14  ;; 0xfffffffffffff200
   \   0000007E   ........           _BLF     AT91F_US_Configure,??AT91F_US_Configure??rT
   \   00000082   01B0               ADD      SP,SP,#+4
    155            // Enable Transmitter
    156            AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
   \   00000084   3E48               LDR      R0,??main_0+0x14  ;; 0xfffffffffffff200
   \   00000086   ........           _BLF     AT91F_US_EnableTx,??AT91F_US_EnableTx??rT
    157          
    158            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
    159            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
    160            TRACE_INFO("======================================\n\r");
   \                     ??main_5:

⌨️ 快捷键说明

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