📄 remans.c
字号:
/*********************************************************************
* Filename: REMANS.c
*
Description: This test checks the ability of the CAN module to answer
remote frames automatically.
All mailboxes in 28x are configured as transmit mailboxes with the AAM
bit set. Each mailbox has a different ID. Mailboxes in node B (CANalyzer)
would transmit remote frames to all the 32 mailboxes in 28x, matching the
ID of mailboxes. The data frames will be received in mailboxes of node B.
This example verifies that RFPn bit is not set if AAM bit is not set.
* Last update: 12/26/2002
*********************************************************************/
#include "DSP28_Device.h"
#define TXCOUNT 100000 // Transmission will take place (TXCOUNT) times..
long i;
long loopcount = 0;
void infinite_loop();
void error(int);
void InitECan(void);
main()
{
/* Create a shadow register structure for the CAN control registers. This is
needed, since, only 32-bit access is allowed to these registers. 16-bit access
to these registers could potentially corrupt the register contents. This is
especially true while writing to a bit (or group of bits) among bits 16 - 31 */
struct ECAN_REGS ECanaShadow;
/* Initialize the CAN module */
InitECan();
/* Write to the MSGID field --> AAM bit = 1 */
ECanaMboxes.MBOX1.MSGID.all = 0x20040000; // Std identifier
ECanaMboxes.MBOX2.MSGID.all = 0x20080000; // Std identifier
ECanaMboxes.MBOX3.MSGID.all = 0x200C0000; // Std identifier
ECanaMboxes.MBOX4.MSGID.all = 0x20100000; // Std identifier
ECanaMboxes.MBOX5.MSGID.all = 0x20140000; // Std identifier
ECanaMboxes.MBOX6.MSGID.all = 0x20180000; // Std identifier
ECanaMboxes.MBOX7.MSGID.all = 0x201C0000; // Std identifier
ECanaMboxes.MBOX8.MSGID.all = 0x20200000; // Std identifier
ECanaMboxes.MBOX9.MSGID.all = 0x20240000; // Std identifier
ECanaMboxes.MBOX10.MSGID.all = 0x20400000; // Std identifier
ECanaMboxes.MBOX11.MSGID.all = 0x20440000; // Std identifier
ECanaMboxes.MBOX12.MSGID.all = 0x20480000; // Std identifier
ECanaMboxes.MBOX13.MSGID.all = 0x204C0000; // Std identifier
ECanaMboxes.MBOX14.MSGID.all = 0x20500000; // Std identifier
ECanaMboxes.MBOX15.MSGID.all = 0x20540000; // Std identifier
ECanaMboxes.MBOX16.MSGID.all = 0x20580000; // Std identifier
ECanaMboxes.MBOX17.MSGID.all = 0x205C0000; // Std identifier
ECanaMboxes.MBOX18.MSGID.all = 0x20600000; // Std identifier
ECanaMboxes.MBOX19.MSGID.all = 0x20640000; // Std identifier
ECanaMboxes.MBOX20.MSGID.all = 0x20800000; // Std identifier
ECanaMboxes.MBOX21.MSGID.all = 0x20840000; // Std identifier
ECanaMboxes.MBOX22.MSGID.all = 0x20880000; // Std identifier
ECanaMboxes.MBOX23.MSGID.all = 0x208C0000; // Std identifier
ECanaMboxes.MBOX24.MSGID.all = 0x20900000; // Std identifier
ECanaMboxes.MBOX25.MSGID.all = 0x20940000; // Std identifier
ECanaMboxes.MBOX26.MSGID.all = 0x20980000; // Std identifier
ECanaMboxes.MBOX27.MSGID.all = 0x209C0000; // Std identifier
ECanaMboxes.MBOX28.MSGID.all = 0x20A00000; // Std identifier
ECanaMboxes.MBOX29.MSGID.all = 0x20A40000; // Std identifier
ECanaMboxes.MBOX30.MSGID.all = 0x20C00000; // Std identifier
ECanaMboxes.MBOX31.MSGID.all = 0x20C40000; // Std identifier
ECanaMboxes.MBOX0.MSGID.all = 0x20C80000; // Std identifier
/* This block turns off AAM --> AAM =0 */
/* ECanaMboxes.MBOX0.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX1.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX2.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX3.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX4.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX5.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX6.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX7.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX7.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX8.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX9.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX10.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX11.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX12.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX13.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX14.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX15.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX16.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX17.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX18.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX19.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX20.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX21.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX22.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX23.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX24.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX25.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX26.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX27.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX28.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX29.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX30.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX31.MSGID.bit.AAM = 0; */
/* Configure Mailboxes 0-31 as Tx */
ECanaRegs.CANMD.all = 0x00000000;
/* Enable all Mailboxes */
ECanaRegs.CANME.all = 0xFFFFFFFF;
/* Write to Master Control field - DLC */
ECanaMboxes.MBOX0.MCF.bit.DLC = 8;
ECanaMboxes.MBOX1.MCF.bit.DLC = 8;
ECanaMboxes.MBOX2.MCF.bit.DLC = 8;
ECanaMboxes.MBOX3.MCF.bit.DLC = 8;
ECanaMboxes.MBOX4.MCF.bit.DLC = 8;
ECanaMboxes.MBOX5.MCF.bit.DLC = 8;
ECanaMboxes.MBOX6.MCF.bit.DLC = 8;
ECanaMboxes.MBOX7.MCF.bit.DLC = 8;
ECanaMboxes.MBOX8.MCF.bit.DLC = 8;
ECanaMboxes.MBOX9.MCF.bit.DLC = 8;
ECanaMboxes.MBOX10.MCF.bit.DLC = 8;
ECanaMboxes.MBOX11.MCF.bit.DLC = 8;
ECanaMboxes.MBOX12.MCF.bit.DLC = 8;
ECanaMboxes.MBOX13.MCF.bit.DLC = 8;
ECanaMboxes.MBOX14.MCF.bit.DLC = 8;
ECanaMboxes.MBOX15.MCF.bit.DLC = 8;
ECanaMboxes.MBOX16.MCF.bit.DLC = 8;
ECanaMboxes.MBOX17.MCF.bit.DLC = 8;
ECanaMboxes.MBOX18.MCF.bit.DLC = 8;
ECanaMboxes.MBOX19.MCF.bit.DLC = 8;
ECanaMboxes.MBOX20.MCF.bit.DLC = 8;
ECanaMboxes.MBOX21.MCF.bit.DLC = 8;
ECanaMboxes.MBOX22.MCF.bit.DLC = 8;
ECanaMboxes.MBOX23.MCF.bit.DLC = 8;
ECanaMboxes.MBOX24.MCF.bit.DLC = 8;
ECanaMboxes.MBOX25.MCF.bit.DLC = 8;
ECanaMboxes.MBOX26.MCF.bit.DLC = 8;
ECanaMboxes.MBOX27.MCF.bit.DLC = 8;
ECanaMboxes.MBOX28.MCF.bit.DLC = 8;
ECanaMboxes.MBOX29.MCF.bit.DLC = 8;
ECanaMboxes.MBOX30.MCF.bit.DLC = 8;
ECanaMboxes.MBOX31.MCF.bit.DLC = 8;
/* Write to the mailbox RAM field of MBOX0 - 31 */
ECanaMboxes.MBOX0.MDRL.all = 0x9555AAA0;
ECanaMboxes.MBOX0.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX1.MDRL.all = 0x9555AAA1;
ECanaMboxes.MBOX1.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX2.MDRL.all = 0x9555AAA2;
ECanaMboxes.MBOX2.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX3.MDRL.all = 0x9555AAA3;
ECanaMboxes.MBOX3.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX4.MDRL.all = 0x9555AAA4;
ECanaMboxes.MBOX4.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX5.MDRL.all = 0x9555AAA5;
ECanaMboxes.MBOX5.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX6.MDRL.all = 0x9555AAA6;
ECanaMboxes.MBOX6.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX7.MDRL.all = 0x9555AAA7;
ECanaMboxes.MBOX7.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX8.MDRL.all = 0x9555AAA8;
ECanaMboxes.MBOX8.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX9.MDRL.all = 0x9555AAA9;
ECanaMboxes.MBOX9.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX10.MDRL.all = 0x9555AAAA;
ECanaMboxes.MBOX10.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX11.MDRL.all = 0x9555AAAB;
ECanaMboxes.MBOX11.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX12.MDRL.all = 0x9555AAAC;
ECanaMboxes.MBOX12.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX13.MDRL.all = 0x9555AAAD;
ECanaMboxes.MBOX13.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX14.MDRL.all = 0x9555AAAE;
ECanaMboxes.MBOX14.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX15.MDRL.all = 0x9555AAAF;
ECanaMboxes.MBOX15.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX16.MDRL.all = 0x9555AA10;
ECanaMboxes.MBOX16.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX17.MDRL.all = 0x9555AA11;
ECanaMboxes.MBOX17.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX18.MDRL.all = 0x9555AA12;
ECanaMboxes.MBOX18.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX19.MDRL.all = 0x9555AA13;
ECanaMboxes.MBOX19.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX20.MDRL.all = 0x9555AA14;
ECanaMboxes.MBOX20.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX21.MDRL.all = 0x9555AA15;
ECanaMboxes.MBOX21.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX22.MDRL.all = 0x9555AA16;
ECanaMboxes.MBOX22.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX23.MDRL.all = 0x9555AA17;
ECanaMboxes.MBOX23.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX24.MDRL.all = 0x9555AA18;
ECanaMboxes.MBOX24.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX25.MDRL.all = 0x9555AA19;
ECanaMboxes.MBOX25.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX26.MDRL.all = 0x9555AA1A;
ECanaMboxes.MBOX26.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX27.MDRL.all = 0x9555AA1B;
ECanaMboxes.MBOX27.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX28.MDRL.all = 0x9555AA1C;
ECanaMboxes.MBOX28.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX29.MDRL.all = 0x9555AA1D;
ECanaMboxes.MBOX29.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX30.MDRL.all = 0x9555AA1E;
ECanaMboxes.MBOX30.MDRH.all = 0x89ABCDEF;
ECanaMboxes.MBOX31.MDRL.all = 0x9555AA1F;
ECanaMboxes.MBOX31.MDRH.all = 0x89ABCDEF;
ECanaRegs.CANTA.all = 0xFFFFFFFF; // Clear any TA bits that might be set
/* Wait for remote frames.. */
while(1) {}
}
/*
Observations:
Case 1: AAM = 1 in a Transmit mailbox:
--------------------------------------
The 28x correctly transmits the data frames upon reception of remote frames.
The RFP bits cannot be seen "set" because they are cleared automatically by
the 28x. TAn bits are set after successful transmission.
Case 2: AAM = 0 in a Transmit mailbox:
--------------------------------------
The RFPn bit is not set. No data gets transmitted.
Case 3: AAM = 0 in a Receive mailbox:
--------------------------------------
The RFPn and RMPn bits will be set. These bits can be cleared by writing a
one to them. TAn bits will not be set and no data will be transmitted.
Case 4: AAM = 1 in a Receive mailbox:
--------------------------------------
The RFPn and RMPn bits will be set. These bits can be cleared by writing a
one to them. TAn bits will not be set and no data will be transmitted.
Use REMOTE.CFG in CANalyzer.
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -