📄 xkcan_node.lst
字号:
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE XKCAN_NODE
OBJECT MODULE PLACED IN XKCAN_Node.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE XKCAN_Node.c ROM(COMPACT) BROWSE INCDIR(E:\Keil\C51\INC) DEBUG OBJECTEXTEND
line level source
1 #include <REGX52.h>
2 #include <absacc.h>
3
4 #include "xkcan.h"
5
6 //#pragma OT(4, speed)
7
8 // Frame Datas and pointers
9 _t_can_frame idata rxCanFrame[2];
10 _t_can_frame * idata pWriteRxCanFrame;
11 _t_can_frame * idata pWriteRxCanFrameTemp;
12 _t_can_frame * idata pReadRxCanFrame;
13 _t_can_frame * idata pReadRxCanFrameTemp;
14 _t_can_frame * idata pCanFrameTemp;
15 _t_can_frame * idata pCanFrameTemp2;
16
17
18 _t_can_frame idata txCanFrameTemp;
19 _t_can_status idata sCanDefault;
20
21 extern ubyte * idata pRx485Frame;
22 extern _t_485_tuoke_dh4 idata tx485FrameTemp;
23
24
25 // Flags and global variables
26 ubyte volatile flag_can_ir = 0;
27 ubyte volatile flag_can_txc = 0;
28 ubyte volatile flag_can_rcv = 0;
29
30 ubyte volatile flag_uart_txc = 1;
31 ubyte volatile flag_uart_rcv = 0;
32 ubyte volatile flag_485_rcv = 0;
33 ubyte volatile flag_485_tx = 0;
34
35 ubyte volatile flag_timer_exp_set = 0;
36 ubyte volatile flag_timer_exp_timeup = 0;
37 ubyte volatile timer_clock_pause;
38 ubyte volatile timer_exp_clock_pause;
39 uint timer_tick1, timer_tick2;
40
41 ubyte stntype;
42 ubyte uart_data;
43
44 ubyte NMT_Status;
45 ubyte EXP_Status;
46 ubyte NID;
47
48 ubyte cGuardingToggle = 0x80;
49 ubyte timer_toggle = 0;
50
51 ubyte volatile regStatus[ETN_STATUS_BANK_COUNT + 1];
52 //ubyte volatile StatusNum = 0;
53
54 // Function Prototypes
55 void InitBoard();
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 2
56 ubyte EnterStatus(ubyte status);
57 ubyte EnterExpStatus(ubyte status);
58 void UpdateTimeDisplay();
59
60 void pause();
61 void delay(uint);
62
63 void ParseCanRxData();
64 void StatusMachine();
65 void UpdateRegStatus();
66 //void serial_IT(void) interrupt SIO_VECTOR
67 //void ex1_int(void) interrupt IE1_VECTOR
68
69 void main(void)
70 {
71 1 ubyte noop = 0;
72 1
73 1 InitBoard();
74 1
75 1 EnterStatus(STATUS_INITIALISING);
76 1
77 1 timer_tick2 = TIMER_Count();
78 1
79 1 while (1)
80 1 {
81 2 // Parse Received Data
82 2
83 2 timer_tick1 = TIMER_Count();
84 2
85 2 if ( flag_can_rcv == 1 )
86 2 {
87 3 flag_can_rcv = 0;
88 3 ParseCanRxData();
89 3 }
90 2
91 2 // Deal with the status machine
92 2
93 2 StatusMachine();
94 2
95 2 // Clock Stuffs
96 2
97 2 if ((timer_tick_500ms & 1) == 1 )
98 2 {
99 3 timer_tick_500ms = 0;
100 3
101 3
102 3 UpdateClock();
103 3 UpdateTimeDisplay();
104 3
105 3 }
106 2
107 2 //P1 = ~NID;//~NMT_Status;
108 2 }
109 1 }
110
111 void InitBoard()
112 {
113 1
114 1 // Set default CAN parameters
115 1
116 1 sCanDefault.btr0 = 0x01; // 250kbps at 16MHz crystal
117 1 sCanDefault.btr1 = 0x1c;
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 3
118 1
119 1 //sCanDefault.cobid = _GEN_COBID(0x0F, NID);
120 1 NID = ~P1;
121 1 sCanDefault.acr0 = ( (ubyte)NID >>3 ) & 0x0f;
122 1 sCanDefault.acr1 = ( (ubyte)NID <<5 ) & 0xe0;
123 1 sCanDefault.acr2 = 0;//( sCanDefault.cobid >>3 ) & 0x0f;
124 1 sCanDefault.acr3 = 0;//( sCanDefault.cobid <<5 ) & 0xe0;
125 1
126 1 sCanDefault.amr0 = 0xf0;
127 1 sCanDefault.amr1 = 0x1f;
128 1 sCanDefault.amr2 = 0xf0;
129 1 sCanDefault.amr3 = 0x1f;
130 1 sCanDefault.mod = 0;
131 1
132 1
133 1 sCanDefault.cdr = SJA1000_CDR_CLOCK_OFF|SJA1000_CDR_PELICAN_MODE|SJA1000_CDR_CBP;
134 1
135 1 sCanDefault.ocr = SJA1000_OCR_MODE_NORMAL|SJA1000_OCR_TX0_PUSHPULL;
136 1 sCanDefault.ier = SJA1000_IER_RIE|SJA1000_IER_TIE;
137 1
138 1
139 1 pWriteRxCanFrame = &rxCanFrame[0];
140 1 pWriteRxCanFrameTemp = &rxCanFrame[1];
141 1 pReadRxCanFrame = &rxCanFrame[0];
142 1 pReadRxCanFrameTemp = &rxCanFrame[1];
143 1
144 1 // Device Initialization
145 1 DIG_Init();
146 1 TIMER_Init();
147 1 _485_Init();
148 1 CAN_Init(&sCanDefault);
149 1
150 1 // Device Open
151 1 TIMER_Reset();
152 1 CLOCK_Set(1, 2, 3);
153 1 CLOCK_Exp_Set(4, 5, 6);
154 1
155 1 DIG_Open();
156 1 TIMER_Start();
157 1 CLOCK_Start();
158 1 CAN_Open(&sCanDefault);
159 1
160 1 // Enable global interrupt
161 1 EA = 1;
162 1 EX1 = 1;
163 1
164 1 }
165
166 ubyte EnterStatus(ubyte status)
167 {
168 1 if (status == STATUS_INITIALISING)
169 1 {
170 2 NMT_Status = status;
171 2 }
172 1 else if (status == STATUS_RESET_APP)
173 1 {
174 2 EnterExpStatus(EXP_PRE_INIT);
175 2 NMT_Status = status;
176 2 }
177 1 else if (status == STATUS_RESET_COMM)
178 1 {
179 2 NMT_Status = status;
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 4
180 2 }
181 1 else if (status == STATUS_PRE_OPERATIONAL)
182 1 {
183 2 // Send BootUp Frame
184 2 cGuardingToggle = (~cGuardingToggle & 0x80);
185 2 txCanFrameTemp.dlc = 2;
186 2 txCanFrameTemp.cobid = _GEN_D_COBID(FC_D_NMT_EC, NID);
187 2 txCanFrameTemp.rtr = 0;
188 2 txCanFrameTemp.dat[0] = cGuardingToggle | NMT_Status;
189 2 txCanFrameTemp.dat[1] = EXP_Status;
190 2
191 2 CAN_Transmit( &txCanFrameTemp );
192 2
193 2 NMT_Status = status;
194 2 }
195 1 else if (status == STATUS_OPERATIONAL)
196 1 {
197 2 NMT_Status = status;
198 2 }
199 1 else if (status == STATUS_STOPPED)
200 1 {
201 2 EnterExpStatus(EXP_STOPPED);
202 2 NMT_Status = status;
203 2 }
204 1 else
205 1 {
206 2 //TODO: Add your error handling code here
207 2 //ERROR: Wrong Status
208 2 return STATUS_ERROR;
209 2 }
210 1
211 1 return status;
212 1 }
213
214 ubyte EnterExpStatus(ubyte status)
215 {
216 1 if (status == EXP_PRE_INIT)
217 1 {
218 2 CLOCK_Exp_Reset();
219 2 EXP_Status = status;
220 2 }
221 1 else if (status == EXP_INITIALISING)
222 1 {
223 2 CLOCK_Exp_Init();
224 2 EXP_Status = status;
225 2 }
226 1 else if (status == EXP_STANDBY)
227 1 {
228 2 EXP_Status = status;
229 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -