网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  TMS320F2812模块配置的初始化程序         ★★★ 【字体:
TMS320F2812模块配置的初始化程序
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-17    

TMS320F2812模块配置的初始化程序,已经通过实际产品的测试并应用

//
//      TMDX ALPHA RELEASE
//      Intended for product evaluation purposes
//
//###########################################################################
//
// FILE: DSP28_ECan.c
//
// TITLE: DSP28 Enhanced CAN Initialization & Support Functions.
//
//###########################################################################
//
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  0.55| 06 May 2002 | L.H. | EzDSP Alpha Release
//  0.56| 20 May 2002 | L.H. | No change
//  0.57| 27 May 2002 | L.H. | No change
//  0.58| 29 Jun 2002 | L.H. | No change
//  1.0 | 23 Otc 2004 | CY.L.| Added several initialization routines
//###########################################################################

#include "DSP28_Device.h"


//---------------------------------------------------------------------------
// InitECan:
//---------------------------------------------------------------------------
// This function initializes the eCAN module to a known state.
//
#define  MSGID  MID

void InitECan(void)
{

 struct ECAN_REGS ECanaShadow;
 Uint32 MBOXMID;
 Uint16 BRP;
 
  EALLOW;

 GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1;
 GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1; 
 
/* Configure eCAN RX and TX pins for eCAN transmissions using eCAN regs*/ 
   
    ECanaRegs.CANTIOC.bit.TXFUNC = 1;
    ECanaRegs.CANRIOC.bit.RXFUNC = 1;  

/* Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31) */
         // HECC mode also enables time-stamping feature
 ECanaRegs.CANMC.bit.SCB = 1; //0--SCC mode; 1-eCAN mode.   

/* Initialize all bits of 'Master Control Field' to zero */
// Some bits of MCF register come up in an unknown state. For proper operation,
// all bits (including reserved bits) of MCF must be initialized to zero
 
    ECanaMboxes.MBOX0.MCF.all = 0x00000000;
    ECanaMboxes.MBOX1.MCF.all = 0x00000000;
    ECanaMboxes.MBOX2.MCF.all = 0x00000000;
    ECanaMboxes.MBOX3.MCF.all = 0x00000000;
    ECanaMboxes.MBOX4.MCF.all = 0x00000000;
    ECanaMboxes.MBOX5.MCF.all = 0x00000000;
    ECanaMboxes.MBOX6.MCF.all = 0x00000000;
    ECanaMboxes.MBOX7.MCF.all = 0x00000000;
    ECanaMboxes.MBOX8.MCF.all = 0x00000000;
    ECanaMboxes.MBOX9.MCF.all = 0x00000000;
    ECanaMboxes.MBOX10.MCF.all = 0x00000000;
    ECanaMboxes.MBOX11.MCF.all = 0x00000000;
    ECanaMboxes.MBOX12.MCF.all = 0x00000000;
    ECanaMboxes.MBOX13.MCF.all = 0x00000000;
    ECanaMboxes.MBOX14.MCF.all = 0x00000000;
    ECanaMboxes.MBOX15.MCF.all = 0x00000000;
    ECanaMboxes.MBOX16.MCF.all = 0x00000000;
    ECanaMboxes.MBOX17.MCF.all = 0x00000000;
    ECanaMboxes.MBOX18.MCF.all = 0x00000000;
    ECanaMboxes.MBOX19.MCF.all = 0x00000000;
    ECanaMboxes.MBOX20.MCF.all = 0x00000000;
    ECanaMboxes.MBOX21.MCF.all = 0x00000000;
    ECanaMboxes.MBOX22.MCF.all = 0x00000000;
    ECanaMboxes.MBOX23.MCF.all = 0x00000000;
    ECanaMboxes.MBOX24.MCF.all = 0x00000000;
    ECanaMboxes.MBOX25.MCF.all = 0x00000000;
    ECanaMboxes.MBOX26.MCF.all = 0x00000000;
    ECanaMboxes.MBOX27.MCF.all = 0x00000000;
    ECanaMboxes.MBOX28.MCF.all = 0x00000000;
    ECanaMboxes.MBOX29.MCF.all = 0x00000000;
    ECanaMboxes.MBOX30.MCF.all = 0x00000000;
    ECanaMboxes.MBOX31.MCF.all = 0x00000000;

// TAn, RMPn, GIFn bits are all zero upon reset and are cleared again
// as a matter of precaution.

/* Clear all TAn bits */     
 
 ECanaRegs.CANTA.all = 0xFFFFFFFF;

/* Clear all RMPn bits */     
 
 ECanaRegs.CANRMP.all = 0xFFFFFFFF;
 
/* Clear all interrupt flag bits */     
 
 ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
 ECanaRegs.CANGIF1.all = 0xFFFFFFFF;
 
/* Configure bit timing parameters */

 ECanaRegs.CANMC.bit.CCR = 1 ;            // Set CCR = 1
   
    while(ECanaRegs.CANES.bit.CCE != 1 ) {}   // Wait for CCE bit to be set..
   
    ECanaRegs.CANBTC.bit.TSEG2 = 2;
    ECanaRegs.CANBTC.bit.TSEG1 = 10; 
/*   //150M
 switch(CanBaudrate)
 {
  case 0  : BRP=9;  break; //1M
  case 1  : BRP=19;  break; //500k
  case 2  : BRP=39;  break; //250k
  case 3  : BRP=79;  break; //125k
  case 4  : BRP=99;  break; //100k
  case 5  : BRP=110; break; //90k
  case 6  : BRP=124; break; //80k
  case 7  : BRP=142; break; //70k  
  case 8  : BRP=166; break; //60k  
  case 9  : BRP=199; break; //50k    
  case 10  : BRP=249; break; //40k 
  default  : BRP=249; break; //40k
 }   
*/
/* //120M
 switch(CanBaudrate)
 {
  case 0  : BRP=1000; break; //1M
  case 1  : BRP=500; break; //500k
  case 2  : BRP=250; break; //250k
  case 3  : BRP=125; break; //125k
  case 4  : BRP=100; break; //100k
  case 5  : BRP=90;  break; //90k
  case 6  : BRP=80;  break; //80k
  case 7  : BRP=70;  break; //70k  
  case 8  : BRP=60;  break; //60k  
  case 9  : BRP=50;  break; //50k    
  case 10  : BRP=40;  break; //40k 
  default  : BRP=40;  break; //40k
 }   
 
 BRP=SYSCLK/(15*1000*BRP)-1;
*/ 
// sysclk=120M
 switch(CanBaudrate)
 {
  case 10  : BRP=7;  break; //1M
  case 9  : BRP=15;  break; //500k
  case 8  : BRP=31;  break; //250k
  case 7  : BRP=63;  break; //125k
  case 6  : BRP=79;  break; //100k
  case 5  : BRP=88;  break; //90k
  case 4  : BRP=99;  break; //80k
  case 3  : BRP=113; break; //70k  
  case 2  : BRP=132; break; //60k  
  case 1  : BRP=159; break; //50k    
  case 0  : BRP=199; break; //40k 
  default  : BRP=199; break; //40k
 }   

 ECanaRegs.CANBTC.bit.BRP=BRP;    
   
 ECanaRegs.CANMC.bit.STM = 0;  // Configure CAN for no self-test mode      
   
    ECanaRegs.CANMC.bit.CCR = 0 ;             // Set CCR = 0
    while(ECanaRegs.CANES.bit.CCE == !0 ) {}   // Wait for CCE bit to be cleared..
 
/* Disable all Mailboxes  */
 
  ECanaRegs.CANME.all = 0;     // Required before writing the MSGIDs
    ECanaRegs.CANGAM.bit.AMI=1;
    ECanaRegs.CANGAM.bit.GAM2816=0x0007;    //not used by eCAN mode

// Configure Mailboxe6 as Receive mailboxes

 ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; 
 ECanaShadow.CANMD.bit.MD6=1;
 ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
 
// ID bit28~21 as Unit ID, bit20~18 as frame information:
// 80--single frame, E0--first frame of multi frame
// A0--middle frame of multi frame
// C0--last frame of multi frame
 MBOXMID=((Uint32)ComAddr)<<21;
 MBOXMID=MBOXMID|0x40000000;
   ECanaMboxes.MBOX6.MSGID.all=MBOXMID;  // Std identifier include Unit addr 
 ECanaLAMRegs.LAM6.all=0x001C0000;   // mask bit20~18
 ECanaShadow.CANME.all = ECanaRegs.CANME.all; 
 ECanaShadow.CANME.bit.ME6 =1;
 ECanaRegs.CANME.all = ECanaShadow.CANME.all;    

// Configure Mailboxe4 as Receive mailboxes

 ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; 
 ECanaShadow.CANMD.bit.MD4=1;
 ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
 
// ID bit28~21 as Unit ID, bit20~18 as frame information:
// 80--single frame, E0--first frame of multi frame
// A0--middle frame of multi frame
// C0--last frame of multi frame
 MBOXMID=((Uint32)MasterAddr)<<21;
 MBOXMID=MBOXMID|0x40000000;
   ECanaMboxes.MBOX4.MSGID.all=MBOXMID;  // Std identifier include Unit addr 
 ECanaLAMRegs.LAM4.all=0x001C0000;   // mask bit20~18
 ECanaShadow.CANME.all = ECanaRegs.CANME.all; 
 ECanaShadow.CANME.bit.ME4 =1;
 ECanaRegs.CANME.all = ECanaShadow.CANME.all;    

      
/* Configure Mailbox5 as a Transmit mailbox */

 ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; 
 ECanaShadow.CANMD.bit.MD5 = 0;
 ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;

 MBOXMID=((Uint32)ComAddr)<<21;
 MBOXMID=MBOXMID|0x40000000;    
    ECanaMboxes.MBOX5.MID.all=MBOXMID; // Std Identifier
     
 ECanaShadow.CANME.all = ECanaRegs.CANME.all; 
 ECanaShadow.CANME.bit.ME5 = 1;
 ECanaRegs.CANME.all = ECanaShadow.CANME.all;
   
   
 ECanaShadow.CANMIL.all = 0xFFFFFFFF ; // Interrupts asserted on eCAN1INT
 ECanaRegs.CANMIL.all = ECanaShadow.CANMIL.all;
 
 ECanaShadow.CANMIM.all  = 0x00000070;   // Enable interrupts for 4,5,6 mailboxes
    ECanaRegs.CANMIM.all = ECanaShadow.CANMIM.all;
   
    ECanaShadow.CANGIM.all = 0; 
    ECanaShadow.CANGIM.bit.I1EN = 1;
    ECanaRegs.CANGIM.all = ECanaShadow.CANGIM.all;

    EDIS;
       
 PieCtrlRegs.PIECRTL.bit.ENPIE = 1;  // Enable vector fetching from PIE block 
 
 PieCtrlRegs.PIEACK.bit.ACK9 = 1;    // Enables PIE to drive a pulse into the CPU

// The interrupt can be asserted in either of the eCAN interrupt lines
// Comment out the unwanted line...

 PieCtrlRegs.PIEIER9.bit.INTx5 = 0;  // Enable INTx.5 of INT9 (eCAN0INT)
 PieCtrlRegs.PIEIER9.bit.INTx6 = 1;  // Enable INTx.6 of INT9 (eCAN1INT)
 
/* Configure system interrupts */
 
 IER |= M_INT9;     // Enable INT9 of CPU           
   
   

 
/***************************************************/
/* Bit configuration parameters for 150 MHz SYSCLKOUT*/
/***************************************************/
/*

The table below shows how BRP field must be changed to achieve different bit
rates with a BT of 15, for a 80% SP:
---------------------------------------------------
BT = 15, TSEG1 = 10, TSEG2 = 2, Sampling Point = 80%
---------------------------------------------------
1   Mbps : BRP+1 = 10  : CAN clock = 15 MHz
500 kbps : BRP+1 = 20  : CAN clock = 7.5 MHz
250 kbps : BRP+1 = 40  : CAN clock = 3.75 MHz
125 kbps : BRP+1 = 80  : CAN clock = 1.875 MHz
100 kbps : BRP+1 = 100  : CAN clock = 1.5 MHz
50  kbps : BRP+1 = 200  : CAN clock = 0.75 MHz

90  kbps : BRP+1 = 111  
80  kbps : BRP+1 = 125
70  kbps : BRP+1 = 143
60  kbps : BRP+1 = 167
50  kbps : BRP+1 = 200
40  kbps : BRP+1 = 250
*/
/***************************************************/
/* Bit configuration parameters for 120 MHz SYSCLKOUT*/
/***************************************************/
/*

The table below shows how BRP field must be changed to achieve different bit
rates with a BT of 15, for a 80% SP:
---------------------------------------------------
BT = 15, TSEG1 = 10, TSEG2 = 2, Sampling Point = 80%
---------------------------------------------------
1   Mbps : BRP+1 = 8  : CAN clock = 15 MHz
500 kbps : BRP+1 = 16  : CAN clock = 7.5 MHz
250 kbps : BRP+1 = 32  : CAN clock = 3.75 MHz
125 kbps : BRP+1 = 64  : CAN clock = 1.875 MHz
100 kbps : BRP+1 = 80  : CAN clock = 1.5 MHz
50  kbps : BRP+1 = 160  : CAN clock = 0.75 MHz

90  kbps : BRP+1 = 89  
80  kbps : BRP+1 = 100
70  kbps : BRP+1 = 114
60  kbps : BRP+1 = 133
50  kbps : BRP+1 = 160
40  kbps : BRP+1 = 200
*/
//===========================================================================
// No more.
//===========================================================================

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320F2812的SPWM原程序
    基于LabVIEW和TMS320F2812的…
    TMS320F2812的CAN调试成功经…
    基于TMS320F2812和μC/OS II…
    TMS320F2812 全局汇编函数
    TMS320F2812 CMD 文件各段含…
    基于TMS320F2812集中供电系统…
    TMS320F2812的CMD文件配置详…
    基于TMS320F2812的多轴伺服控…
    利用TMS320F2812 DSP&DRV592…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号