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

📄 initall.c

📁 此代码应用与f2812的通讯程序!!方便用户编程!
💻 C
📖 第 1 页 / 共 2 页
字号:
	case BD_2400 : 
		ScibRegs.SCIHBAUD=0x6;
		ScibRegs.SCILBAUD=0x19;
		mintime = 10;
		break;
	case BD_4800 : 
		ScibRegs.SCIHBAUD=0x3;
		ScibRegs.SCILBAUD=0x0C;
		mintime = 8;
		break;
	case BD_9600 :        
		ScibRegs.SCIHBAUD=0x1;
		ScibRegs.SCILBAUD=0x85;
		mintime = 5;
		break;
	case BD_19200 : 
		ScibRegs.SCIHBAUD=0x0;
		ScibRegs.SCILBAUD=0xC2;
		mintime = 4;
		break;
	case BD_38400 :
        ScibRegs.SCIHBAUD=0x0;
		ScibRegs.SCILBAUD=0x60;
		mintime = 2;
		break;
    case BD_57600 :
        ScibRegs.SCIHBAUD=0x0;
		ScibRegs.SCILBAUD=0x41;
		mintime = 2;
		break;
	case BD_115200:
        ScibRegs.SCIHBAUD=0x0;
		ScibRegs.SCILBAUD=0x1F;
		mintime = 2;
		break;
	default:	
        ScibRegs.SCIHBAUD = 0x1;
		ScibRegs.SCILBAUD = 0x85;
		mintime = 5;
		break;			
	}

	if(ComParm[1].txouttime < mintime)
	{ 
		ComParm[1].txouttime = mintime;
	}
	if(ComParm[1].rxouttime < mintime)
	{
		ComParm[1].rxouttime = mintime;
	}	
	
	// Initialize SCI-B:
	ScibRegs.SCICCR.all=0x67;//一个停止位,偶校验,八位字符
	//PLL=0x8,LSPCLK=120M/4
	
	ScibRegs.SCICTL1.all=0x3;//使能发送接收
	ScibRegs.SCICTL2.all=0x3;//使能发送接收中断	
    ScibRegs.SCIPRI.bit.FREE=1;//Complete current receive/transmit sequence before stopping	
	
	ScibRegs.SCIFFTX.all=0xE000; //FIFO及其发送使能,发送中断级位为0,但暂不使能
	ScibRegs.SCIFFRX.all=0x2021; //FIFO接收中断使能,级位为1
	
	ScibRegs.SCICTL1.bit.RXERRINTENA = 1;
	
	ScibRegs.SCIFFCT.bit.FFTXDLY=0x0F; //从FIFO寄存器到发送移位寄存器的延迟,可根据需要调整
	ScibRegs.SCICTL1.bit.SWRESET=1; //SCIB使能,脱离复位状态
}

//初始化SPI
void InitSpi(void)
{
	SpiRegs.SPICCR.bit.SPISWRESET=0;//initialization begin
	SpiRegs.SPICCR.bit.CLKPOLARITY=0;//output when up edge,input when down edge
	SpiRegs.SPICCR.bit.SPILBK=0;// only used in self-test
	SpiRegs.SPICCR.bit.SPICHAR=7;//8 bits
	
	SpiRegs.SPICTL.bit.CLK_PHASE=0;//  half phase delay
	SpiRegs.SPICTL.bit.MASTER_SLAVE=1;//master cpu
	SpiRegs.SPICTL.bit.TALK=1;//transmit enable
	SpiRegs.SPICTL.bit.SPIINTENA=1;//interrupt enable

	SpiRegs.SPISTS.all=0x0000;
	SpiRegs.SPIBRR=0x7F;//0x7f=120M/4/230k -1; the range of bps is from LSPCLK/127 to LSPCLK/4
//-----------------------------fifo------------------------------------------
	SpiRegs.SPIFFTX.bit.SPIRST=1;
	SpiRegs.SPIFFTX.bit.SPIFFENA=1;
	SpiRegs.SPIFFTX.bit.TXFFINTCLR=1;

	SpiRegs.SPIFFRX.bit.RXFFIL=1;
	
	SpiRegs.SPICCR.bit.SPISWRESET=1;// initialization is over	
	SpiRegs.SPIFFTX.bit.TXFIFO=1;
	SpiRegs.SPIFFRX.bit.RXFIFORESET=1;//RECIEVE ENABLE
	SpiRegs.SPIPRI.bit.FREE = 1;        

	ClearSpiBuf();
}	

//清除TX,RX缓存
void ClearSpiBuf()
{
	while(SpiRegs.SPIFFTX.bit.TXFFST!=0);//clear the send buffer
	while(SpiRegs.SPIFFRX.bit.RXFFST!=0)//clear the receive buffer
	{
		SpiRegs.SPIRXBUF = SpiRegs.SPIRXBUF;
	}
}

//初始化系统时钟
void InitSysCtrl(void)
{
	Uint16 i;
	EALLOW;
	
	// Initalize PLL
	SysCtrlRegs.PLLCR.bit.DIV = 0xA;//30*4MHz
	for(i= 0; i< 5000; i++){}// Wait for PLL to lock
	
	// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
	SysCtrlRegs.HISPCP.all = 0x0003;
	SysCtrlRegs.LOSPCP.all = 0x0002;	
	
	// Peripheral clock enables set for the selected peripherals.   
	SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
	SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
	SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
	SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;
	SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;
	SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
	
	EDIS;
}

//关闭内部看门钩
void DisInterWatchdog()
{
    EALLOW;
	SysCtrlRegs.WDCR= 0x0068;
    EDIS;
}

//初始化外部存储器接口读写定时
void InitXintf(void)
{
    XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
    XintfRegs.XINTCNF2.bit.WRBUFF = 0;
    XintfRegs.XINTCNF2.bit.CLKOFF = 0;
    XintfRegs.XINTCNF2.bit.CLKMODE = 1;
    
    XintfRegs.XTIMING0.bit.XWRLEAD = 3;
    XintfRegs.XTIMING0.bit.XWRACTIVE = 7;
    XintfRegs.XTIMING0.bit.XWRTRAIL = 3;
    XintfRegs.XTIMING0.bit.XRDLEAD = 3;
    XintfRegs.XTIMING0.bit.XRDACTIVE = 7;
    XintfRegs.XTIMING0.bit.XRDTRAIL = 3;
    XintfRegs.XTIMING0.bit.X2TIMING = 1;
    XintfRegs.XTIMING0.bit.USEREADY = 1;
    XintfRegs.XTIMING0.bit.READYMODE = 1;  // sample asynchronous
    XintfRegs.XTIMING0.bit.XSIZE = 3; 
       
    XintfRegs.XTIMING1.bit.XWRLEAD = 3;
    XintfRegs.XTIMING1.bit.XWRACTIVE = 7;
    XintfRegs.XTIMING1.bit.XWRTRAIL = 3;
    XintfRegs.XTIMING1.bit.XRDLEAD = 3;
    XintfRegs.XTIMING1.bit.XRDACTIVE = 7;
    XintfRegs.XTIMING1.bit.XRDTRAIL = 3;
    XintfRegs.XTIMING1.bit.X2TIMING = 1;
    XintfRegs.XTIMING1.bit.USEREADY = 1;
    XintfRegs.XTIMING1.bit.READYMODE = 1;  // sample asynchronous
    XintfRegs.XTIMING1.bit.XSIZE = 3;
    
    XintfRegs.XTIMING2.bit.XWRLEAD = 3;
    XintfRegs.XTIMING2.bit.XWRACTIVE = 7;
    XintfRegs.XTIMING2.bit.XWRTRAIL = 3;
    XintfRegs.XTIMING2.bit.XRDLEAD = 3;
    XintfRegs.XTIMING2.bit.XRDACTIVE = 7;
    XintfRegs.XTIMING2.bit.XRDTRAIL = 3;
    XintfRegs.XTIMING2.bit.X2TIMING = 1;
    XintfRegs.XTIMING2.bit.USEREADY = 1;
    XintfRegs.XTIMING2.bit.READYMODE = 1;  // sample asynchronous
    XintfRegs.XTIMING2.bit.XSIZE = 3;
    
    XintfRegs.XTIMING6.bit.XWRLEAD = 3;
    XintfRegs.XTIMING6.bit.XWRACTIVE = 7;
    XintfRegs.XTIMING6.bit.XWRTRAIL = 3;
    XintfRegs.XTIMING6.bit.XRDLEAD = 3;
    XintfRegs.XTIMING6.bit.XRDACTIVE = 7;
    XintfRegs.XTIMING6.bit.XRDTRAIL = 3;
    XintfRegs.XTIMING6.bit.X2TIMING = 1;
    XintfRegs.XTIMING6.bit.USEREADY = 1;
    XintfRegs.XTIMING6.bit.READYMODE = 1;  // sample asynchronous
    XintfRegs.XTIMING6.bit.XSIZE = 3;
    
    XintfRegs.XTIMING7.bit.XWRLEAD = 3;
    XintfRegs.XTIMING7.bit.XWRACTIVE = 7;
    XintfRegs.XTIMING7.bit.XWRTRAIL = 3;
    XintfRegs.XTIMING7.bit.XRDLEAD = 3;
    XintfRegs.XTIMING7.bit.XRDACTIVE = 7;
    XintfRegs.XTIMING7.bit.XRDTRAIL = 3; 
    XintfRegs.XTIMING7.bit.X2TIMING = 1;
    XintfRegs.XTIMING7.bit.USEREADY = 1;
    XintfRegs.XTIMING7.bit.READYMODE = 1;  // sample asynchronous
    XintfRegs.XTIMING7.bit.XSIZE = 3;
    
    XintfRegs.XBANK.bit.BANK = 7;
    XintfRegs.XBANK.bit.BCYC = 7; 
	
	asm(" RPT #7 || NOP"); 
}	

void InitXIntrupt(void)
{
	XIntruptRegs.XINT2CR.bit.ENABLE=1;
	XIntruptRegs.XINT2CR.bit.POLARITY=0;//falling edge
}	

//调整采样频率

void AdjustSample()
{
	unsigned int temp;
	 
	if(cePin.capnum2 > cePin.capnum1)
		temp = cePin.capnum2-cePin.capnum1;
	else
		temp = cePin.capnum2+(0xFFFF-cePin.capnum1);
		
	if (temp > 14204 || temp < 11160)// 44Hz < Fre < 56Hz
		return;
		
	//if (Yc_Ave[ID_Yc_Fre] < 4400) Yc_Ave[ID_Yc_Fre] = 5000;
	   
    Yc_Ave[ID_Yc_Fre] = 62500000l/temp;//f = (120M*50)/(32*temp)
	
	temp = temp>>7;
	
	if((temp<=0x6C)&&(temp>=0x58)) cePin.pinLvNow = temp;
}

/*
//--------------------参数-----------------------------------------

void  ReadParm()
{
	EEPROM_Data[0] = 6708;
	EEPROM_Data[3] = 6982;
	EEPROM_Data[7] = 6780;

	ComParm[0].baudrate = BD_9600;

	GetSKPQ();
}*/

/*
void AdjParm()
{
	int i;	
	for (i = ID_PARM_K_Ua; i <=  ID_PARM_K_DC2; i++)
	{		
		if (EEPROM_Data[i] < 100) EEPROM_Data[i] = 13000;
	}

	for (i = ID_PARM_FAULT_SET_E1sd; i <=  ID_PARM_FAULT_SET_I2z; i++)
	{		
		if (EEPROM_Data[i] < 10) EEPROM_Data[i] = 10;
	}
	for (i = ID_PARM_0_Ua; i <=  ID_PARM_0_I20; i++)
	{		
		if (EEPROM_Data[i] < 100) EEPROM_Data[i] = 2050;
	}
	for (i = 0; i < 16; i++)
	{
		DDu[i] = EEPROM_Data[(i<<1)+ID_PARM_DPP1H];
		DDu[i] <<= 16;
		DDu[i] += EEPROM_Data[(i<<1)+ID_PARM_DPP1L];
	}

}
*/

void  GetSKPQ() /* kparm -> kpq */
{
    //Kp = Ku * Ki/8/1000 
 /*   int i,j,k;
	long temp;
	
	for (i = ID_PARM_K_Ua, j = ID_PARM_K_I1a, k = ID_K_PQ1_A; i <= ID_PARM_K_Uc; i++, j++, k++)
	{
		temp = (long)EEPROM_Data[i] * EEPROM_Data[j]; 
		temp >>= 4;
		K_PQ[k] = (int)(temp/PQk);

		if(EEPROM_Data[j] < 0)
		 	EEPROM_Data[j] = -EEPROM_Data[j];	
	}
	
	for (i = ID_PARM_K_Ua, j = ID_PARM_K_I2a, k = ID_K_PQ2_A; i <= ID_PARM_K_Uc; i++, j++,k++)
	{
		temp = (long)EEPROM_Data[i] * EEPROM_Data[j]; 
		temp >>= 4;

		K_PQ[k] = (int)(temp/PQk);

		if(EEPROM_Data[j] < 0)
		 	EEPROM_Data[j] = -EEPROM_Data[j];	
	}*/
}

/*
void SelfTest(void)
{
	int i,bit;
	int _1306RevDat[10];
	unsigned int *ExRamStart = (unsigned int *)0x138000;
	int ExRamTest;
	
	
	for (i = 0; i < 10; i++)
	{			
		Send1306byte(0xA000 + i*0x100, i*0x100);
		delay(10);
	}
	delay(5000);		
	Rev1306byte(0x2000, _1306RevDat, 10);
	for (i = 0; i < 10; i++)
	{			
		if (_1306RevDat[i] != i)  Self_Test.spi_1306 = 1;  
	}

	bit=1;
	for	(i = 0; i < 16; i++)
	{
		*(ExRamStart + bit) = bit;
		bit<<=1;
	}
	bit=1;
	for	(i = 0; i < 16; i++)
	{
		ExRamTest = *(ExRamStart +bit);
		
		if (ExRamTest != bit)  Self_Test.exram = 1;  
		bit <<=1;
	}
	
	memcpy(&RemoteState, &Self_Test, 2);
	if(RemoteState)	 RemoteState |= 0x80000000l;
}
*/


Uint16 HextoBCD(Uint16 hex) 
{ 
	Uint16 bcd=0;
	hex &= 0xFF;

	if(hex > 99) 
	{
		return 0;
	}
	while(hex>=10)
	{
		bcd+=1;
		hex -= 10;
	}               
	bcd <<= 4;
	bcd += hex;

	return bcd;  
}   

Uint16 BCDtoHex(Uint16 bcd) 
{
	Uint16 result;

	result= bcd&0x000F;

	result += ((bcd&0x00F0)>>4)*10;
	   
	return result;  
}

unsigned char CheckSum(Uint16 * pBuffer, int nLength)
{
	int i;
	unsigned char ReValue = 0;
	for( i=0; i<nLength; i++)
	{
		ReValue += pBuffer[i];
	}
	
	return (ReValue & 0x0FF);
}  

void delay(unsigned int num)
{
	unsigned int i=0;
	for(i=0;i<num;i++);
}
//============================ No More ===========================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -