MCP2515 Interrupt beim Empfang löschen

Gast #2122976
Lesenswert?

Hallo!
Es geht um den MCP2515.
Der Empfang funktioniert.
Wenn die Daten im Buffer ankommen wird ein Interrupt ausgelöst.
Leider bleibt er auch erhalten.
Wie muss ich den Löschen?
Laut Datenblatt, wenn ich das richtig verstanden habe, passt alles.
Caninte , &B00000011 (interrupt für Buffer 0/1 beim Empfang)
Canintf , &B00000000 (interrupt "nicht anhaltend")

dazu Datenblatt: 
http://ww1.microchip.com/downloads/en/DeviceDoc/21801d.pdf
Seite 50, 51.

Was mache ich falsch?

Danke

Grüsse Alex
Gast #2123177
Lesenswert?

Kann das jemand "übersetzen"?
Schreibe in Basic.
So wie ich das verstehe heisst das
Wenn der bit 6 von CANINTF gesetzt ist, dass schreibe
ind register CANINTF, maske 1<<RX0IF (keine Ahnung was das heisst), 
00000000
oder so.

Also, BITTE, etwas verständlicher, wenn es geht.

Danke schön
Gruüsse Alex
Gast #2123416
Lesenswert?

Nur so als Hinweis,

dieser Controler setzt des Interruptflag selbstständig zurück, wenn er 
mit den Read RX Buffer Instruction ausgelesen wird.

SPI-Commando 0x61,0x66,0x71,0x76.

Wenn nach dem Auslesen immer noch der Interruptpin gesetzt ist, dann 
liegt ein anderer Interrupt vor. Man kommt dann um das Herausfinden der 
Interruptquelle nicht herum.
Angehängte Dateien:
Gast #2123961
Lesenswert?

Also, das CANINTF sagt Dir mit den Bits B0 und B1 welches Message Object 
gefüllt ist.

Wenn Du im CANINTE nur Bit 0 und Bit 1 gesetzt hast, frage ich mich, wie 
Du die CAN-Daten liest.

Liest Du der Reihe nach über
0x03 -> Register lesen
0x36 -> RX0 Data 0
0x37 -> RX0 Data 1
0x38 -> RX0 Data 2
. . .

aus? Dann mußt Du das CANINTF-Register mit 0x03 separat löschen.

Wenn Du mit dem 1-Byte-Lesekommando 0x90 und dann anschließend 13 X eine 
Null sendest, dann erhält Du die CAN-ID, DLC und die 8 Datenbyte, ohne 
jedes mal die Registeradresse explizit angeben zu müssen. Und weil über 
die 0x90 klar ist, das die RXB0 gemeint ist, löscht der MCP automatisch 
die INT-Leitung. Man kann auch separat für RXB0 und RXB1 eine 
Interuptleitung benutzen.

BFPCTRL - RXnBF PIN CONTROL AND STATUS (ADDRESS: 0Ch) -> Hierüber werden 
die Messagebox-selektierenden Leitungen aktiviert.

Ich hoffe, dass Dir das weiter hilft

Viel Erfolg
Gast #2126527
Lesenswert?

>Liest Du der Reihe nach über
>0x03 -> Register lesen
>0x36 -> RX0 Data 0
>0x37 -> RX0 Data 1
>0x38 -> RX0 Data 2
>. . .
>aus?

ja, so lese ich dann die Register aus

>Dann mußt Du das CANINTF-Register mit 0x03 separat löschen.
die Frage ist wo und wie?

Das ist mein Programm:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
$hwstack = 40
4
$swstack = 80
5
$framesize = 90
6
$baud = 9600
7

8

9

10
 Config Portd.0 = Output
11
 Config Portd.1 = Output
12
 Config Portd.3 = Output
13
 Config Portd.5 = Output
14
 Config Portd.6 = Output
15
 Config Portd.7 = Output
16
 Config Portb.0 = Output
17
 Config Portb.1 = Output
18
 Config Portb.2 = Output
19
 Config Portc.0 = Output
20
 Config Portc.1 = Output
21
 Config Portc.2 = Output
22
 Config Portc.3 = Output
23
 Config Portc.4 = Output
24
 Config Portc.5 = Output
25

26

27
 Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
28
 Spiinit
29

30

31

32

33
 Config Pind.2 = Input                                      'MCP Interrupt MCP2515 /INT
34
 Css Alias Portd.4
35
 Config Css = Output
36
 Set Css
