EDA365电子论坛网
标题:
TMS320F28335 CAN通信
[打印本页]
作者:
RNGxiaohu
时间:
2021-11-16 14:14
标题:
TMS320F28335 CAN通信
can通信配置can.c
. V* d9 z- a1 K3 V4 J5 B& }
#include “can.h”
( ^( Y& G3 A0 d" W6 c0 Z
long int i;
/ P3 W2 p8 S: t, T8 Q3 ]( ~& {
long loopcount = 0;
9 u1 M3 t' h5 P! }
void Ecan_Config(void)
& j3 `& q( r* V' V1 M$ r$ k1 o
{
c* T+ V5 i2 h9 p @: T
struct ECAN_REGS ECanaShadow;
, H; e3 r0 p( R1 h3 ]; @
struct ECAN_REGS ECanbShadow;
6 P# m. C- j ]) W9 i
// Step 5. User specific code:
0 v+ h8 a& ^2 c# `
( W9 a8 R3 C! Y/ \# S- L
/* Write to the MSGID field */
' l. @1 Q: I) ^* d2 O
5 H2 p O" n( y; z( X1 |4 p
ECanaMboxes.MBOX0.MSGID.all = 0x95555555; // Extended Identifier
: V o5 L) U3 K) _' `
ECanaMboxes.MBOX15.MSGID.all = 0x95555555; // Extended Identifier
2 Y. i% k6 K0 g g0 u, E8 c4 b+ n
ECanbMboxes.MBOX25.MSGID.all = 0x95555555; // Extended Identifier
' d/ a& q! s4 p) J# _
ECanbMboxes.MBOX0.MSGID.all = 0x95555555; // Extended Identifier
6 N$ K. ?. x' f/ ^1 }0 W. Y
e* V: [' A3 M' s* E9 ?7 {7 d6 g
/* 配置CANA 邮箱0为发送邮箱 */
$ i1 o6 {5 H$ C. s
ECanaShadow.CANMD.all =ECanaRegs.CANMD.all;
/ [3 V; y( p+ q, z' I% [- [7 v
ECanaShadow.CANMD.bit.MD0 = 0;
5 M3 l* q! F# z* a3 T* }+ {2 p
ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
, A5 E U& m ~. U9 h+ m8 ]) D4 M
7 z+ L8 R6 ^# S2 [
//配置CANB 邮箱25为接受邮箱
& x" N7 A: m. N H
ECanbShadow.CANMD.all = ECanbRegs.CANMD.all;
( w% G5 ^: o. \1 p+ I
ECanbShadow.CANMD.bit.MD25 = 1;
7 ^1 [! T" {# n' R2 n
ECanbRegs.CANMD.all = ECanbShadow.CANMD.all;
5 X n# O8 y2 G
- S1 \2 D3 e* |8 Z* F7 p9 N
//配置CANA 邮箱0使能
& H, r2 s( t' [& n4 f- A, |
ECanaShadow.CANME.all = ECanaRegs.CANME.all;
' ]9 ?% s, Y% E0 Y6 `& q
ECanaShadow.CANME.bit.ME0 = 1;
, J0 e0 C. }7 L6 }. o1 _
ECanaRegs.CANME.all = ECanaShadow.CANME.all;
1 s' E+ y! z; m R, v; I5 C
) f# a! J: f" n5 P
//配置CANB 邮箱25使能
% h' }; K6 z* O3 z8 k% Y. `; _
ECanbShadow.CANME.all = ECanbRegs.CANME.all;
/ [( G% o- ?+ s% F/ A" t
ECanbShadow.CANME.bit.ME25 = 1;
. _7 X8 e; }1 w x: _) r
ECanbRegs.CANME.all = ECanbShadow.CANME.all;
. i) N# B2 D6 p) U
( [3 _7 m0 j' r; Q2 C: v
/* Write to DLC field in Master Control reg */
7 a, ]/ a" O) i% Z
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
& _0 }- g6 Z: H7 {& T, F" ?
ECanbMboxes.MBOX25.MSGCTRL.bit.DLC = 8;
3 b! _" o. r& _0 x
) p* I" i$ e3 |- k
//CANA 邮箱0发送信息
% w& J+ Y7 U2 X) x
ECanaMboxes.MBOX0.MDL.all = 0x12345678;
; p. E; \# q4 ^' x. c( g; N
ECanaMboxes.MBOX0.MDH.all = 0x87654321;
. f- R9 L4 z# o9 }6 S2 ^0 G. ?7 Z
$ I- Y8 N1 ]* r' ^% z
// ECanbMboxes.MBOX25.MDL.all = 0x12345678;
. V2 v9 l% M( `* ~& g3 y
// ECanbMboxes.MBOX25.MDH.all = 0x87654321;
: t1 q% t3 S5 H9 d
//
0 X6 n/ e. x/ I) Q
// //配置为自检模式,实验现象表明可以正常发送数据
' L' ~% A1 L1 w9 I8 q# U5 D
// EALLOW;
w3 t: I1 W0 ?5 W7 z
// ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
2 V \3 F5 w/ _0 r9 s
// ECanaShadow.CANMC.bit.STM = 1; // Configure CAN for self-test mode
$ H+ j: A3 R W: `8 V- M# d& ~) z
// ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
( ]' ^( f8 D# y4 H
// EDIS;
$ r ?* N3 }. o3 f! c- k/ x
; w. z) T: M' v% Q
for( i=0; i < 1000; i++)
* W/ o+ ]3 }# T1 O( P; U
{
3 h% D% F4 z' `( I: `
ECanaShadow.CANTRS.all = 0;
) @6 s' l$ f6 O2 u
ECanaShadow.CANTRS.bit.TRS0 = 1; // Set TRS for mailbox under test
3 _0 E6 n3 v. ~
ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;
' A R) R9 x& j# U
//单步运行卡在此处,需检查CAN总线是否挂载另一个节点,GPIO配置,CANA,CANB配置等问题
/ X% g) {( L7 k$ e+ q. h
do
5 x3 @" P4 ]/ j% z5 R' k
{
2 }7 @9 A$ s6 a- i$ v5 G4 O4 [
ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
+ j% n" O: q3 m. r
} while(ECanaShadow.CANTA.bit.TA0 == 0 ); // Wait for TA5 bit to be set…
/ |$ M& Z' t& {8 P) j. O
5 c- J0 u4 t. l; R6 X1 ?" F
ECanaShadow.CANTA.all = 0;
" r/ {1 q9 K& {: w; X
ECanaShadow.CANTA.bit.TA0 = 1; // Clear TA5
. u' I; W6 P2 q8 B6 d" j- C
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
4 ]& N7 M& ~. N# q! J
( x: ]/ Y8 }: F
loopcount ++;
) x+ P$ [& D- o7 v+ q3 W
}
, ]5 w: x. B; q) }
ECanaShadow.CANTA.all = 0;
: R1 h8 ^9 h6 J
ECanaShadow.CANTA.bit.TA0 = 1; // Clear TA5
- Z# l9 L+ y2 k* P
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
. n* w) S4 O! q1 U* E* S* H
. \/ _* V. k5 Y4 u8 j$ ]6 l
loopcount ++;
! \2 t, S% V% F2 D: _/ C
}
, j* |, j+ Z- W& \' _( j9 o' {
[0 |6 r' |% R+ Z9 x/ T! I0 u; d
}
6 I, A, h% V# Y) A- B: n
. T t5 R. v( x$ p
CAN通信的can.h文件
$ h! L9 D- `2 Y6 A2 G/ S" b
#ifndef CAN_H
5 j' y- o, T. [& `7 j; r4 ?0 G
#define CAN_H
. m4 H' n( x2 J
+ r1 i% g' T+ F+ O4 C* F8 u
#include “DSP2833x_Device.h” // DSP2833x 头文件
: {: S' t3 Y& v; \
#include “DSP2833x_Examples.h” // DSP2833x 例子相关头文件
0 j7 @/ C0 G/ ?; }& C( Y3 B
void Ecan_Config(void);
+ z1 d5 F% B2 @) X
" r4 n3 O" i0 G/ D4 z! x* \8 L, E
#endif /* APP_CAN_H_ */
5 \ [6 N( ^6 P
8 T7 V q8 K* N4 q& }# |9 U' @
在主程序中运行该程序,则通过CAN分析仪可在PC机上看到发出1000次信息。
* m$ K& u6 P+ e9 W! G4 ^8 i2 t, y
' j. p( R2 j/ B5 N2 h; `
作者:
CLBuu
时间:
2021-11-16 14:19
配置CANA 邮箱0使能
9 s+ ~) h/ _" h( @9 D, J
ECanaShadow.CANME.all = ECanaRegs.CANME.all;
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2