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

📄 b_canx1.lst

📁 This ZIP file contains the support files for programming the Infineon C167CR CAN interface. Refer to
💻 LST
字号:
C166 COMPILER  V3.10b,  B_CANX1                                                            27/11/97  13:35:44  PAGE 1   


DOS C166 COMPILER V3.10b, COMPILATION OF MODULE B_CANX1
OBJECT MODULE PLACED IN B_CANX1.OBJ
COMPILER INVOKED BY: C:\C166EVAL\BIN\C166.EXE B_CANX1.C CD DB M167 WL(3) 

stmt level    source

   1          /******************************************************************************
   2          C167CR CAN Ap. Note project
   3          Main - b_canx1
   4          
   5          This is an example program showing how to use the CAN interface on the Keil
   6          MCB167 evaluation board.
   7          
   8          Copyright (c) 1997 Keil Software
   9          ******************************************************************************/
  10          #include <stdio.h>
  11          #include <intrins.h>
  12          #include "can_ifc.h"
  13          #include "can_msgs.h"
  14          
  15          #define TIME_MO 1 /* message object number for time message */
  16          
  17          
  18          /******************************************************************************
  19          Setup CAN controller
  20          
  21          Returns: nothing
  22          -----------------------------------------------------------------------------*/
  23          void
  24          setup_can(void)
  25          {
  26   1         begin_can_init();
  27   1      
  28   1         /* These mask values tell the CAN controller that all bits in a
  29   1            message id. are significant when comparing the id of a received message
  30   1            to the id's in the arbitration registers of the message objects.
  31   1         */
  32   1         CAN_MASK_SHORT = 0xffff;
  33   1         CAN_UMASK_LONG = 0xffff;
  34   1         CAN_LMASK_LONG = 0xf8ff;
  35   1      
  36   1         /* Since this program doesn't use message object 15, it is unnecessary
  37   1            to initialize the 'mask of last message' registers (CAN_UMASK_LAST and
  38   1            CAN_LMASK_LAST).
  39   1         */
  40   1      
  41   1         CAN_MSGOBJ[TIME_MO].msg_ctl = MSGVAL_CLR;
  42   1         CAN_MSGOBJ[TIME_MO].arbitr = ARBITR(CAN_TIME_MSG);
  43   1         CAN_MSGOBJ[TIME_MO].msg_cfg = MSG_CFG(LEN_CAN_TIME_MSG, CANDIR_RECEIVE, 0);
  44   1         CAN_MSGOBJ[TIME_MO].msg_ctl =
  45   1            /* clear bits     set bits */
  46   1               INTPND_CLR &
  47   1               RXIE_CLR &
  48   1               TXIE_CLR &
  49   1                              MSGVAL_SET &
  50   1               NEWDAT_CLR &
  51   1               MSGLST_CLR &
  52   1               TXRQ_CLR &
  53   1               RMTPND_CLR;
  54   1      
  55   1         /* CAN_IE_ must be set for any CAN interrupts to occur.
  56   1            CAN_EIE_ must be set for CAN error status change interrupts to occur.
  57   1         */
  58   1         end_can_init(CAN_IE_ | CAN_EIE_);
  59   1      }
C166 COMPILER  V3.10b,  B_CANX1                                                            27/11/97  13:35:44  PAGE 2   

  60          
  61          
  62          /******************************************************************************
  63          main
  64          
  65          What this program does:
  66             Setup the CAN interface, with a message object for receiving time message.
  67             Loop forever {
  68                Transmit time message remote frame.
  69                Wait for time message to be received.
  70                Process time message.
  71             }
  72          
  73          Returns: never
  74          -----------------------------------------------------------------------------*/
  75          void
  76          main(void)
  77          {
  78   1         unsigned long time_value;
  79   1         unsigned long last_printed_time_value = 0ul - 1000ul;
  80   1      
  81   1         printf ("Program B start\n");
  82   1      
  83   1         /* Set up CAN interface */
  84   1         setup_can();
  85   1      
  86   1         /* Main loop */
  87   1         while (1) {
  88   2            /* Request time message.
  89   2               We're going to detect receipt of the message by examining NEWDAT
  90   2               (there are other ways), so also clear NEWDAT to make sure we process
  91   2               a new time message, not an old one that has been waiting around
  92   2               unprocessed.
  93   2            */
  94   2            CAN_MSGOBJ[TIME_MO].msg_ctl = TXRQ_SET & NEWDAT_CLR;
  95   2      
  96   2            /* Wait for updated time message
  97   2               Note: Doing it this way, the program will hang here forever if the
  98   2               message is not received.
  99   2            */
 100   2            while (!(CAN_MSGOBJ[TIME_MO].msg_ctl & NEWDAT_))  ;
 101   2      
 102   2      
 103   2            /* Process the time message */
 104   2      
 105   2            copy_received_can_message(TIME_MO, &time_value);
 106   2            /* If this time message is at least one second later than the last one
 107   2               that was output then output it.
 108   2            */
 109   2            if (time_value - last_printed_time_value >= 1000) {
 110   3               printf("%lu\n", time_value);
 111   3               last_printed_time_value = time_value;
 112   3            }
 113   2         }
 114   1      }
C166 COMPILER  V3.10b,  B_CANX1                                                            27/11/97  13:35:44  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION setup_can (BEGIN  RMASK = @0x7FFF)
                                           ; SOURCE LINE # 24
                                           ; SOURCE LINE # 26
0000 CA000000 E    CALLA   cc_UC,begin_can_init
                                           ; SOURCE LINE # 32
0004 E6F4FFFF      MOV     R4,#0FFFFH
0008 F6F406EF      MOV     0EF06H,R4
                                           ; SOURCE LINE # 33
000C F6F408EF      MOV     0EF08H,R4
                                           ; SOURCE LINE # 34
0010 E6F4FFF8      MOV     R4,#0F8FFH
0014 F6F40AEF      MOV     0EF0AH,R4
                                           ; SOURCE LINE # 41
0018 E6F47FFF      MOV     R4,#0FF7FH
001C F6F410EF      MOV     0EF10H,R4
                                           ; SOURCE LINE # 42
0020 E6F4AAA0      MOV     R4,#0A0AAH
0024 E005          MOV     R5,#00H
0026 F6F412EF      MOV     0EF12H,R4
002A F6F514EF      MOV     0EF14H,R5
                                           ; SOURCE LINE # 43
002E E7F84000      MOVB    RL4,#040H
0032 F7F816EF      MOVB    0EF16H,RL4
                                           ; SOURCE LINE # 53
0036 E6F49555      MOV     R4,#05595H
003A F6F410EF      MOV     0EF10H,R4
                                           ; SOURCE LINE # 58
003E E0A8          MOV     R8,#0AH
0040 CA000000 E    CALLA   cc_UC,end_can_init
                                           ; SOURCE LINE # 59
0044 CB00          RET     
             ; FUNCTION setup_can (END    RMASK = @0x7FFF)

             ; FUNCTION main (BEGIN  RMASK = @0x7FFF)
                                           ; SOURCE LINE # 76
0046 2804          SUB     R0,#04H
                                           ; SOURCE LINE # 77
                                           ; SOURCE LINE # 79
0048 E6FE18FC      MOV     R14,#0FC18H
004C E6FFFFFF      MOV     R15,#0FFFFH
;---- Variable 'last_printed_time_value' assigned to Register 'R14/R15' ----
                                           ; SOURCE LINE # 81
0050 E6F80500 R    MOV     R8,#SC?5
0054 CA000000 E    CALLA   cc_UC,printf
                                           ; SOURCE LINE # 84
0058 BBD3          CALLR   setup_can
                                           ; SOURCE LINE # 87
005A         ?C0003:
                                           ; SOURCE LINE # 94
005A E6F4FFED      MOV     R4,#0EDFFH
005E F6F410EF      MOV     0EF10H,R4
                                           ; SOURCE LINE # 100
0062         ?C0005:
0062 F2F410EF      MOV     R4,0EF10H
0066 66F40002      AND     R4,#0200H
006A 2DFB          JMPR    cc_Z,?C0005
006C         ?C0006:
                                           ; SOURCE LINE # 105
006C F090          MOV     R9,R0
006E E018          MOV     R8,#01H
0070 CA000000 E    CALLA   cc_UC,copy_received_can_message
                                           ; SOURCE LINE # 109
0074 A860          MOV     R6,[R0]         ; time_value
C166 COMPILER  V3.10b,  B_CANX1                                                            27/11/97  13:35:44  PAGE 4   

0076 D4700200      MOV     R7,[R0+#02H]    ; time_value+2
007A F046          MOV     R4,R6
007C 204E          SUB     R4,R14
007E F057          MOV     R5,R7
0080 305F          SUBC    R5,R15
0082 26F4E803      SUB     R4,#03E8H
0086 3850          SUBC    R5,#00H
0088 8DE8          JMPR    cc_ULT,?C0003
                                           ; SOURCE LINE # 110
008A F096          MOV     R9,R6
008C F0A7          MOV     R10,R7
008E E6F80000 R    MOV     R8,#SC?0
0092 CA000000 E    CALLA   cc_UC,printf
                                           ; SOURCE LINE # 111
0096 A8E0          MOV     R14,[R0]        ; time_value
0098 D4F00200      MOV     R15,[R0+#02H]   ; time_value+2
                                           ; SOURCE LINE # 112
009C 0DDE          JMPR    cc_UC,?C0003
             ; FUNCTION main (END    RMASK = @0x7FFF)



MODULE INFORMATION:   INITIALIZED  UNINITIALIZED
  CODE SIZE        =         158     --------
  NEAR-CONST SIZE  =          22     --------
  FAR-CONST SIZE   =    --------     --------
  HUGE-CONST SIZE  =    --------     --------
  XHUGE-CONST SIZE =    --------     --------
  NEAR-DATA SIZE   =    --------     --------
  FAR-DATA SIZE    =    --------     --------
  XHUGE-DATA SIZE  =    --------     --------
  IDATA-DATA SIZE  =    --------     --------
  SDATA-DATA SIZE  =    --------     --------
  BDATA-DATA SIZE  =    --------     --------
  HUGE-DATA SIZE   =    --------     --------
  BIT SIZE         =    --------     --------
  INIT'L SIZE      =    --------     --------
END OF MODULE INFORMATION.


C166 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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