37
 Wait 1
38

39

40
Config Int0 = Falling                                       'INT MCP ist low aktiv
41
On Int0 Int_mcp                                             'Wenn INT, dann Routine INT_mcp aufrufen
42
Enable Int0                                                 'INT0 einschalten
43
Enable Interrupts
44

45

46
 Declare Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
47
 Declare Sub Mcp2515_read_register(byval Adress As Byte )
48
 Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
49

50

51
 Dim Mcphilf As Byte
52
 Dim Canin As Byte
53

54

55

56
 Const Spi_reset = &HC0
57
 Const Spi_write = &H02
58
 Const Spi_read = &H03
59
 Const Spi_rts0 = &H81
60
 Const Spi_rts1 = &H82
61
 Const Spi_rts2 = &H84
62
 Const Spi_read_status = &HA0
63
 Const Spi_bit_modify = &H05
64

65
 Const Rxb0ctrl = &H60
66
 Const Rxb1ctrl = &H70
67

68
 Const Rxm0sidh = &H20
69
 Const Rxm0sidl = &H21
70
 Const Rxm1sidh = &H24
71
 Const Rxm1sidl = &H25
72

73
 Const Rxf0sidh = &H00
74
 Const Rxf0sidl = &H01
75
 Const Rxf1sidh = &H04
76
 Const Rxf1sidl = &H05
77

78
Const Rxb0d0 = &H66                                         'Receive Buffer 0 Data Byte 0
79
Const Rxb0d1 = &H67                                         'Receive Buffer 0 Data Byte 1
80
Const Rxb0d2 = &H68                                         'Receive Buffer 0 Data Byte 2
81
Const Rxb0d3 = &H69                                         'Receive Buffer 0 Data Byte 3
82
Const Rxb0d4 = &H6A                                         'Receive Buffer 0 Data Byte 4
83
Const Rxb0d5 = &H6B                                         'Receive Buffer 0 Data Byte 5
84
Const Rxb0d6 = &H6C                                         'Receive Buffer 0 Data Byte 6
85
Const Rxb0d7 = &H6D                                         'Receive Buffer 0 Data Byte 7
86

87

88
 Const Bfpctrl = &H0C
89
 Const Txrtsctrl = &H0D
90
 Const Canctrl = &H0F
91

92
 Const Txb0ctrl = &H30                                      ' Transmit Buffer 0 Control Register
93
 Const Txb0sidh = &H31                                      ' Transmit Buffer 0 Std Identifier High
94
 Const Txb0sidl = &H32                                      ' Transmit Buffer 0 Std Identifier Low
95
 Const Txb0dlc = &H35                                       ' Transmit Buffer 0 Data Length Code
96
 Const Txb0d0 = &H36                                        ' Transmit Buffer 0 Data Byte 0
97
 Const Txb0d1 = &H37                                        ' Transmit Buffer 0 Data Byte 1
98
 Const Txb0d2 = &H38                                        ' Transmit Buffer 0 Data Byte 2
99
 Const Txb0d3 = &H39                                        ' Transmit Buffer 0 Data Byte 3
100
 Const Txb0d4 = &H3A                                        ' Transmit Buffer 0 Data Byte 4
101
 Const Txb0d5 = &H3B                                        ' Transmit Buffer 0 Data Byte 5
102
 Const Txb0d6 = &H3C                                        ' Transmit Buffer 0 Data Byte 6
103
 Const Txb0d7 = &H3D                                        ' Transmit Buffer 0 Data Byte 7
104

105
 Const Txb1ctrl = &H40                                      ' Transmit Buffer 1 Control Register
106
 Const Txb1sidh = &H41                                      ' Transmit Buffer 1 Std Identifier High
107
 Const Txb1sidl = &H42                                      ' Transmit Buffer 1 Std Identifier Low
108
 Const Txb1dlc = &H45                                       ' Transmit Buffer 1 Data Length Code
109
 Const Txb1d0 = &H46                                        ' Transmit Buffer 1 Data Byte 0
110
 Const Txb1d1 = &H47                                        ' Transmit Buffer 1 Data Byte 1
111
 Const Txb1d2 = &H48                                        ' Transmit Buffer 1 Data Byte 2
112
 Const Txb1d3 = &H49                                        ' Transmit Buffer 1 Data Byte 3
113
 Const Txb1d4 = &H4A                                        ' Transmit Buffer 1 Data Byte 4
114
 Const Txb1d5 = &H4B                                        ' Transmit Buffer 1 Data Byte 5
