第4篇
一、IIC初始化,用于与EEPROM通讯
/*************************************************************************/
/* Name : I2C_Init */
/* */
/* Init IIC */
/* */
/* In : none */
/* Out : none */
/* Return: none */
/*************************************************************************/
void I2C_Init(void)
{// Initialize I2CI2caRegs.I2CMDR.bit.IRS = 0;I2caRegs.I2CSAR = 0x0050; // Setup slave addressI2caRegs.I2CPSC.all = 7; // Prescaler - need 7-12 Mhz on module clkI2caRegs.I2CCLKL = 30; // NOTE: must be non zeroI2caRegs.I2CCLKH = 30; // NOTE: must be non zeroI2caRegs.I2CIER.all = 0x00;I2caRegs.I2CMDR.all = 0x0020; // Take I2C out of reset// Stop I2C when suspendedI2caRegs.I2CFFTX.all = 0x0000; // Enable FIFO mode and TXFIFOI2caRegs.I2CFFRX.all = 0x0000; // Enable RXFIFO, clear RXFFINT,return;
}
二、EQEP初始化
/*************************************************************************/
/* Name : Init_EQEP */
/* */
/* Init EQEP */
/* */
/* In : nont */
/* Out : none */
/* Return: none */
/*************************************************************************/
void Init_EQEP(void)
{//UP计数模式(正逻辑)//EQep1Regs.QDECCTL.bit.QSRC = 2; // UP count mode for frequency measurementEQep1Regs.QDECCTL.bit.QSRC = 1; // Direction Count ModeEQep1Regs.QDECCTL.bit.XCR = 1; // 1x resolution (Count the rising edge only)EQep1Regs.QDECCTL.bit.QAP = 0; // QEPA input polarity EQep1Regs.QDECCTL.bit.QBP = 0; // QEPB input polarity EQep1Regs.QEPCTL.bit.FREE_SOFT = 2; //(Position counter/Watchdog counter/Unit Timer/Capture Timer) is unaffected by emulation suspendEQep1Regs.QEPCTL.bit.PCRM = 01; // QPOSCNT reset on maximum positionEQep1Regs.QEPCTL.bit.UTE = 0; // Disable eQEP unit timerEQep1Regs.QEPCTL.bit.QCLM = 1; // Latch on unit time outEQep1Regs.QPOSMAX = 0xffff;EQep1Regs.QEPCTL.bit.QPEN = 1; // QEP enableEQep1Regs.QCAPCTL.bit.UPPS = 0; // QCLK/1 for unit positionEQep1Regs.QCAPCTL.bit.CCPS = 0; // SYSCLKOUT/1 for CAP clockEQep1Regs.QCAPCTL.bit.CEN = 0; // eQEP capture unit is disabledEQep2Regs.QDECCTL.bit.QSRC = 0; // Quadrature count modeEQep2Regs.QDECCTL.bit.XCR = 0; // 2x resolution (Count the rising/falling edge)EQep2Regs.QEPCTL.bit.FREE_SOFT = 0; // (Position counter/Watchdog counter/Unit Timer/Capture Timer) stops immediately on emulation suspendEQep2Regs.QEPCTL.bit.PCRM = 01; // QPOSCNT reset on maximum positionEQep2Regs.QEPCTL.bit.UTE = 0; // Unit Timer disableEQep2Regs.QEPCTL.bit.WDE = 0; // disable QEP watchdog timerEQep2Regs.QPOSMAX = 0xffff; // max position,compatible with 16bits T2 counterEQep2Regs.QEPCTL.bit.QPEN = 1; // QEP enableEQep2Regs.QCAPCTL.bit.UPPS = 0; // QCLK/1 for unit positionEQep2Regs.QCAPCTL.bit.CCPS = 7; // SYSCLKOUT/128 for CAP clockEQep2Regs.QCAPCTL.bit.CEN = 1; // eQEP capture unit is enabled}
- EQEP1用于外部脉冲计数,这里默认仅初始化正逻辑,后面可根据参数需要重新初始化,可实现负逻辑及正交计数;
- EQEP2用于对电机增加式编码器反馈计数,用于测速
三、ECAP初始化,用于捕获电机编码器反馈的Z信号
/*************************************************************************/
/* Name : Init_ECAP */
/* */
/* Init EQEP */
/* */
/* In : nont */
/* Out : none */
/* Return: none */
/*************************************************************************/
void Init_ECAP(void)
{ECap3Regs.ECCTL1.all = 0x0102; // Capture Event 1 triggered on a rising edgeECap3Regs.ECCTL2.all = 0x0010;//Enable Capture Event 1 as an Interrupt sourceECap3Regs.ECEINT.bit.CEVT1 = 1;
}
四、SCI初始化 485通讯用
/*************************************************************************/
/* Name : Init_SCIB */
/* */
/* Init SCI */
/* */
/* In : none */
/* Out : none */
/* Return: none */
/*************************************************************************/
void Init_SCIB(void)
{ ScibRegs.SCICCR.all = 0x87;//8位数据长度,2位停止位,后面根据参数更改ScibRegs.SCIHBAUD = 1;ScibRegs.SCILBAUD = 0x23;//19200波特率、后面根据参数更改ScibRegs.SCICTL1.bit.SWRESET = 0;ScibRegs.SCICTL1.all = 0x0023; //启动SCISciaRegs.SCICTL2.all |= 0x2; //开Scib接收中断SciaRegs.SCICTL1.bit.RXENA = 1; //开Scib接收使能GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;
}
- 时钟为45M,
- 波特率计算方法,BRR=45000000/(19200*8)-1=0x123
五、SPI初始化,用于键盘显示串行通讯
/*************************************************************************/
/* Name : Init_SPIA */
/* */
/* Init SPI */
/* */
/* In : none */
/* Out : none */
/* Return: none */
/*************************************************************************/
void Init_SPIA(void)
{SpiaRegs.SPICCR.all = 0x0047;//8位数据长度,下降沿输入,上升沿输出SpiaRegs.SPICTL.all = 0x0006;//主机SpiaRegs.SPIBRR = 0x002C; // 1M速率SpiaRegs.SPICCR.all = 0x00C7;//复位SpiaRegs.SPIPRI.bit.FREE = 1;//设置FIFO功能SpiaRegs.SPIFFTX.all = 0xE040;SpiaRegs.SPIFFRX.all = 0X204F;SpiaRegs.SPIFFCT.all = 0X0;
}
- 1M速率 BRR=45000000/1000000-1=0x2C
六、TZ初始化 用于硬件触发过流时,封锁驱动
/*************************************************************************/
/* Name : Init_Tz */
/* */
/* Init TZ */
/* */
/* In : nont */
/* Out : none */
/* Return: none */
void Init_Tz(void)
{EALLOW;EPwm1Regs.TZSEL.all = 0x100; //使能TZ中断封锁EPWM1EPwm1Regs.TZCTL.all = 0x5; //强制高输出EPwm1Regs.TZEINT.bit.OST = 1; //使能中断EPwm2Regs.TZSEL.all = 0x100;EPwm2Regs.TZCTL.all = 0x5;EPwm2Regs.TZEINT.all = 0;EPwm3Regs.TZSEL.all = 0x100;EPwm3Regs.TZCTL.all = 0x5;EPwm3Regs.TZEINT.all = 0;EPwm1Regs.TZFRC.bit.OST=1; //通过软件强制一次TZ保护EPwm2Regs.TZFRC.bit.OST=1; EPwm3Regs.TZFRC.bit.OST=1;EDIS;
}
更多推荐
第4篇
发布评论