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

📄 main.lst

📁 ARM7系列CAN总线在低速波特率下的通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0000000C   0047               BX          R0                 ;; return
   \   0000000E   C046               NOP         
   \                     ??AT91F_CAN0_CfgPMC_0:
   \   00000010   00FCFFFF           DC32        0xfffffc00

   \                                 In segment CODE, align 4, keep-with-next
   \   __??Code16?? __code __interwork __atpcs void AT91F_CAN0_CfgPIO(void)
   \                     AT91F_CAN0_CfgPIO:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   0022               MOV         R2,#+0
   \   00000004   C021               MOV         R1,#+0xC0
   \   00000006   0905               LSL         R1,R1,#+0x14       ;; #+0xC000000
   \   00000008   0248               LDR         R0,??AT91F_CAN0_CfgPIO_0  ;; 0xfffff400
   \   0000000A   ........           _BLF        AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
   \   0000000E   01BC               POP         {R0}
   \   00000010   0047               BX          R0                 ;; return
   \   00000012   C046               NOP         
   \                     ??AT91F_CAN0_CfgPIO_0:
   \   00000014   00F4FFFF           DC32        0xfffff400

   \                                 In segment CODE, align 4, keep-with-next
   \   __??Code16?? __code __interwork __atpcs void AT91F_CAN1_CfgPMC(void)
   \                     AT91F_CAN1_CfgPMC:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   2021               MOV         R1,#+0x20
   \   00000004   0248               LDR         R0,??AT91F_CAN1_CfgPMC_0  ;; 0xfffffc00
   \   00000006   ........           _BLF        AT91F_PMC_EnablePeriphClock,AT91F_PMC_EnablePeriphClock??rT
   \   0000000A   01BC               POP         {R0}
   \   0000000C   0047               BX          R0                 ;; return
   \   0000000E   C046               NOP         
   \                     ??AT91F_CAN1_CfgPMC_0:
   \   00000010   00FCFFFF           DC32        0xfffffc00

   \                                 In segment CODE, align 4, keep-with-next
   \   __??Code16?? __code __interwork __atpcs void AT91F_CAN1_CfgPIO(void)
   \                     AT91F_CAN1_CfgPIO:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   0022               MOV         R2,#+0
   \   00000004   C021               MOV         R1,#+0xC0
   \   00000006   8905               LSL         R1,R1,#+0x16       ;; #+0x30000000
   \   00000008   0448               LDR         R0,??AT91F_CAN1_CfgPIO_0  ;; 0xfffff400
   \   0000000A   ........           _BLF        AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
   \   0000000E   8022               MOV         R2,#+0x80
   \   00000010   0021               MOV         R1,#+0
   \   00000012   0348               LDR         R0,??AT91F_CAN1_CfgPIO_0+0x4  ;; 0xfffff600
   \   00000014   ........           _BLF        AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
   \   00000018   01BC               POP         {R0}
   \   0000001A   0047               BX          R0                 ;; return
   \                     ??AT91F_CAN1_CfgPIO_0:
   \   0000001C   00F4FFFF           DC32        0xfffff400
   \   00000020   00F6FFFF           DC32        0xfffff600
     21          /* Global variables */

   \                                 In segment DATA_Z, align 1, align-sorted
     22          volatile char       testCAN0 = AT91C_TEST_NOK;
   \                     testCAN0:
   \   00000000                      DS8 1

   \                                 In segment DATA_Z, align 1, align-sorted
     23          volatile char       testCAN1 = AT91C_TEST_NOK;
   \                     testCAN1:
   \   00000000                      DS8 1
     24          extern  void CanSendData(unsigned int LData,unsigned HData) ;
     25          
     26          //*----------------------------------------------------------------------------
     27          //* \fn    AT91F_CAN0_Handler
     28          //* \brief
     29          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     30          void AT91F_CAN0_Handler(void)
     31          {
   \                     AT91F_CAN0_Handler:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   81B0               SUB         SP,#+0x4
     32            volatile unsigned int status;
     33          		
     34            status = AT91F_CAN_GetStatus(AT91C_BASE_CAN0) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN0);
   \   00000004   ....               LDR         R0,??DataTable27   ;; 0xfff80000
   \   00000006   ........           _BLF        AT91F_CAN_GetStatus,AT91F_CAN_GetStatus??rT
   \   0000000A   051C               MOV         R5,R0
   \   0000000C   ....               LDR         R0,??DataTable27   ;; 0xfff80000
   \   0000000E   ........           _BLF        AT91F_CAN_GetInterruptMaskStatus,AT91F_CAN_GetInterruptMaskStatus??rT
   \   00000012   2840               AND         R0,R5
   \   00000014   0090               STR         R0,[SP, #+0]
     35            AT91F_CAN_DisableIt(AT91C_BASE_CAN0,status);
   \   00000016   0099               LDR         R1,[SP, #+0]
   \   00000018   ....               LDR         R0,??DataTable27   ;; 0xfff80000
   \   0000001A   ........           _BLF        AT91F_CAN_DisableIt,AT91F_CAN_DisableIt??rT
     36            int RxData=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB0) ;
   \   0000001E   0E48               LDR         R0,??AT91F_CAN0_Handler_0  ;; 0xfff80200
   \   00000020   ........           _BLF        AT91F_CAN_GetMessageDataLow,AT91F_CAN_GetMessageDataLow??rT
   \   00000024   041C               MOV         R4,R0
     37            TRACE_INFO("______Interrupt now is received some data____________") ;
   \   00000026   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000028   0028               CMP         R0,#+0
   \   0000002A   03D0               BEQ         ??AT91F_CAN0_Handler_1
   \   0000002C   0B49               LDR         R1,??AT91F_CAN0_Handler_0+0x4  ;; `?<Constant "______Interrupt now i...">`
   \   0000002E   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000030   ........           _BLF        fprintf,fprintf??rT
     38            TRACE_INFO("%d",RxData);
   \                     ??AT91F_CAN0_Handler_1:
   \   00000034   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000036   0028               CMP         R0,#+0
   \   00000038   04D0               BEQ         ??AT91F_CAN0_Handler_2
   \   0000003A   221C               MOV         R2,R4
   \   0000003C   ....               LDR         R1,??DataTable19   ;; `?<Constant "%d">`
   \   0000003E   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000040   ........           _BLF        fprintf,fprintf??rT
     39            if(status & AT91C_CAN_WAKEUP) {
   \                     ??AT91F_CAN0_Handler_2:
   \   00000044   0098               LDR         R0,[SP, #+0]
   \   00000046   8002               LSL         R0,R0,#+0xA
   \   00000048   02D5               BPL         ??AT91F_CAN0_Handler_3
     40              testCAN0 = AT91C_TEST_OK;
   \   0000004A   0548               LDR         R0,??AT91F_CAN0_Handler_0+0x8  ;; testCAN0
   \   0000004C   0121               MOV         R1,#+0x1
   \   0000004E   0170               STRB        R1,[R0, #+0]
     41              TRACE_DEBUG_H("=> CAN0 WAKEUP ");
     42            }
     43          
     44          }
   \                     ??AT91F_CAN0_Handler_3:
   \   00000050   01B0               ADD         SP,#+0x4
   \   00000052   30BC               POP         {R4,R5}
   \   00000054   01BC               POP         {R0}
   \   00000056   0047               BX          R0                 ;; return
   \                     ??AT91F_CAN0_Handler_0:
   \   00000058   0002F8FF           DC32        0xfff80200
   \   0000005C   ........           DC32        `?<Constant "______Interrupt now i...">`
   \   00000060   ........           DC32        testCAN0
     45          
     46          //*----------------------------------------------------------------------------
     47          //* \fn    AT91F_CAN1_Handler
     48          //* \brief
     49          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     50          void AT91F_CAN1_Handler(void)   //接收CAN0 ->MB0 发送的数据
     51          {
   \                     AT91F_CAN1_Handler:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   81B0               SUB         SP,#+0x4
     52            volatile unsigned int status;
     53            int RxData ;
     54          		
     55            status = AT91F_CAN_GetStatus(AT91C_BASE_CAN1) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN1);
   \   00000004   ....               LDR         R0,??DataTable28   ;; 0xfff84000
   \   00000006   ........           _BLF        AT91F_CAN_GetStatus,AT91F_CAN_GetStatus??rT
   \   0000000A   051C               MOV         R5,R0
   \   0000000C   ....               LDR         R0,??DataTable28   ;; 0xfff84000
   \   0000000E   ........           _BLF        AT91F_CAN_GetInterruptMaskStatus,AT91F_CAN_GetInterruptMaskStatus??rT
   \   00000012   2840               AND         R0,R5
   \   00000014   0090               STR         R0,[SP, #+0]
     56            AT91F_CAN_DisableIt(AT91C_BASE_CAN1,status);
   \   00000016   0099               LDR         R1,[SP, #+0]
   \   00000018   ....               LDR         R0,??DataTable28   ;; 0xfff84000
   \   0000001A   ........           _BLF        AT91F_CAN_DisableIt,AT91F_CAN_DisableIt??rT
     57          
     58            RxData=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0)  ;     //接收低四位
   \   0000001E   1A48               LDR         R0,??AT91F_CAN1_Handler_0  ;; 0xfff84200
   \   00000020   ........           _BLF        AT91F_CAN_GetMessageDataLow,AT91F_CAN_GetMessageDataLow??rT
   \   00000024   041C               MOV         R4,R0
     59            TRACE_INFO("\r\n______Interrupt received  data,Low is:") ;
   \   00000026   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000028   0028               CMP         R0,#+0
   \   0000002A   03D0               BEQ         ??AT91F_CAN1_Handler_1
   \   0000002C   1749               LDR         R1,??AT91F_CAN1_Handler_0+0x4  ;; `?<Constant "\\r\\n______Interrupt rec...">`
   \   0000002E   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000030   ........           _BLF        fprintf,fprintf??rT
     60            TRACE_INFO("%d",RxData );
   \                     ??AT91F_CAN1_Handler_1:
   \   00000034   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000036   0028               CMP         R0,#+0
   \   00000038   04D0               BEQ         ??AT91F_CAN1_Handler_2
   \   0000003A   221C               MOV         R2,R4
   \   0000003C   ....               LDR         R1,??DataTable19   ;; `?<Constant "%d">`
   \   0000003E   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000040   ........           _BLF        fprintf,fprintf??rT
     61            RxData=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) ;     //接收高四位
   \                     ??AT91F_CAN1_Handler_2:
   \   00000044   1048               LDR         R0,??AT91F_CAN1_Handler_0  ;; 0xfff84200
   \   00000046   ........           _BLF        AT91F_CAN_GetMessageDataHigh,AT91F_CAN_GetMessageDataHigh??rT
   \   0000004A   041C               MOV         R4,R0
     62            TRACE_INFO("\r\n_______Interrupt received data,High is:") ;
   \   0000004C   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   0000004E   0028               CMP         R0,#+0
   \   00000050   03D0               BEQ         ??AT91F_CAN1_Handler_3
   \   00000052   0F49               LDR         R1,??AT91F_CAN1_Handler_0+0x8  ;; `?<Constant "\\r\\n_______Interrupt re...">`
   \   00000054   ....               LDR         R0,??DataTable26   ;; _Stdout
   \   00000056   ........           _BLF        fprintf,fprintf??rT
     63          
     64          
     65            /**如果如下指令不执行的话,所有读出的数据都将是第一次接收到的数据**/
     66            AT91C_BASE_CAN1_MB0->CAN_MB_MCR=AT91C_CAN_MTCR;          //允许接收下一条消息
   \                     ??AT91F_CAN1_Handler_3:
   \   0000005A   0E48               LDR         R0,??AT91F_CAN1_Handler_0+0xC  ;; 0xfff8421c
   \   0000005C   8021               MOV         R1,#+0x80
   \   0000005E   0904               LSL         R1,R1,#+0x10       ;; #+0x800000
   \   00000060   0160               STR         R1,[R0, #+0]
     67            /*******************************************************************/
     68            TRACE_INFO("%d",RxData );

⌨️ 快捷键说明

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