⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remans.c

📁 2812的CAN通讯源代码,需要的朋友请下载试用
💻 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 + -