115
 Const Txb1d6 = &H4C                                        ' Transmit Buffer 1 Data Byte 6
116
 Const Txb1d7 = &H4D                                        ' Transmit Buffer 1 Data Byte 7
117

118
 Const Txb2ctrl = &H50                                      ' Transmit Buffer 2 Control Register
119
 Const Txb2sidh = &H51                                      ' Transmit Buffer 2 Std Identifier High
120
 Const Txb2sidl = &H52                                      ' Transmit Buffer 2 Std Identifier Low
121
 Const Txb2dlc = &H55                                       ' Transmit Buffer 2 Data Length Code
122
 Const Txb2d0 = &H56                                        ' Transmit Buffer 2 Data Byte 0
123
 Const Txb2d1 = &H57                                        ' Transmit Buffer 2 Data Byte 1
124
 Const Txb2d2 = &H58                                        ' Transmit Buffer 2 Data Byte 2
125
 Const Txb2d3 = &H59                                        ' Transmit Buffer 2 Data Byte 3
126
 Const Txb2d4 = &H5A                                        ' Transmit Buffer 2 Data Byte 4
127
 Const Txb2d5 = &H5B                                        ' Transmit Buffer 2 Data Byte 5
128
 Const Txb2d6 = &H5C                                        ' Transmit Buffer 2 Data Byte 6
129
 Const Txb2d7 = &H5D                                        ' Transmit Buffer 2 Data Byte 7
130

131
 Const Rxb0sidh = &H61
132
 Const Rxb0sidl = &H62
133
 Const Rxb0dlc = &H65
134
 Const Rxb1sidh = &H71
135
 Const Rxb1sidl = &H72
136
 Const Rxb1dlc = &H75
137

138
 Const Cnf1 = &H2A
139
 Const Cnf2 = &H29
140
 Const Cnf3 = &H28
141
 Const Caninte = &H2B
142
 Const Canintf = &H2C
143

144

145

146

147

148

149

150
 Mcp2515_init:
151

152
 Mcphilf = Spi_reset
153
 Reset Css
154
   Waitus 10
155
   Spdr = Mcphilf
156
   Do
157
   Loop Until Spsr.spif = 1
158
   Waitus 10
159
 Set Css
160

161
 Mcp2515_write_register Cnf1 , &H03
162
 Mcp2515_write_register Cnf2 , &HBA
163
 Mcp2515_write_register Cnf3 , &H07
164

165

166
'Interrupt einstellen
167
 Mcp2515_write_register Caninte , &B00000011
168
 Mcp2515_write_register Canintf , &B00000000
169
 Mcp2515_write_register Rxb0ctrl , &B01100000
170
 Mcp2515_write_register Rxb1ctrl , &B01100000
171

172

173
 Mcp2515_write_register Rxm0sidh , &B00000000
174
 Mcp2515_write_register Rxm0sidl , &B00000000
175
 Mcp2515_write_register Rxm1sidh , &B00000000
176
 Mcp2515_write_register Rxm1sidl , &B00000000
177

178
'Filter
179

180
 Mcp2515_write_register Rxf0sidh , &B00000000
181
 Mcp2515_write_register Rxf0sidl , &B00000000
182
 Mcp2515_write_register Rxf1sidh , &B00000000
183
 Mcp2515_write_register Rxf1sidl , &B00000000
184

185

186
 Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000        '???
187

188
Do
189
Waitms 10
190
Loop
191

192
End
193

194

195

196
Int_mcp:
197
Gosub Lesen
198
Return
199

200

201
Lesen:
202
Mcp2515_read_register Rxb0d0
203
Print "Daten Eingang:" ; Canin
204
Mcp2515_read_register Rxb0d1
205
Print "Daten Eingang:" ; Canin
206

207
'hier muss jetzt was hin, damit der Int. vom MCP geloescht wird!!!
208
Return
209

210

211

212

213

214

215
'schreiben
216

217
 Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
218
 Mcphilf = Spi_write
219
 Reset Css
220
 Spdr = Mcphilf
221
 Do
222
 Loop Until Spsr.spif = 1
223
 Waitms 2
224
 Spdr = Adress
225
 Do
226
 Loop Until Spsr.spif = 1
227
 Spdr = Daten
228
 Do
229
 Loop Until Spsr.spif = 1
230
 Set Css
231
 End Sub
232

233

234

235
'lesen
236

237
 Sub Mcp2515_read_register(byval Adress As Byte )
