📄 sja_pelifunc.lst
字号:
C51 COMPILER V7.02b SJA_PELIFUNC 03/06/2003 10:03:48 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE SJA_PELIFUNC
OBJECT MODULE PLACED IN .\SJA_PELIfunc.obj
COMPILER INVOKED BY: F:\Keilv702\C51\BIN\C51.EXE ..\cansja1000\SJA_PELIfunc.c BROWSE NOINTPROMOTE INCDIR(G:\S_RTOS_TEST\
-INC\) DEBUG OBJECTEXTEND PRINT(.\SJA_PELIfunc.lst) OBJECT(.\SJA_PELIfunc.obj)
stmt level source
1 /*
2 *********************************************************************************************************
-***********
3 *描述: 独立的CAN 控制器SJA1000pelican模式应用函数文件
4 *文件名: SJA_PELI.C
5 *应用语言: KEIL C51
6 *版本 : V1.01
7 *广州周立功单片机发展有限公司 保留所有的版权
8 *********************************************************************************************************
-***********
9 */
10 #define _SJA_PELICAN_MODE_
11 #define _GLOBAL_SJA1000_PELI_APP_
12
13 /*
14 **********************************************************************************************************
-**************
15 ** 导入头文件
16 **********************************************************************************************************
-**************
17 */
18 #include "SJA1000_PELI_APP.H"
19
20 /*
21 **********************************************************************************************************
-**************
22 ** 函数原型说明
23 **********************************************************************************************************
-**************
24 */
25
26 /*
27 **********************************************************************************************************
-**************
28 **函数原型: char SJATestInterface(unsigned char testvalue)
29 **参数说明: Value 测试值
30 **返回值:
31 ** SJA_OK ; 表示SJA1000接口正常
32 ** SJA_INTERFACE_ERR ; 表示SJA1000与处理器接口出错
33 **
34 **说明: 该函数用于检测CAN控制器的接口是否正常
35 **********************************************************************************************************
-**************
36 */
37 char SJATestInterface(unsigned char testvalue)
38 {
39 1 char status=0;
40 1 bit ErrorFlag =1;
41 1 unsigned char ErrorCount = 0x20; //32次报错
42 1 unsigned char temp = testvalue;
43 1 while(--ErrorCount){
44 2 //WriteSJAReg(REG_CAN_TEST,testvalue);
45 2 WriteSJAReg(REG_CAN_TEST,temp);
46 2 if(ReadSJAReg(REG_CAN_TEST) == temp){
C51 COMPILER V7.02b SJA_PELIFUNC 03/06/2003 10:03:48 PAGE 2
47 3 temp =~temp ;
48 3 WriteSJAReg(REG_CAN_TEST,temp);
49 3 if(ReadSJAReg(REG_CAN_TEST) == temp){
50 4 temp =0;
51 4 WriteSJAReg(REG_CAN_TEST,temp);
52 4 ErrorFlag =0;
53 4 break;
54 4 }
55 3 else continue;
56 3 }
57 2 }
58 1 if(ErrorFlag){
59 2 status = SJA_INTERFACE_ERR ;
60 2 }
61 1 return (status);
62 1 }
63
64 /*
65 **********************************************************************************************************
-**************
66 **函数原型: char SJAEntryResetMode(void)
67 **参数说明: 无
68 **返回值:
69 ** SJA_OK ; 表示SJA1000进入复位模式成功
70 ** SJA_ENTRYRESET_ERR ; 表示SJA1000进入复位模式失败
71 **
72 **说明: 该函数用于使sja1000进入复位模式
73 **********************************************************************************************************
-**************
74 */
75 char SJAEntryResetMode(void)
76 {
77 1 char status=0;
78 1 unsigned char ErrorFlag =1;
79 1 unsigned char ErrorCount = 0x20; //32次报错
80 1 while(--ErrorCount){
81 2 if((status = SetBitMask(REG_CAN_MOD,RM_RR_BIT)) == 0){
82 3 ErrorFlag =0;
83 3 break;
84 3 }
85 2 }
86 1 if(ErrorFlag){
87 2 status = SJA_ENTRYRESET_ERR;
88 2 }
89 1 return (status);
90 1 }
91
92 /*
93 **********************************************************************************************************
-**************
94 **函数原型: char SJAQuitResetMode(void)
95 **参数说明: 无
96 **返回值:
97 ** SJA_OK ; 表示SJA1000退出复位模式成功
98 ** SJA_QUITRESET_ERR ; 表示SJA1000退出复位模式失败
99 **
100 **说明: 该函数用于使sja1000退出复位模式,进入工作模式
101 **********************************************************************************************************
-**************
102 */
103 char SJAQuitResetMode(void)
104 {
C51 COMPILER V7.02b SJA_PELIFUNC 03/06/2003 10:03:48 PAGE 3
105 1 char status=0;
106 1 unsigned char ErrorFlag =1;
107 1 unsigned char ErrorCount = 0x20; //32次报错
108 1 while(--ErrorCount){
109 2 if((status=ClearBitMask(REG_CAN_MOD,RM_RR_BIT)) == 0){
110 3 ErrorFlag =0;
111 3 break;
112 3 }
113 2 }
114 1 if(ErrorFlag){
115 2 status = SJA_QUITRESET_ERR;
116 2 }
117 1 return (status);
118 1 }
119
120 /*
121 **********************************************************************************************************
-**************
122 **函数原型: char SJAEntryPeliCANMode(void)
123 **参数说明: 无
124 **返回值:
125 ** SJA_OK ; 表示SJA1000进入PeliCAN模式 成功
126 ** SJA_INIT_ERR ; 表示SJA1000进入PeliCAN模式 失败
127 **
128 **说明: 该函数用于使sja1000进入PeliCAN模式
129 **********************************************************************************************************
-**************
130 */
131 char SJAEntryPeliCANMode(void)
132 {
133 1 char status=0;
134 1 if(SJATestRstMode()){ //处于工作模式
135 2 status = SJAEntryResetMode();
136 2 }
137 1 if(status == 0){ //处于复位模式
138 2 status = SetBitMask(REG_CAN_CDR,CANMode_BIT); //置位sja1000模式控制位
139 2 }
140 1 return (status);
141 1 }
142
143 /*
144 **********************************************************************************************************
-**************
145 **函数原型: char SetBitMask(unsigned char RegAdr,unsigned char BitValue)
146 **参数说明: RegAdr 要设置位的寄存器地址
147 ** BitValue 要设置的值
148 **返回值:
149 ** SJA_OK ; 表示设置值 成功
150 ** SJA_INIT_ERR ; 表示设置值 失败
151 **
152 **说明: 该函数用于置位sja1000某寄存器的某位
153 **********************************************************************************************************
-**************
154 */
155 char SetBitMask(unsigned char RegAdr,unsigned char BitValue)
156 {
157 1 char status=0;
158 1 unsigned char temp;
159 1 temp = ReadSJAReg(RegAdr)|BitValue;
160 1 WriteSJAReg(RegAdr,temp);
161 1 if(ReadSJAReg(RegAdr) == temp){
162 2 status = SJA_OK;
C51 COMPILER V7.02b SJA_PELIFUNC 03/06/2003 10:03:48 PAGE 4
163 2 }
164 1 else{
165 2 status = SJA_INIT_ERR ;
166 2 }
167 1 return (status);
168 1 }
169
170 /*
171 **********************************************************************************************************
-**************
172 **函数原型: char ClearBitMask(unsigned char RegAdr,unsigned char BitValue)
173 **参数说明: RegAdr 要清除位的寄存器地址
174 ** BitValue 要清除的值
175 **返回值:
176 ** SJA_OK ; 表示位清除 成功
177 ** SJA_INIT_ERR ; 表示位清除 失败
178 **
179 **说明: 该函数用于清除sja1000某寄存器的某位
180 **********************************************************************************************************
-**************
181 */
182 char ClearBitMask(unsigned char RegAdr,unsigned char BitValue)
183 {
184 1 char status=0;
185 1 unsigned char temp;
186 1 temp = ReadSJAReg(RegAdr)&(~BitValue);
187 1 WriteSJAReg(RegAdr,temp);
188 1 if(ReadSJAReg(RegAdr) == temp){
189 2 status = SJA_OK;
190 2 }
191 1 else{
192 2 status = SJA_INIT_ERR ;
193 2 }
194 1 return (status);
195 1 }
196
197 /*
198 **********************************************************************************************************
-**************
199 **函数原型: char SJATestRstMode(void)
200 **参数说明: 无
201 **返回值:
202 ** 0 ; 表示SJA1000处于复位模式
203 ** 1 ; 表示SJA1000处于工作模式
204 **
205 **说明: 该函数用于测试SJA1000 处于复位模式还是工作模式
206 **********************************************************************************************************
-**************
207 */
208 char SJATestRstMode(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -