|
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. //===========================================================================
|