网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: TI德州中文网 >> 技术文库 >> C2000文章 >> C28X >> 正文
  用来测试TI公司TMS320F281X芯片的CAN总线模块接受数据的源代码           ★★★ 【字体:
用来测试TI公司TMS320F281X芯片的CAN总线模块接受数据的源代码
作者:D003    文章来源:本站原创    点击数:    更新时间:2007-3-1    

/*********************************************************************
* Filename: RXLOOP.c                                                 *
*                                                                    *
* Description: This test is a simple example of how data may be received   
* in 28x CAN.
*
* This program runs on Node B. CANalyzer is used as node A in this example.
* All mailboxes are configured as receive mailboxes. Each mailbox
* has a different ID. All mailboxes in node A are allowed to transmit
* in a sequence to mailboxes in node B. Once the cycle is complete,
* the cycle is started all over again.

* This program loops forever. The # of times the receive loop is executed
* is stored in the RXCOUNT value.
*     
* Last update: 12/24/2002
*********************************************************************/


#include "D:\DspTest\include\DSP281x_Device.h"

long      RXCOUNT = 0;

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;
 Uint16 *a;
 Uint16 a1,a2,a3,a4;
 float b=2.2;

    InitSysCtrl();
  
    EALLOW;
    GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1;
 GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1;
 EDIS;
 
    InitPieCtrl();
    
    InitPieVectTable();

 a=(Uint16 *)&b;
 a1=(*a&0xFF00)>>8;
 a2=*a&0xFF;
 a++;
 a3=(*a&0xFF00)>>8;
 a4=*a&0xFF;

/* Initialize the CAN module */
  InitECan();

  ECanaRegs.CANME.all = 0; 
   
/* Write to the MSGID field - MBX number is written as its MSGID */
 /*    ECanaMboxes.MBOX1.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX2.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX3.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX4.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX5.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX6.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX7.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX8.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX9.MSGID.all  = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX10.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX11.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX12.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX13.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX14.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX15.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX16.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX17.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX18.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX19.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX20.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX21.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX22.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX23.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX24.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX25.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX26.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX27.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX28.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX29.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX30.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX31.MSGID.all = 0xC8016028;  // Std identifier
     ECanaMboxes.MBOX0.MSGID.all = 0xC8016028;   // Std identifier
   ECanaLAMRegs.LAM0.all=0x800FFFE0;
  ECanaLAMRegs.LAM1.all=0x800FFFE0;
  ECanaLAMRegs.LAM2.all=0x800FFFE0;
  ECanaLAMRegs.LAM3.all=0x800FFFE0;
  ECanaLAMRegs.LAM4.all=0x800FFFE0;
  ECanaLAMRegs.LAM5.all=0x800FFFE0; 
  ECanaLAMRegs.LAM6.all=0x800FFFE0;
  ECanaLAMRegs.LAM7.all=0x800FFFE0;
  ECanaLAMRegs.LAM8.all=0x800FFFE0;
  ECanaLAMRegs.LAM9.all=0x800FFFE0;
  ECanaLAMRegs.LAM10.all=0x800FFFE0;
  ECanaLAMRegs.LAM11.all=0x800FFFE0;
  ECanaLAMRegs.LAM12.all=0x800FFFE0;
  ECanaLAMRegs.LAM13.all=0x800FFFE0;
  ECanaLAMRegs.LAM14.all=0x800FFFE0;
  ECanaLAMRegs.LAM15.all=0x800FFFE0;
  ECanaLAMRegs.LAM16.all=0x800FFFE0;
  ECanaLAMRegs.LAM17.all=0x800FFFE0;
  ECanaLAMRegs.LAM18.all=0x800FFFE0;
  ECanaLAMRegs.LAM19.all=0x800FFFE0;
  ECanaLAMRegs.LAM20.all=0x800FFFE0;
  ECanaLAMRegs.LAM21.all=0x800FFFE0;
  ECanaLAMRegs.LAM22.all=0x800FFFE0;
  ECanaLAMRegs.LAM23.all=0x800FFFE0;
  ECanaLAMRegs.LAM24.all=0x800FFFE0;
  ECanaLAMRegs.LAM25.all=0x800FFFE0;
  ECanaLAMRegs.LAM26.all=0x800FFFE0;
  ECanaLAMRegs.LAM27.all=0x800FFFE0;
  ECanaLAMRegs.LAM28.all=0x800FFFE0;
  ECanaLAMRegs.LAM29.all=0x800FFFE0;
  ECanaLAMRegs.LAM30.all=0x800FFFE0;
  ECanaLAMRegs.LAM31.all=0x800FFFE0;*/
//以下屏蔽项为不考虑标识符时的配置
     ECanaMboxes.MBOX0.MSGID.all =  0xC0C80000;  // Std identifier
  ECanaMboxes.MBOX1.MSGID.all  = 0xC0040000;  // Std identifier
     ECanaMboxes.MBOX2.MSGID.all  = 0xC0080000;  // Std identifier
     ECanaMboxes.MBOX3.MSGID.all  = 0xC00C0000;  // Std identifier
     ECanaMboxes.MBOX4.MSGID.all  = 0xC0100000;  // Std identifier
     ECanaMboxes.MBOX5.MSGID.all  = 0xC0140000;  // Std identifier
     ECanaMboxes.MBOX6.MSGID.all  = 0xC0180000;  // Std identifier
     ECanaMboxes.MBOX7.MSGID.all  = 0xC01C0000;  // Std identifier
     ECanaMboxes.MBOX8.MSGID.all  = 0xC0200000;  // Std identifier
     ECanaMboxes.MBOX9.MSGID.all  = 0xC0240000;  // Std identifier
     ECanaMboxes.MBOX10.MSGID.all = 0xC0400000;  // Std identifier
     ECanaMboxes.MBOX11.MSGID.all = 0xC0440000;  // Std identifier
     ECanaMboxes.MBOX12.MSGID.all = 0xC0480000;  // Std identifier
     ECanaMboxes.MBOX13.MSGID.all = 0xC04C0000;  // Std identifier
     ECanaMboxes.MBOX14.MSGID.all = 0xC0500000;  // Std identifier
     ECanaMboxes.MBOX15.MSGID.all = 0xC0540000;  // Std identifier
     ECanaMboxes.MBOX16.MSGID.all = 0xC0580000;  // Std identifier
     ECanaMboxes.MBOX17.MSGID.all = 0xC05C0000;  // Std identifier
     ECanaMboxes.MBOX18.MSGID.all = 0xC0600000;  // Std identifier
     ECanaMboxes.MBOX19.MSGID.all = 0xC0640000;  // Std identifier
     ECanaMboxes.MBOX20.MSGID.all = 0xC0800000;  // Std identifier
     ECanaMboxes.MBOX21.MSGID.all = 0xC0840000;  // Std identifier
     ECanaMboxes.MBOX22.MSGID.all = 0xC0880000;  // Std identifier
     ECanaMboxes.MBOX23.MSGID.all = 0xC08C0000;  // Std identifier
     ECanaMboxes.MBOX24.MSGID.all = 0xC0900000;  // Std identifier
     ECanaMboxes.MBOX25.MSGID.all = 0xC0940000;  // Std identifier
     ECanaMboxes.MBOX26.MSGID.all = 0xC0980000;  // Std identifier
     ECanaMboxes.MBOX27.MSGID.all = 0xC09C0000;  // Std identifier
     ECanaMboxes.MBOX28.MSGID.all = 0xC0A00000;  // Std identifier
     ECanaMboxes.MBOX29.MSGID.all = 0xC0A40000;  // Std identifier
     ECanaMboxes.MBOX30.MSGID.all = 0xC0C00000;  // Std identifier
     ECanaMboxes.MBOX31.MSGID.all = 0xC0C40000; // Std identifier
    
         
    
  ECanaLAMRegs.LAM0.all=0x9FFFFFFF;//0x1FE00000;
  ECanaLAMRegs.LAM1.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM2.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM3.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM4.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM5.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM6.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM7.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM8.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM9.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM10.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM11.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM12.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM13.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM14.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM15.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM16.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM17.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM18.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM19.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM20.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM21.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM22.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM23.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM24.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM25.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM26.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM27.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM28.all=0x9FFFFFFF;
   ECanaLAMRegs.LAM29.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM30.all=0x9FFFFFFF;
  ECanaLAMRegs.LAM31.all=0x9FFFFFFF;    
 /* Note: If writing to only the 11-bit identifier as by
 "ECanaMboxes.MBOX0.MSGID.bit.MSGID_H = 0x00C8", IDE, AME & AAM
 bit fields also need to be initialized. Otherwise, they
 may assume random values */
 
/* Configure Mailboxes as Receive mailboxes */

 ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; 
 ECanaShadow.CANMD.all = 0xFFFFFFFF;
 ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
 ECanaRegs.CANOPC.all=0xFFFFFFFF;
/* Enable Mailboxes */
 
 ECanaShadow.CANME.all = ECanaRegs.CANME.all; 
 ECanaShadow.CANME.all = 0xFFFFFFFF;
 ECanaRegs.CANME.all = ECanaShadow.CANME.all;
 
/* Begin receiving */

    while(1)        
    {
     while(ECanaRegs.CANRMP.all != 0xFFFFFFFF ) {}  // Wait for all RMPn to be set..
               
     ECanaRegs.CANRMP.all = 0xFFFFFFFF;      // Clear all RMPn bits and start
     RXCOUNT++ ;                             // all over again...
    }              
}

/* CANalyzer configuration file: RXLOOP.CFG... */

欢迎点击进入:"61IC中国电子在线"官方网站     文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    F2812开发板:2812EVM-III开发
    利用汇编语言进行F2812编程实
    利用汇编语言进行F2812编程实
    利用汇编语言进行F2812编程实
    利用汇编语言进行F2812编程实
    利用汇编语言进行F2812编程实
    利用汇编语言进行F2812编程实
    利用汇编语言进行F2812编程实
    TMS320F2812的延时程序
    关于TMS320LF2407异步串行例
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:TC 湘ICP备06016957号