238
 Mcphilf = Spi_read
239
 Reset Css
240
 Spdr = Mcphilf
241
 Do
242
 Loop Until Spsr.spif = 1
243
 Waitms 2
244
 Spdr = Adress
245
 Do
246
 Loop Until Spsr.spif = 1
247
 Spdr = 0
248
 Do
249
 Loop Until Spsr.spif = 1
250
 Canin = Spdr
251
 Set Css
252
 End Sub
253

254

255
'bitmodify
256

257
Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
258

259
   Reset Css
260
   Mcphilf = Spi_bit_modify
261
   Spdr = Mcphilf
262
   Do
263
   Loop Until Spsr.spif = 1
264
   Waitms 2
265
   Spdr = Reg_add
266
   Do
267
   Loop Until Spsr.spif = 1
268
   Spdr = Reg_mask
269
   Do
270
   Loop Until Spsr.spif = 1
271
   Spdr = Reg_val
272
   Do
273
   Loop Until Spsr.spif = 1
274
   Set Css
275

276
End Sub

danke
Gruss Alex
Gast #2128304
Lesenswert?

So, nachdem ich das Problem mit dem Filter geklärt habe, ist mir nur 
noch der Interrupt im Weg zum Ziel.

Warum bleibt er erhalten?
Hier der Aktuelle code:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
$hwstack = 40
4
$swstack = 80
5
$framesize = 90
6
$baud = 9600
7

8

9
 Config Portd.0 = Output
10
 Config Portd.1 = Output
11
 Config Portd.3 = Output
12
 Config Portd.5 = Output
13
 Config Portd.6 = Output
14
 Config Portd.7 = Output
15
 Config Portb.0 = Output
16
 Config Portb.1 = Output
17
 Config Portb.2 = Output
18
 Config Portc.0 = Output
19
 Config Portc.1 = Output
20
 Config Portc.2 = Output
21
 Config Portc.3 = Output
22
 Config Portc.4 = Output
23
 Config Portc.5 = Output
24

25

26
 Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
27
 Spiinit
28

29

30
 Config Pind.2 = Input                                      'MCP Interrupt MCP2515 /INT
31
 Css Alias Portd.4
32
 Config Css = Output
33
 Set Css
34
 Wait 1
35

36

37
Config Int0 = Falling                                       'INT MCP ist low aktiv
38
On Int0 Int_mcp                                             'Wenn INT, dann Routine INT_mcp aufrufen
39
Enable Int0                                                 'INT0 einschalten
40
Enable Interrupts
41

42

43
 Declare Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
44
 Declare Sub Mcp2515_read_register(byval Adress As Byte )
45
 Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
46

47

48
 Dim Mcphilf As Byte
49
 Dim Canin As Byte
50

51

52

53
 Const Spi_reset = &HC0
54
 Const Spi_write = &H02
55
 Const Spi_read = &H03
56
 Const Spi_rts0 = &H81
57
 Const Spi_rts1 = &H82
58
 Const Spi_rts2 = &H84
59
 Const Spi_read_status = &HA0
60
 Const Spi_bit_modify = &H05
61

62
 Const Rxb0ctrl = &H60
63
 Const Rxb1ctrl = &H70
64

65
 Const Rxm0sidh = &H20
66
 Const Rxm0sidl = &H21
67
 Const Rxm1sidh = &H24
68
 Const Rxm1sidl = &H25
69

70
 Const Rxf0sidh = &H00
71
 Const Rxf0sidl = &H01
72
 Const Rxf1sidh = &H04
73
 Const Rxf1sidl = &H05
74

75
Const Rxb0d0 = &H66                                         'Receive Buffer 0 Data Byte 0
76
Const Rxb0d1 = &H67                                         'Receive Buffer 0 Data Byte 1
77
Const Rxb0d2 = &H68                                         'Receive Buffer 0 Data Byte 2
78
Const Rxb0d3 = &H69                                         'Receive Buffer 0 Data Byte 3
79
Const Rxb0d4 = &H6A                                         'Receive Buffer 0 Data Byte 4
80
Const Rxb0d5 = &H6B                                         'Receive Buffer 0 Data Byte 5
81
Const Rxb0d6 = &H6C                                         'Receive Buffer 0 Data Byte 6
82
Const Rxb0d7 = &H6D                                         'Receive Buffer 0 Data Byte 7
83

84

85
 Const Bfpctrl = &H0C
86
 Const Txrtsctrl = &H0D
