门关键词: 远程控制开关 什么是单片机 无线鼠标电路图 电器件 霍耳感应器 手柄电位器 电子元件知识
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
电子元器件搜索:
维库电子市场网是知名的电子元器件交易网站,为电子生产企业提供IC库存和技术资料查询服务。
TMS320F2812配置的初始化程序
新闻出处:嵌入式技术网 发布时间: 2007-11-15

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


#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"


Uint16 Error_flag;
Uint16 Pass_flag;

//===========================================================================
// followed routines to  init some data memory and variables
//===========================================================================
void DataInit(void)
{
 Uint32 para1,para2;

 TaskReg.tsk.all=0;
 TaskReg.tsk.bit.Taskp8=1; 
 
 Error_flag = 0;
 Pass_flag = 0;

 SciaRxPC=0;
 ScibRxPC=0;
 SciaTxPC=0;
 ScibTxPC=0;
 
 StatusMark.Common.all=0x0081;
 
 SciaMark.all=0;
 ScibMark.all=0;
 FiberMark.all=0;
 CanMark.all=0;
 
 YX.Status1.all=0;
 YX.Status2.all=0;
 YX.Status3.all=0;
 YC.Mark1.all=0;
 YC.Mark2.all=0;
 
 Protect_SD_Start=0;
 Protect_SD_Start_PC=0;
 
    CanRTx_PC=0;
    CanRTx_PC1=0;
    CanBOPC=0;
    CanBOPC1=0;
    CanRTx_Start=0;
 
 SoeSendPC=0;
 LED.all=0; 
 
 para1=0x0080000;
 para2=0x001f800;
    Mem_clear(para1,para2);
 
 if((EE_EventMark!=0x55aa)||(EE_EventRecordPC>31)||(SciaSoeSendPC>31))
 {
  para1=0x009f800;
  para2=0x0000700;
     Mem_clear(para1,para2); 
  EE_EventMark=0x55aa;     
  EE_EventRecordPC=0;
  SciaSoeSendPC=EE_EventRecordPC;
 }

 SciaSoeSendPC=EE_EventRecordPC;
 EventRecordPC=0;

 if(NV_Mark!=0x5A5A)
 {
  NV_Mark=0x5A5A;
  P1_pulse=0;
  Q1_pulse=0;
  P1_pulse_Bak=0;
  Q1_pulse_Bak=0;
  P2_pulse=0;
  Q2_pulse=0;
  P2_pulse_Bak=0;
  Q2_pulse_Bak=0;
  
  P1_sum=0;
  Q1_sum=0;
  P1_sum_Bak=0;
  Q1_sum_Bak=0;
  P2_sum=0;
  Q2_sum=0;
  P2_sum_Bak=0;
  Q2_sum_Bak=0;
    

 }

 P1_sum_Tmp=0;
 Q1_sum_Tmp=0;
 P2_sum_Tmp=0;
 Q2_sum_Tmp=0;  
 
 TaskReg.input.all=ReadBinary();
 YX.Status1.all=TaskReg.input.all;
 
 TaskReg.err.all = 0;
 TaskReg.event1.all = 0;
 TaskReg.event2.all = 0; 
 TaskReg.run.all = 0;
 TaskReg.output.all = 0;
 Protect_start = 0;
 AlarmMark.A1.all = 0;
 AlarmMark.A2.all = 0;
    MmiMark.all = 0;
   
    GLHJSMark=0;
    CHZHJSQD=0;
    LXGLHJSMark=0;
    BHQDCHZ=0;
    YK_Trip_signal=0;
    ChargeMark=0;
    Chargerun=0;
    run_charge=1;
    CHZ_Return=0;
    CHZ_Return_signl=0;
   
    GLHJS_signl=0;
    LXGLHJS_signl=0;
   
    Time_same_counter=0;
    SH_Close_signal=0;
    Angle_PC=0;
    Angle_Counter=0;
    Times_Angle_PC=0;
    Time_Angle=0;
    CHZ_UL_Um=0;
    Sign_Angle=0;
 consult_angle_flag=0;
// DA_flag=0;
   
    Mark_U2OrUnder=0;
    Mark_U0Check=0;
    I0_DirMark=0;
   
    Freq_PC=0;
    dfdt_signl=0;
    dfdt_rst_PC=0;
    Freq_Counter=0;  
    dfdt_Counter=0;
    Freq_Start=0;
   
    RelayAllSignalPc=0;
    RelayAllWarnPc=0;
     
 Spi_DA1=0000;
 Spi_DA2=0000;
 DA_flag=0;
 
 TaskReg.run.bit.BinChange=1; //power on start YX message to display CPU
 
/* LEDStatus=0xff;  //状态指示灯状态
 UnitLEDStatus=0xff;
 Number=0;
 KEY=0;
*/
 UnitLED_Fresh(0x00);
 StatusLED_OFF(0xff);
 
 Bak_Second=second();
}

//===========================================================================
// followed routines to  kick external watchdog
//===========================================================================
void Dog_f(void)
{
 static int ExternDogMark=0x01;
 
 ExternDogMark=ExternDogMark^0x01;
 if(ExternDogMark) GpioDataRegs.GPASET.bit.GPIOA14=0x01;
 else GpioDataRegs.GPACLEAR.bit.GPIOA14=0x01;
 
}

//===========================================================================
// followed routines to  read frequences from CPLD
//===========================================================================

//###########################################################################
//
void delay_loop(void)
{
    long      i;
    for (i = 0; i < 20000; i++) {}
}


//===========================================================================
// followed routines to  data Memory
//===========================================================================
void Mem_selfchk(Uint32 start_address, Uint32 length)
{
    Uint16 * MEM_ADDR;
    Uint32 k,var;
 MEM_ADDR=(Uint16 *)start_address;
 for (k=0;k<length;k++)
   {
     *MEM_ADDR = 0xAAAA;
     var = *MEM_ADDR;
     if(var != 0xAAAA)
  Error_flag = Error_flag|0x0002;
     else
     *MEM_ADDR = 0x5555;
     var = *MEM_ADDR;
     if(var != 0x5555)
  Error_flag = Error_flag|0x0001;
  else
     MEM_ADDR++;
    }
}

void Mem_clear(Uint32 start_address, Uint32 length)
{
 Uint16 * MEM_ADDR;
 Uint32 k;
 MEM_ADDR=(Uint16 *)start_address;
 for (k=0;k<length;k++)
   {
     *MEM_ADDR++ = 0 ;
   }  
}


//===========================================================================
// No more.
//===========================================================================


关闭】 【打印
 
相关专题
 
友情链接:
© 2007 电子元件网 网站地图