📄 b_canx1.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 + -