📄 can_funs.lst
字号:
C51 COMPILER V8.09 CAN_FUNS 03/13/2008 06:00:58 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE CAN_FUNS
OBJECT MODULE PLACED IN CAN_funs.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE CAN_funs.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_defs.h"
5 #include "sja1000.h"
6
7 #include "CAN_defs.h"
8
9 void CAN_Reset( )
10 {
11 1 SJAReset( );
12 1 }
13
14 ubyte CAN_ReadReg( ubyte addr )
15 {
16 1 return rbyte( addr );
17 1 }
18
19 ubyte CAN_WriteReg( ubyte addr, ubyte dat )
20 {
21 1 wbyte( addr, dat );
22 1 return 0;
23 1 }
24
25 ubyte CAN_Open( _t_can_status * s )
26 {
27 1 CAN_WriteReg( SJA1000_MOD, s->mod );
28 1 CAN_WriteReg( SJA1000_IER, s->ier );
29 1 return 0;
30 1 // return CAN_WriteReg( SJA1000_MOD, 0 );
31 1 }
32 ubyte CAN_Close( )
33 {
34 1 return CAN_WriteReg( SJA1000_MOD, SJA1000_MOD_RM );
35 1 }
36
37 ubyte CAN_Init( _t_can_status * s )
38 {
39 1 CAN_Reset( );
40 1 CAN_Close( );
41 1
42 1 CAN_WriteReg( SJA1000_BTR0, s->btr0 );
43 1 CAN_WriteReg( SJA1000_BTR1, s->btr1 );
44 1
45 1 CAN_WriteReg( SJA1000_CDR, s->cdr );
46 1
47 1 CAN_WriteReg( SJA1000_ACR_BEGIN, s->acr0 ); //( ( s->cobid )>>3 ) & 0xff );
48 1 CAN_WriteReg( SJA1000_ACR_BEGIN+1, s->acr1 ); //( ( s->cobid )<<5 ) & 0xe0 );
49 1 CAN_WriteReg( SJA1000_ACR_BEGIN+2, s->acr2 ); //( ( s->cobid )>>3 ) & 0xff );
50 1 CAN_WriteReg( SJA1000_ACR_BEGIN+3, s->acr3 ); //( ( s->cobid )<<5 ) & 0xe0 );
51 1
52 1
53 1 CAN_WriteReg( SJA1000_AMR_BEGIN, s->amr0 ); //0xf0 );
54 1 CAN_WriteReg( SJA1000_AMR_BEGIN+1, s->amr1 ); //0x1f );
55 1 CAN_WriteReg( SJA1000_AMR_BEGIN+2, s->amr2 ); //0x1f );
C51 COMPILER V8.09 CAN_FUNS 03/13/2008 06:00:58 PAGE 2
56 1 CAN_WriteReg( SJA1000_AMR_BEGIN+3, s->amr3 ); //0xff );
57 1
58 1 CAN_WriteReg( SJA1000_OCR, s->ocr );
59 1
60 1 return 0;
61 1 }
62
63 ubyte CAN_Receive( _t_can_frame * s )
64 {
65 1 ubyte rxfi, rxid1, rxid2, i;
66 1
67 1 rxfi = CAN_ReadReg( SJA1000_RX_FI );
68 1 rxid1 = CAN_ReadReg( SJA1000_SFF_RX_ID_BEGIN );
69 1 rxid2 = CAN_ReadReg( SJA1000_SFF_RX_ID_END );
70 1
71 1 s->cobid = ((uint)rxid1) << 3 | ( ( rxid2 >> 5 ) & 0x07 );
72 1 s->rtr = ( rxfi>>6 ) & 1;
73 1
74 1 rxfi = rxfi & 0x0f;
75 1 s->dlc = rxfi;
76 1
77 1 for ( i = 0; i < rxfi; i++ )
78 1 {
79 2 s->dat[i] = CAN_ReadReg( SJA1000_SFF_RX_DATA_BEGIN + i );
80 2 }
81 1
82 1 CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB );//^= SJA1000_IR_RI;
83 1 return 0;
84 1 }
85
86 ubyte CAN_Transmit( _t_can_frame * s )
87 {
88 1 ubyte dlc, i;
89 1
90 1 dlc = s->dlc;
91 1
92 1 CAN_WriteReg( SJA1000_TX_FI, ( s->rtr<<6 )|dlc );
93 1 //CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB|SJA1000_CMR_CDO );//SJA1000_CMR_TR;
94 1
95 1 CAN_WriteReg( SJA1000_SFF_TX_ID_BEGIN, ( ( s->cobid )>>3 ) & 0xff );
96 1 CAN_WriteReg( SJA1000_SFF_TX_ID_END, ( ( s->cobid )<<5 ) & 0xe0 );
97 1
98 1 for ( i = 0; i < dlc; i++ )
99 1 {
100 2 CAN_WriteReg( SJA1000_SFF_TX_DATA_BEGIN + i, s->dat[i] );
101 2 }
102 1
103 1 CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_TR );
104 1 return 0;
105 1
106 1 }
107
108
109
110 /*ubyte CAN_Receive( _t_can_frame * s )
111 {
112 ubyte t0, t1, t2;
113 t0 = CAN_ReadReg( SJA1000_RX_FI );
114 t1 = CAN_ReadReg( SJA1000_SFF_RX_ID_BEGIN );
115 t2 = CAN_ReadReg( SJA1000_SFF_RX_ID_END );
116 s->fc = t1>>4;
117 s->nid = ( t1<<3|t2>>5 ) & 0x7f;
C51 COMPILER V8.09 CAN_FUNS 03/13/2008 06:00:58 PAGE 3
118 s->rtr = ( t0>>6 ) & 1;
119 t0 = t0 & 0x0f;
120 s->dlc = t0;
121
122 for ( t1 = 0; t1 < t0; t1++ )
123 {
124 s->dat[t1] = CAN_ReadReg( SJA1000_SFF_RX_DATA_BEGIN+t1 );
125 }
126
127 CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB );//^= SJA1000_IR_RI;
128 return 0;
129 }
130
131 ubyte CAN_Transmit( _t_can_frame * s )
132 {
133 ubyte dlc, i;
134
135 dlc = s->dlc;
136
137 CAN_WriteReg( SJA1000_TX_FI, ( s->rtr<<6 )|dlc );
138 CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB|SJA1000_CMR_CDO );//SJA1000_CMR_TR;
139
140 CAN_WriteReg( SJA1000_SFF_TX_ID_BEGIN, ( s->fc<<4 )|( s->nid>>3 ) );
141 CAN_WriteReg( SJA1000_SFF_TX_ID_END, ( s->nid<<5 ) );
142
143 for ( i = 0; i < dlc; i++ )
144 {
145 CAN_WriteReg( SJA1000_SFF_TX_DATA_BEGIN + i, s->dat[i] );
146 }
147
148 CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_TR );
149 return 0;
150
151 }*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 567 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -