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

📄 main.lst

📁 IAR开发环境下AT91SAM7X256的CAN功能验证与使用指导
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   0022               MOV         R2,#+0
   \   00000004   C021               MOV         R1,#+0xC0
   \   00000006   4903               LSL         R1,R1,#+0xD        ;; #+0x180000
   \   00000008   0248               LDR         R0,??AT91F_CAN_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_CAN_CfgPIO_0:
   \   00000014   00F4FFFF           DC32        0xfffff400
     21          
     22          /* Global variables */

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

   \                                 In segment DATA_Z, align 4, align-sorted
     24          unsigned int            txcounter,rxcounter;
   \                     txcounter:
   \   00000000                      DS8 4

   \                                 In segment DATA_Z, align 4, align-sorted
   \                     rxcounter:
   \   00000000                      DS8 4
     25          
     26          //*----------------------------------------------------------------------------
     27          //* \fn    AT91F_CAN_Handler
     28          //* \brief
     29          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     30          void AT91F_CAN_Handler(void)
     31          {
   \                     AT91F_CAN_Handler:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   81B0               SUB         SP,#+0x4
     32            volatile unsigned int status;
     33          		
     34            status = AT91F_CAN_GetStatus(AT91C_BASE_CAN) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN);
   \   00000004   ....               LDR         R0,??DataTable5    ;; 0xfffd0000
   \   00000006   ........           _BLF        AT91F_CAN_GetStatus,AT91F_CAN_GetStatus??rT
   \   0000000A   041C               MOV         R4,R0
   \   0000000C   ....               LDR         R0,??DataTable5    ;; 0xfffd0000
   \   0000000E   ........           _BLF        AT91F_CAN_GetInterruptMaskStatus,AT91F_CAN_GetInterruptMaskStatus??rT
   \   00000012   2040               AND         R0,R4
   \   00000014   0090               STR         R0,[SP, #+0]
     35            AT91F_CAN_DisableIt(AT91C_BASE_CAN,status);
   \   00000016   0099               LDR         R1,[SP, #+0]
   \   00000018   ....               LDR         R0,??DataTable5    ;; 0xfffd0000
   \   0000001A   ........           _BLF        AT91F_CAN_DisableIt,AT91F_CAN_DisableIt??rT
     36          
     37            if(status & AT91C_CAN_WAKEUP) {
   \   0000001E   0098               LDR         R0,[SP, #+0]
   \   00000020   8002               LSL         R0,R0,#+0xA
   \   00000022   02D5               BPL         ??AT91F_CAN_Handler_0
     38              testCAN = AT91C_TEST_OK;
   \   00000024   1048               LDR         R0,??AT91F_CAN_Handler_1  ;; testCAN
   \   00000026   0121               MOV         R1,#+0x1
   \   00000028   0170               STRB        R1,[R0, #+0]
     39              TRACE_DEBUG_H("\n\r=> CAN WAKEUP ");
     40            }
     41          
     42            if(status & AT91C_CAN_MB0) {
   \                     ??AT91F_CAN_Handler_0:
   \   0000002A   0098               LDR         R0,[SP, #+0]
   \   0000002C   C007               LSL         R0,R0,#+0x1F
   \   0000002E   0CD5               BPL         ??AT91F_CAN_Handler_2
     43              txcounter++;
   \   00000030   0E48               LDR         R0,??AT91F_CAN_Handler_1+0x4  ;; txcounter
   \   00000032   0E49               LDR         R1,??AT91F_CAN_Handler_1+0x4  ;; txcounter
   \   00000034   0968               LDR         R1,[R1, #+0]
   \   00000036   491C               ADD         R1,#+0x1
   \   00000038   0160               STR         R1,[R0, #+0]
     44              // Enable Reception on Mailbox 1
     45              AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN,AT91C_CAN_MB1);
   \   0000003A   0221               MOV         R1,#+0x2
   \   0000003C   ....               LDR         R0,??DataTable5    ;; 0xfffd0000
   \   0000003E   ........           _BLF        AT91F_CAN_InitTransferRequest,AT91F_CAN_InitTransferRequest??rT
     46              // Enable Mailbox 1 interrupt
     47              AT91F_CAN_EnableIt(AT91C_BASE_CAN,AT91C_CAN_MB1);
   \   00000042   0221               MOV         R1,#+0x2
   \   00000044   ....               LDR         R0,??DataTable5    ;; 0xfffd0000
   \   00000046   ........           _BLF        AT91F_CAN_EnableIt,AT91F_CAN_EnableIt??rT
     48              TRACE_DEBUG_H("\n\r=> CAN MB0 Interrupt");
     49            }
     50          
     51            if(status & AT91C_CAN_MB1) {
   \                     ??AT91F_CAN_Handler_2:
   \   0000004A   0098               LDR         R0,[SP, #+0]
   \   0000004C   8007               LSL         R0,R0,#+0x1E
   \   0000004E   07D5               BPL         ??AT91F_CAN_Handler_3
     52              testCAN = AT91C_TEST_OK;
   \   00000050   0548               LDR         R0,??AT91F_CAN_Handler_1  ;; testCAN
   \   00000052   0121               MOV         R1,#+0x1
   \   00000054   0170               STRB        R1,[R0, #+0]
     53              rxcounter++;
   \   00000056   0648               LDR         R0,??AT91F_CAN_Handler_1+0x8  ;; rxcounter
   \   00000058   0549               LDR         R1,??AT91F_CAN_Handler_1+0x8  ;; rxcounter
   \   0000005A   0968               LDR         R1,[R1, #+0]
   \   0000005C   491C               ADD         R1,#+0x1
   \   0000005E   0160               STR         R1,[R0, #+0]
     54              TRACE_DEBUG_H("\n\r=> CAN MB1 Interrupt");
     55            }
     56          }
   \                     ??AT91F_CAN_Handler_3:
   \   00000060   01B0               ADD         SP,#+0x4
   \   00000062   10BC               POP         {R4}
   \   00000064   01BC               POP         {R0}
   \   00000066   0047               BX          R0                 ;; return
   \                     ??AT91F_CAN_Handler_1:
   \   00000068   ........           DC32        testCAN
   \   0000006C   ........           DC32        txcounter
   \   00000070   ........           DC32        rxcounter
     57          
     58          //*--------------------------------------------------------------------------------------
     59          //* Function Name       : Main
     60          //* Object              : Software entry point
     61          //*--------------------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     62          void main()
     63          {
   \                     main:
   \   00000000   00B5               PUSH        {LR}
     64            ////////////////////////////////////////////////////////////////////////////////////////////////////
     65            //  DBGU Init
     66            /////////////////////////////////////////////////////////////////////////////////////////////////////
     67          
     68            // Enable DBGU Clock
     69            //AT91F_DBGU_CfgPMC();  // DBGU is always clocked
     70            // Open PIO for DBGU
     71            AT91F_DBGU_CfgPIO();
   \   00000002   ........           _BLF        AT91F_DBGU_CfgPIO,AT91F_DBGU_CfgPIO??rT
     72            AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
     73                                AT91C_MASTER_CLOCK,
     74                                AT91C_US_ASYNC_MODE,  	// mode Register to be programmed
     75                                AT91C_BAUDRATE_115200,	// baudrate to be programmed
     76                                0);                   	// timeguard to be programmed
   \   00000006   0020               MOV         R0,#+0
   \   00000008   01B4               PUSH        {R0}
   \   0000000A   E123               MOV         R3,#+0xE1
   \   0000000C   5B02               LSL         R3,R3,#+0x9        ;; #+0x1C200
   \   0000000E   8C22               MOV         R2,#+0x8C
   \   00000010   1201               LSL         R2,R2,#+0x4        ;; #+0x8C0
   \   00000012   2049               LDR         R1,??main_0        ;; 0x2dc6c00
   \   00000014   2048               LDR         R0,??main_0+0x4    ;; 0xfffff200
   \   00000016   ........           _BLF        AT91F_US_Configure,AT91F_US_Configure??rT
   \   0000001A   01B0               ADD         SP,#+0x4
     77            // Enable Transmitter
     78            AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
   \   0000001C   1E48               LDR         R0,??main_0+0x4    ;; 0xfffff200
   \   0000001E   ........           _BLF        AT91F_US_EnableTx,AT91F_US_EnableTx??rT
     79          
     80            TRACE_INFO("\n\n\r======================================\n\r");
   \   00000022   1E48               LDR         R0,??main_0+0x8    ;; _Stdout
   \   00000024   0028               CMP         R0,#+0
   \   00000026   03D0               BEQ         ??main_1
   \   00000028   1D49               LDR         R1,??main_0+0xC    ;; `?<Constant "\\n\\n\\r==================...">`
   \   0000002A   1C48               LDR         R0,??main_0+0x8    ;; _Stdout
   \   0000002C   ........           _BLF        fprintf,fprintf??rT
     81            TRACE_INFO("AT91SAMX Basic CAN\n\r");
   \                     ??main_1:
   \   00000030   1A48               LDR         R0,??main_0+0x8    ;; _Stdout
   \   00000032   0028               CMP         R0,#+0
   \   00000034   03D0               BEQ         ??main_2
   \   00000036   1B49               LDR         R1,??main_0+0x10   ;; `?<Constant "AT91SAMX Basic CAN\\n\\r">`
   \   00000038   1848               LDR         R0,??main_0+0x8    ;; _Stdout
   \   0000003A   ........           _BLF        fprintf,fprintf??rT
     82            TRACE_INFO("======================================\n\r");
   \                     ??main_2:
   \   0000003E   1748               LDR         R0,??main_0+0x8    ;; _Stdout
   \   00000040   0028               CMP         R0,#+0
   \   00000042   03D0               BEQ         ??main_3
   \   00000044   1849               LDR         R1,??main_0+0x14   ;; `?<Constant "=====================...">`
   \   00000046   1548               LDR         R0,??main_0+0x8    ;; _Stdout
   \   00000048   ........           _BLF        fprintf,fprintf??rT
     83          
     84            ///////////////////////////////////////////////////////////////////////////////////////////
     85            //  Init CAN
     86            ///////////////////////////////////////////////////////////////////////////////////////////
     87          
     88            // Enable CAN PIOs
     89            AT91F_CAN_CfgPIO();
   \                     ??main_3:
   \   0000004C   ........           _BLF        AT91F_CAN_CfgPIO,AT91F_CAN_CfgPIO??rT
     90            // Enable CAN Clock
     91            AT91F_CAN_CfgPMC();
   \   00000050   ........           _BLF        AT91F_CAN_CfgPMC,AT91F_CAN_CfgPMC??rT
     92          
     93            // Enable CAN Transceiver
     94            AT91F_PIOA_CfgPMC();
   \   00000054   ........           _BLF        AT91F_PIOA_CfgPMC,AT91F_PIOA_CfgPMC??rT
     95            AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91B_CAN_TRANSCEIVER_RS) ;
   \   00000058   0421               MOV         R1,#+0x4
   \   0000005A   1448               LDR         R0,??main_0+0x18   ;; 0xfffff400
   \   0000005C   ........           _BLF        AT91F_PIO_CfgOutput,AT91F_PIO_CfgOutput??rT

⌨️ 快捷键说明

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