|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
can通信配置can.c2 u x+ [, q& Y, Z$ M
#include “can.h”
) k3 W/ z# x; wlong int i;
+ B6 @, c3 O6 D" d, v8 }long loopcount = 0;
) K: b. L$ a( o0 o7 mvoid Ecan_Config(void)
- ]5 i* i' e( e1 M{
7 r* }8 q8 q4 F0 ]6 x+ ^& Q$ Fstruct ECAN_REGS ECanaShadow;
0 P; `) F2 u+ t; m9 f5 F$ ostruct ECAN_REGS ECanbShadow;
1 ~! d: R& {, q- R! M. S// Step 5. User specific code:
6 B/ @. `* n. n- L4 E4 ]9 t" G& M* g+ `7 G
/* Write to the MSGID field */
2 `+ ]' \( c+ o4 h
+ q1 C L- f; Z6 K$ p9 nECanaMboxes.MBOX0.MSGID.all = 0x95555555; // Extended Identifier
$ y" N ]: b: M' V$ L1 g0 RECanaMboxes.MBOX15.MSGID.all = 0x95555555; // Extended Identifier3 L% E, b, p7 q* t! h( n& P! z& I
ECanbMboxes.MBOX25.MSGID.all = 0x95555555; // Extended Identifier
' {& e& c. A" S& L& n/ [2 M7 L5 \5 x9 Z+ cECanbMboxes.MBOX0.MSGID.all = 0x95555555; // Extended Identifier$ Y7 l$ M9 S3 W
" B6 [1 B$ G9 C8 h. L/ U' O% R' U/* 配置CANA 邮箱0为发送邮箱 */
g# [8 t* i3 i5 | p; gECanaShadow.CANMD.all =ECanaRegs.CANMD.all;- a# P3 }3 s6 O8 b8 m$ A9 M/ A5 \1 S
ECanaShadow.CANMD.bit.MD0 = 0;
. W9 ~* Y3 W1 RECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
- ]# R. j' }% c, b" X! Y
* b' s* D/ w% X6 K//配置CANB 邮箱25为接受邮箱
/ A( ^1 P1 I& f0 Z! \ECanbShadow.CANMD.all = ECanbRegs.CANMD.all;
. F# V t) ]5 D# [/ XECanbShadow.CANMD.bit.MD25 = 1;
$ K: ` ?& w& tECanbRegs.CANMD.all = ECanbShadow.CANMD.all;
) f: U7 N6 c5 z; p" b" m- w8 |6 l* [$ R6 k7 C3 E# ~7 `& G* b8 t0 h1 e4 B
//配置CANA 邮箱0使能2 H" j6 n: f) h
ECanaShadow.CANME.all = ECanaRegs.CANME.all;
8 \( V- U+ g O) z: I( hECanaShadow.CANME.bit.ME0 = 1;5 ^ X% V. i9 d: B2 f; d7 _8 U
ECanaRegs.CANME.all = ECanaShadow.CANME.all;( u1 Q3 s6 s% d3 ^4 O) S) T
! i! X# o1 B2 h1 D6 x* K//配置CANB 邮箱25使能4 l O( U/ X/ R0 A
ECanbShadow.CANME.all = ECanbRegs.CANME.all;) K% r9 H0 @4 @$ i! Z/ x$ |
ECanbShadow.CANME.bit.ME25 = 1;" D/ o( n' m; P5 B& L8 U9 R" h
ECanbRegs.CANME.all = ECanbShadow.CANME.all;9 d+ Z* t3 L' Y9 x% z+ z; O
% K/ t T8 S+ x- [2 m4 Z/* Write to DLC field in Master Control reg */) L, x5 M' }% f9 r
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
4 s P6 O5 [+ Z- `4 c7 h8 U5 {ECanbMboxes.MBOX25.MSGCTRL.bit.DLC = 8;- P# T5 U! s% X' [% x) Q( n ~
$ d+ w5 B" i- Y0 H//CANA 邮箱0发送信息
W6 m* p2 L3 kECanaMboxes.MBOX0.MDL.all = 0x12345678;8 K# u" `$ Q; J
ECanaMboxes.MBOX0.MDH.all = 0x87654321;
4 j2 F# I8 u$ o m: a0 t
6 [8 A& H/ n/ S; u// ECanbMboxes.MBOX25.MDL.all = 0x12345678;
/ I# n6 {. J! ^2 q5 n// ECanbMboxes.MBOX25.MDH.all = 0x87654321;
7 e( ^. g; f+ m//# L4 ~4 Q& d4 v- V3 i
// //配置为自检模式,实验现象表明可以正常发送数据
. a2 V0 R X& T+ d// EALLOW;8 i. P" }# R) Y4 u; O, f$ P
// ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;4 E+ }$ T$ ^! v: ?) J
// ECanaShadow.CANMC.bit.STM = 1; // Configure CAN for self-test mode& F0 f* d1 |% M7 K! m5 K* f
// ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; c9 C2 I& f( H0 T m
// EDIS;# C2 S: T: r# D" C; `% A- ?
4 i. m1 R& H6 |8 ]/ J& @: ofor( i=0; i < 1000; i++)
, n9 S* Z8 z: r" s{: P/ E5 h; ?+ `" ]; L
ECanaShadow.CANTRS.all = 0;7 B1 c! e+ M: j: @! r5 p! T+ X
ECanaShadow.CANTRS.bit.TRS0 = 1; // Set TRS for mailbox under test) C6 ~; r5 d$ [4 _: ~" @- @. ^5 ]+ T3 p
ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;1 h; A4 Z# M6 r4 u" H
//单步运行卡在此处,需检查CAN总线是否挂载另一个节点,GPIO配置,CANA,CANB配置等问题
4 e: J! |! O. {7 T1 Mdo
/ [7 O& ~% D4 j! ^. K. T/ a{! o9 r) O1 u1 ^3 D- w
ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
6 U& }( c; ^- `2 z' k0 |} while(ECanaShadow.CANTA.bit.TA0 == 0 ); // Wait for TA5 bit to be set…
% s0 ?/ @4 b) Y8 M+ W$ y8 A9 @3 G; ?& A- E, D
ECanaShadow.CANTA.all = 0;
5 t5 b' J4 ^7 X- U6 P5 H# } ECanaShadow.CANTA.bit.TA0 = 1; // Clear TA56 o6 P. s+ u5 z
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;9 o3 n8 S7 Z# W, I) W, f: e
3 w' |+ n4 z8 J! A* M8 \ b! \* b c loopcount ++;' q Y/ r7 c' I; U7 A
}
! w1 T! c, N3 \. Y ECanaShadow.CANTA.all = 0;
! x! C, S% m9 b5 K3 t" I+ u ECanaShadow.CANTA.bit.TA0 = 1; // Clear TA5
# P# H/ y7 u, s U ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
( e" I& V* D) W2 N5 d, K
) \+ l9 ?. t1 Y7 b# Y/ f loopcount ++; B* r( c) @' J+ z) Z' |' i
}9 A: v4 M' h5 Q, W
9 d% t0 _! d2 m1 R- B9 \' B
}4 I K: l( D+ f2 ^8 u
, c0 L- R8 ~( |0 e; J# ^
CAN通信的can.h文件
5 X3 w' ~0 a; K3 d6 N6 ?/ q, Y0 y/ z#ifndef CAN_H
9 G) b) Z3 |( k+ B6 x7 G% _#define CAN_H
; g8 W6 b7 m+ G$ w+ }0 d- X, M& R) Z) q4 G" Y' K, m4 _
#include “DSP2833x_Device.h” // DSP2833x 头文件
: b5 ~( c; }7 S: v$ F/ O0 b#include “DSP2833x_Examples.h” // DSP2833x 例子相关头文件2 Y3 q' N- b7 J
void Ecan_Config(void);
! I6 `" i$ P3 `# i. |4 Y9 W$ m5 {3 P" h8 S
#endif /* APP_CAN_H_ */
, K5 c1 c# U# A2 ~3 E+ G- I+ V2 E: r) l- t t. U% J* V
在主程序中运行该程序,则通过CAN分析仪可在PC机上看到发出1000次信息。
3 l( b4 |, t4 F% |2 g: q+ u9 X) B1 J
|
|