87
 Const Canctrl = &H0F
88

89
 Const Txb0ctrl = &H30                                      ' Transmit Buffer 0 Control Register
90
 Const Txb0sidh = &H31                                      ' Transmit Buffer 0 Std Identifier High
91
 Const Txb0sidl = &H32                                      ' Transmit Buffer 0 Std Identifier Low
92
 Const Txb0dlc = &H35                                       ' Transmit Buffer 0 Data Length Code
93
 Const Txb0d0 = &H36                                        ' Transmit Buffer 0 Data Byte 0
94
 Const Txb0d1 = &H37                                        ' Transmit Buffer 0 Data Byte 1
95
 Const Txb0d2 = &H38                                        ' Transmit Buffer 0 Data Byte 2
96
 Const Txb0d3 = &H39                                        ' Transmit Buffer 0 Data Byte 3
97
 Const Txb0d4 = &H3A                                        ' Transmit Buffer 0 Data Byte 4
98
 Const Txb0d5 = &H3B                                        ' Transmit Buffer 0 Data Byte 5
99
 Const Txb0d6 = &H3C                                        ' Transmit Buffer 0 Data Byte 6
100
 Const Txb0d7 = &H3D                                        ' Transmit Buffer 0 Data Byte 7
101

102
 Const Txb1ctrl = &H40                                      ' Transmit Buffer 1 Control Register
103
 Const Txb1sidh = &H41                                      ' Transmit Buffer 1 Std Identifier High
104
 Const Txb1sidl = &H42                                      ' Transmit Buffer 1 Std Identifier Low
105
 Const Txb1dlc = &H45                                       ' Transmit Buffer 1 Data Length Code
106
 Const Txb1d0 = &H46                                        ' Transmit Buffer 1 Data Byte 0
107
 Const Txb1d1 = &H47                                        ' Transmit Buffer 1 Data Byte 1
108
 Const Txb1d2 = &H48                                        ' Transmit Buffer 1 Data Byte 2
109
 Const Txb1d3 = &H49                                        ' Transmit Buffer 1 Data Byte 3
110
 Const Txb1d4 = &H4A                                        ' Transmit Buffer 1 Data Byte 4
111
 Const Txb1d5 = &H4B                                        ' Transmit Buffer 1 Data Byte 5
112
 Const Txb1d6 = &H4C                                        ' Transmit Buffer 1 Data Byte 6
113
 Const Txb1d7 = &H4D                                        ' Transmit Buffer 1 Data Byte 7
114

115
 Const Txb2ctrl = &H50                                      ' Transmit Buffer 2 Control Register
116
 Const Txb2sidh = &H51                                      ' Transmit Buffer 2 Std Identifier High
117
 Const Txb2sidl = &H52                                      ' Transmit Buffer 2 Std Identifier Low
118
 Const Txb2dlc = &H55                                       ' Transmit Buffer 2 Data Length Code
119
 Const Txb2d0 = &H56                                        ' Transmit Buffer 2 Data Byte 0
120
 Const Txb2d1 = &H57                                        ' Transmit Buffer 2 Data Byte 1
121
 Const Txb2d2 = &H58                                        ' Transmit Buffer 2 Data Byte 2
122
 Const Txb2d3 = &H59                                        ' Transmit Buffer 2 Data Byte 3
123
 Const Txb2d4 = &H5A                                        ' Transmit Buffer 2 Data Byte 4
124
 Const Txb2d5 = &H5B                                        ' Transmit Buffer 2 Data Byte 5
125
 Const Txb2d6 = &H5C                                        ' Transmit Buffer 2 Data Byte 6
126
 Const Txb2d7 = &H5D                                        ' Transmit Buffer 2 Data Byte 7
127

128
 Const Rxb0sidh = &H61
129
 Const Rxb0sidl = &H62
130
 Const Rxb0dlc = &H65
131
 Const Rxb1sidh = &H71
132
 Const Rxb1sidl = &H72
133
 Const Rxb1dlc = &H75
134

135
 Const Cnf1 = &H2A
136
 Const Cnf2 = &H29
137
 Const Cnf3 = &H28
138
 Const Caninte = &H2B
139
 Const Canintf = &H2C
140

141

142

143
 Mcp2515_init:
144

145
'mcp2515 reset
146
 Mcphilf = Spi_reset
147
 Reset Css
148
   Waitus 10
149
   Spdr = Mcphilf
150
   Do
