📄 initall.c
字号:
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 + -