线性驱动器/***************************************************************************
油底壳垫****************************************************************************/
#include "../include\DSP2833x_Device.h"
#include "../Task\Task_Global_h.h"
/***************************************************************************/
/*****************************************************************************cng加气机
SCI_B 中断函数
*****************************************************************************/
interrupt void SciB_Txd_ISR2000(void) //中断函数
{
Uint16 ax;
Sys.Cpld.CpldOutputReg3 |= 0x0100; // 接收 状态
Cpld_Reg3 = Sys.Cpld.CpldOutputReg3;
ScibRegs.SCIFFTX.bit.TXFFIENA = 0;
ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
ax = (ScibRegs.SCIRXST.all & 0x009c);
if(ax != 0) // 接收器错误
{
SCI_Init2000((void *)&ScibRegs, 67.5, 19200);
}
}
interrupt void SciB_Txd_ISR3000(void) //中断函数
{
Uint16 ax;
Sys.Cpld.CpldOutputReg3 |= 0x0100; // 接收 状态
Cpld_Reg3 = Sys.Cpld.CpldOutputReg3;
ScibRegs.SCIFFTX.bit.TXFFIENA = 0;
ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
ax = (ScibRegs.SCIRXST.all & 0x009c);
if(ax != 0) // 接收器错误
{
功夫面 SCI_Init((void *)&ScibRegs, 67.5, 19200);
}
}
/****************************************************************************
串口初始化,输入 参数:SCI端口,时钟频率,波特率
****************************************************************************/
void SCI_Init2000(struct SCI_REGS *SCI, float LSPCLK, float Baud)
{
Uint16 ax;
/* loopback 8 bit data */
SCI->SCICCR.all = 0x0f;
SCI->SCICTL1.all = 0x03;
SCI->SCICTL2.all = 0x00;
ax = (Uint16)((LSPCLK * 1000000) / (8 * Baud) - 1);
SCI->SCIHBAUD = (ax >> 8) & 0x00ff;
SCI->SCILBAUD = ax & 0x00ff;
SCI->SCIFFTX.all = 0x4000;
SCI->SCIFFTX.all|= 0x2000;
SCI->SCIFFTX.all|= 0x8000;
SCI->SCIFFRX.all = 0x4040;
SCI->SCIFFRX.bit.RXFIFORESET = 1;
SCI->SCIFFCT.all = 0x0003; // 4周期延迟
SCI->SCIPRI.bit.FREE = 1;
// 重新使能SCI
SCI->SCICTL1.all = 0x23;
}
/****************************************************************************
Number 是发送的数据个数
****************************************************************************/
void UartTxdbit8_RS485(struct SCI_REGS *SCI, Uint16 *Sbuf, Uint16 Number)
{
Uint16 Temp = 0;
while(Temp < Number)
{
if(SCI->SCIFFTX.bit.TXFFST == 0x10)
秸秆人造板 {
OSTimeDly(3); // 发送数据满FIFO,延时 3 ms
}else
热熔铜螺母 {
do{
SCI->SCITXBUF = Sbuf[Temp++];
}while((Temp < Number)&&(SCI->SCIFFTX.bit.TXFFST < 0x10));
}
}
SCI->SCIFFTX.bit.TXFFINTCLR = 1;
SCI->SCIFFTX.bit.TXFFIENA = 1; // 开中断
while((SCI->SCICTL2.bit.TXEMPTY == 0) // 数据没有发送完
||(SCI->SCICTL2.bit.TXRDY == 0) // 缓冲器满
||(SCI->SCIFFTX.bit.TXFFST != 0)) // FIFO 不是空的
{
OSTimeDly(1); // 没发送完,延时 1 ms
}
}
/****************************************************************************
接收通信数据
返回的是收到的数据个数,0 代表没有返回值
指针为返回数据保存的地址
****************************************************************************/