第4篇

编程入门 行业动态 更新时间:2024-10-19 03:27:34

第4篇

第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篇

本文发布于:2023-06-28 04:03:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/921475.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!