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

📄 main.lst

📁 针对arm开发板开发的can总线应用程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
     50          void AT91F_CAN1_Handler(void)   //接收CAN0 ->MB0 发送的数据
     51          {
   \                     AT91F_CAN1_Handler:
   \   00000000   71B5               PUSH        {R0,R4-R6,LR}
     52            volatile unsigned int status;
     53            int RxData ;
     54          		
     55            status = AT91F_CAN_GetStatus(AT91C_BASE_CAN1) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN1);
   \   00000002   ....               LDR         R0,??Subroutine3_0  ;; 0xfff84010
   \   00000004   0068               LDR         R0,[R0, #+0]
   \   00000006   ....               LDR         R1,??Subroutine3_0+0x4  ;; 0xfff8400c
   \   00000008   0968               LDR         R1,[R1, #+0]
   \   0000000A   0140               AND         R1,R0
   \   0000000C   0091               STR         R1,[SP, #+0]
     56            AT91F_CAN_DisableIt(AT91C_BASE_CAN1,status);
   \   0000000E   0098               LDR         R0,[SP, #+0]
   \   00000010   ....               LDR         R1,??Subroutine3_0+0x8  ;; 0xfff84008
   \   00000012   0860               STR         R0,[R1, #+0]
     57          
     58            RxData=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0)  ;     //接收低四位
   \   00000014   ....               LDR         R0,??Subroutine3_0+0xC  ;; 0xfff84214
   \   00000016   0668               LDR         R6,[R0, #+0]
     59            TRACE_INFO("\r\n______Interrupt received  data,Low is:") ;
   \   00000018   ....               LDR         R4,??DataTable6    ;; _Stdout
   \   0000001A   ....               LDR         R5,??DataTable3    ;; `?<Constant "%d">`
   \   0000001C   291C               MOV         R1,R5
   \   0000001E   3C31               ADD         R1,#+0x3C
   \   00000020   201C               MOV         R0,R4
   \   00000022   ........           _BLF        fprintf,fprintf??rT
     60            TRACE_INFO("%d",RxData );
   \   00000026   321C               MOV         R2,R6
   \   00000028   291C               MOV         R1,R5
   \   0000002A   201C               MOV         R0,R4
   \   0000002C   ........           _BLF        fprintf,fprintf??rT
     61            RxData=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) ;     //接收高四位
   \   00000030   ....               LDR         R0,??Subroutine3_0+0x10  ;; 0xfff84218
   \   00000032   0668               LDR         R6,[R0, #+0]
     62            TRACE_INFO("\r\n_______Interrupt received data,High is:") ;
   \   00000034   291C               MOV         R1,R5
   \   00000036   6831               ADD         R1,#+0x68
   \   00000038   201C               MOV         R0,R4
   \   0000003A   ........           _BLF        fprintf,fprintf??rT
     63          
     64            /**如果如下指令不执行的话,所有读出的数据都将是第一次接收到的数据**/
     65            AT91C_BASE_CAN1_MB0->CAN_MB_MCR=AT91C_CAN_MTCR;          //允许接收下一条消息
   \   0000003E   ....               LDR         R0,??Subroutine3_0+0x14  ;; 0xfff8421c
   \   00000040   8021               MOV         R1,#+0x80
   \   00000042   0904               LSL         R1,R1,#+0x10       ;; #+0x800000
   \   00000044   0160               STR         R1,[R0, #+0]
     66            /*******************************************************************/
     67            TRACE_INFO("%d",RxData );
   \   00000046   321C               MOV         R2,R6
   \   00000048   291C               MOV         R1,R5
   \   0000004A   201C               MOV         R0,R4
   \   0000004C   ........           _BLF        fprintf,fprintf??rT
     68            if((status & AT91C_CAN_WAKEUP) == AT91C_CAN_WAKEUP) {
   \   00000050   0098               LDR         R0,[SP, #+0]
   \   00000052   8002               LSL         R0,R0,#+0xA
   \   00000054   02D5               BPL         ??AT91F_CAN1_Handler_0
     69              testCAN1 = AT91C_TEST_OK;
   \   00000056   ....               LDR         R0,??Subroutine3_0+0x18  ;; testCAN1
   \   00000058   0121               MOV         R1,#+0x1
   \   0000005A   0170               STRB        R1,[R0, #+0]
     70              TRACE_DEBUG_H("=> CAN1 WAKEUP ");
     71            }
     72          
     73          }
   \                     ??AT91F_CAN1_Handler_0:
   \   0000005C                      REQUIRE ?Subroutine3
   \   0000005C                      ;; // Fall through to label ?Subroutine3
     74          
     75          //*--------------------------------------------------------------------------------------
     76          //* Function Name       : Main
     77          //* Object              : Software entry point
     78          //*--------------------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     79          void main()
     80          {
   \                     main:
   \   00000000   F0B5               PUSH        {R4-R7,LR}
     81            ////////////////////////////////////////////////////////////////////////////////////////////////////
     82            //   设置MCK ,can的时钟为 MCK ,如今MCK=48mHz ,为了降到5K的波特率,需要降低主时钟,现如今将MCK时钟
     83            //   降为原来的 8 分之一 ,现 MCK=6M ,
     84            //*****************   #define AT91B_MAIN_OSC        18432000     // Main Oscillator MAINCK ???
     85            ////////////////////////////////////////////////////////////////////////////////////////////////////
     86            AT91C_BASE_PMC->PMC_SCDR |=1 ;
   \   00000002   3F48               LDR         R0,??main_0        ;; 0xfffffc04
   \   00000004   0168               LDR         R1,[R0, #+0]
   \   00000006   0122               MOV         R2,#+0x1
   \   00000008   0A43               ORR         R2,R1
   \   0000000A   0260               STR         R2,[R0, #+0]
     87            AT91C_BASE_PMC->PMC_MCKR  =AT91C_PMC_CSS_MAIN_CLK ;    //选择主时钟
   \   0000000C   3D48               LDR         R0,??main_0+0x4    ;; 0xfffffc30
   \   0000000E   0121               MOV         R1,#+0x1
   \   00000010   0160               STR         R1,[R0, #+0]
     88            AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK     ;    //分频 8  倍
   \   00000012   0168               LDR         R1,[R0, #+0]
   \   00000014   0160               STR         R1,[R0, #+0]
     89            AT91C_BASE_PMC->PMC_SCER |=1 ;
   \   00000016   3C48               LDR         R0,??main_0+0x8    ;; 0xfffffc00
   \   00000018   0168               LDR         R1,[R0, #+0]
   \   0000001A   0122               MOV         R2,#+0x1
   \   0000001C   0A43               ORR         R2,R1
   \   0000001E   0260               STR         R2,[R0, #+0]
     90          
     91            for (int n=0;n<65535;)
     92              n++ ;
     93            //  DBGU Init
     94            /////////////////////////////////////////////////////////////////////////////////////////////////////
     95            // Enable DBGU Clock
     96            AT91F_DBGU_CfgPMC();    // DBGU is always clocked
   \   00000020   3A4C               LDR         R4,??main_0+0xC    ;; 0xfffffc10
   \   00000022   0220               MOV         R0,#+0x2
   \   00000024   2060               STR         R0,[R4, #+0]
   \   00000026   C020               MOV         R0,#+0xC0
   \   00000028   0006               LSL         R0,R0,#+0x18       ;; #-1073741824
   \   0000002A   3949               LDR         R1,??main_0+0x10   ;; 0xfffff470
   \   0000002C   0860               STR         R0,[R1, #+0]
     97            // Open PIO for DBGU
     98            AT91F_DBGU_CfgPIO();
   \   0000002E   394D               LDR         R5,??main_0+0x14   ;; 0xfffff474
   \   00000030   0021               MOV         R1,#+0
   \   00000032   2960               STR         R1,[R5, #+0]
   \   00000034   384E               LDR         R6,??main_0+0x18   ;; 0xfffff404
   \   00000036   3060               STR         R0,[R6, #+0]
     99            AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
    100                                AT91C_MASTER_CLOCK,
    101                                AT91C_US_SYNC_MODE,  	// mode Register to be programmed
    102                                115200,	                // baudrate to be programmedAT91C_BAUDRATE_115200
    103                                0);                   	// timeguard to be programmed
   \   00000038   3848               LDR         R0,??main_0+0x1C   ;; 0xfffff20c
   \   0000003A   C943               MVN         R1,R1              ;; #-1
   \   0000003C   0160               STR         R1,[R0, #+0]
   \   0000003E   384F               LDR         R7,??main_0+0x20   ;; 0xfffff200
   \   00000040   AC20               MOV         R0,#+0xAC
   \   00000042   3860               STR         R0,[R7, #+0]
   \   00000044   3748               LDR         R0,??main_0+0x24   ;; 0xfffff220
   \   00000046   1A21               MOV         R1,#+0x1A
   \   00000048   0160               STR         R1,[R0, #+0]
   \   0000004A   3748               LDR         R0,??main_0+0x28   ;; 0xfffff228
   \   0000004C   0021               MOV         R1,#+0
   \   0000004E   0160               STR         R1,[R0, #+0]
   \   00000050   3648               LDR         R0,??main_0+0x2C   ;; 0xfffff300
   \   00000052   ........           _BLF        AT91F_PDC_Open,AT91F_PDC_Open??rT
   \   00000056   3648               LDR         R0,??main_0+0x30   ;; 0xfffff204
   \   00000058   9C21               MOV         R1,#+0x9C
   \   0000005A   0901               LSL         R1,R1,#+0x4        ;; #+0x9C0
   \   0000005C   0160               STR         R1,[R0, #+0]
    104            // Enable Transmitter
    105            AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
   \   0000005E   4020               MOV         R0,#+0x40
   \   00000060   3860               STR         R0,[R7, #+0]
   \   00000062   344F               LDR         R7,??main_0+0x34   ;; `?<Constant "\\n\\n\\r==================...">`
   \   00000064   391C               MOV         R1,R7
   \   00000066   ....               LDR         R0,??DataTable6    ;; _Stdout
    106          
    107            TRACE_INFO("\n\n\r======================================\n\r");
   \   00000068   ........           _BLF        fprintf,fprintf??rT
    108            TRACE_INFO("AT91SAM7A3 Basic CAN\n\r");
   \   0000006C   391C               MOV         R1,R7
   \   0000006E   2C31               ADD         R1,#+0x2C
   \   00000070   ....               LDR         R0,??DataTable6    ;; _Stdout
   \   00000072   ........           _BLF        fprintf,fprintf??rT
    109            TRACE_INFO("======================================\n\r");
   \   00000076   4437               ADD         R7,#+0x44
   \   00000078   391C               MOV         R1,R7
   \   0000007A   ....               LDR         R0,??DataTable6    ;; _Stdout
   \   0000007C   ........           _BLF        fprintf,fprintf??rT
    110          
    111            ///////////////////////////////////////////////////////////////////////////////////////////
    112            //  Init CAN0 and CAN1
    113            ///////////////////////////////////////////////////////////////////////////////////////////
    114          
    115            // Enable CAN0 and CAN1 PIOs
    116            AT91F_CAN0_CfgPIO();
   \   00000080   C020               MOV         R0,#+0xC0
   \   00000082   0005               LSL         R0,R0,#+0x14       ;; #+0xC000000
   \   00000084   2249               LDR         R1,??main_0+0x10   ;; 0xfffff470
   \   00000086   0860               STR         R0,[R1, #+0]
   \   00000088   0021               MOV         R1,#+0
   \   0000008A   2960               STR         R1,[R5, #+0]
   \   0000008C   3060               STR         R0,[R6, #+0]
    117            AT91F_CAN1_CfgPIO();
   \   0000008E   ........           _BLF        AT91F_CAN1_CfgPIO,AT91F_CAN1_CfgPIO??rT
    118            // Enable CAN0 and CAN1 Clocks
    119            AT91F_CAN0_CfgPMC();
   \   00000092   1025               MOV         R5,#+0x10
   \   00000094   2560               STR         R5,[R4, #+0]
    120            AT91F_CAN1_CfgPMC();
   \   00000096   2026               MOV         R6,#+0x20
   \   00000098   2660               STR         R6,[R4, #+0]
    121          
    122            // Enable CANs Transceivers
    123            AT91F_PIOA_CfgPMC();
   \   0000009A   0420               MOV         R0,#+0x4
   \   0000009C   2060               STR         R0,[R4, #+0]
    124            AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91B_CAN_TRANSCEIVER_RS) ;
   \   0000009E   4005               LSL         R0,R0,#+0x15
   \   000000A0   2549               LDR         R1,??main_0+0x38   ;; 0xfffff400
   \   000000A2   0860               STR         R0,[R1, #+0]
   \   000000A4   2549               LDR         R1,??main_0+0x3C   ;; 0xfffff410
   \   000000A6   0860               STR         R0,[R1, #+0]
    125            // Clear PA23 <=> Enable Transceiver Normal Mode (versus Standby mode)
    126            AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91B_CAN_TRANSCEIVER_RS) ;
   \   000000A8   2549               LDR         R1,??main_0+0x40   ;; 0xfffff434
   \   000000AA   0860               STR         R0,[R1, #+0]
    127          
    128            // Init CAN0 Interrupt Source Level
    129            AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,                        	// CAN0 base address
    130                                  AT91C_ID_CAN0,                         	// CAN0 ID
    131                                  AT91C_AIC_PRIOR_HIGHEST,               	// Max priority
    132                                  AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, 	    // Level sensitive
    133                                  AT91F_CAN0_Handler);                    // C Handler
   \   000000AC   254C               LDR         R4,??main_0+0x44   ;; 0xfffff000
   \   000000AE   2648               LDR         R0,??main_0+0x48   ;; AT91F_CAN0_Handler
   \   000000B0   01B4               PUSH        {R0}
   \   000000B2   0023               MOV         R3,#+0
   \   000000B4   0722               MOV         R2,#+0x7
   \   000000B6   0421               MOV         R1,#+0x4
   \   000000B8   201C               MOV         R0,R4
   \   000000BA   ........           _BLF        AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
    134          
    135            AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_CAN0);
   \   000000BE   234F               LDR         R7,??main_0+0x4C   ;; 0xfffff120
   \   000000C0   3D60               STR         R5,[R7, #+0]
    136          
    137            // Init CAN1 Interrupt Source Level

⌨️ 快捷键说明

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