151
   Loop Until Spsr.spif = 1
152
   Waitus 10
153
 Set Css
154

155
 Mcp2515_write_register Cnf1 , &H03
156
 Mcp2515_write_register Cnf2 , &HBA
157
 Mcp2515_write_register Cnf3 , &H07
158

159

160
'Interrupt einstellen
161
 Mcp2515_write_register Caninte , &B00000001                'Interrupt auslosen, wenn Nachricht in buffer 0 liegt
162
 Mcp2515_write_register Canintf , &B00000000                'No interrupt pending
163
 Mcp2515_write_register Rxb0ctrl , &B00100000               'Empfange nur durch filter eingestelle Standart ID, Acceptance Filter 0 (RXB0)
164

165

166
'Maske
167
 Mcp2515_write_register Rxm0sidh , &B11111111               'Maske  High
168
 Mcp2515_write_register Rxm0sidl , &B11100000               'Maske  Low
169

170

171
'Filter
172

173
 Mcp2515_write_register Rxf0sidh , &B10111000               'Filter High
174
 Mcp2515_write_register Rxf0sidl , &B01100000               'Filter Low , bit 3 EXIDE Filter fuer Standert Frame
175

176

177

178
 Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000        '???
179

180
Do
181
Waitms 10
182
Loop
183

184
End
185

186

187

188
Int_mcp:
189
Gosub Lesen
190
Return
191

192

193
Lesen:
194
Mcp2515_read_register Rxb0d0
195
Print "Daten Eingang:" ; Canin
196
Mcp2515_read_register Rxb0d1
197
Print "Daten Eingang:" ; Canin
198

199
'hier muss jetzt was hin, damit der Int. vom MCP geloescht wird!!!
200
Return
201

202

203

204

205
'schreiben
206

207
 Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
208
 Mcphilf = Spi_write
209
 Reset Css
210
 Spdr = Mcphilf
211
 Do
212
 Loop Until Spsr.spif = 1
213
 Waitms 2
214
 Spdr = Adress
215
 Do
216
 Loop Until Spsr.spif = 1
217
 Spdr = Daten
218
 Do
219
 Loop Until Spsr.spif = 1
220
 Set Css
221
 End Sub
222

223

224

225
'lesen
226

227
 Sub Mcp2515_read_register(byval Adress As Byte )
228
 Mcphilf = Spi_read
229
 Reset Css
230
 Spdr = Mcphilf
231
 Do
232
 Loop Until Spsr.spif = 1
233
 Waitms 2
234
 Spdr = Adress
235
 Do
236
 Loop Until Spsr.spif = 1
237
 Spdr = 0
238
 Do
239
 Loop Until Spsr.spif = 1
240
 Canin = Spdr
241
 Set Css
242
 End Sub
243

244

245
'bitmodify
246

247
Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
248

249
   Reset Css
250
   Mcphilf = Spi_bit_modify
251
   Spdr = Mcphilf
252
   Do
253
   Loop Until Spsr.spif = 1
254
   Waitms 2
255
   Spdr = Reg_add
256
   Do
257
   Loop Until Spsr.spif = 1
258
   Spdr = Reg_mask
259
   Do
260
   Loop Until Spsr.spif = 1
261
   Spdr = Reg_val
262
   Do
263
   Loop Until Spsr.spif = 1
264
   Set Css
265

266
End Sub

Hat Jemand eine Idee?
Gruss Alex
Gast #2128625
Lesenswert?

So, auch das hat geklappt.
Die Zeile:
Mcp2515_write_register Canintf , &B00000000      'No interrupt pending
muss nach dem Auslesen des Buffers stehen, und nicht bei der 
Initializierung.

Es sind aber noch einige Frage dazu gekommen.
1. In ein Buffer z.B. RXB0 passen ja 8 bytes an Daten.
   2 Bytes schicke ich nur.
   Die Empfange ich auch an Rxb0d0 und Rxb0d1. Das ist alles richtig.
   Wenn ich aber noch Rxb0d3 auslesen, wo ich eigentlich nichts hin
   schicke, bekomme ich da nur Müll aus gelesen. Warum ist das so?
   Müssen da nicht Nullen rauskommen? Ich meine der Buffer ist ja dann
   leer.
2. Ich habe die Can-Geschwindigkeit über CNF1-3 auf 1000kbps 
eingestellt.
   Aber ich kann AUCH die Nachrichten mit 100kbps empfangen. Warum?

Danke
Gruss Alex

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren