MotorControlSdfmCla/epwm_test_biss_c_cpu2/src/frm_uart.c

140 lines
2.6 KiB
C
Raw Normal View History

/*
* frm_uart.c
*
* Created on: 21 <EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
* Author: seklyuts
*/
#include "f28x_project.h"
//#include "f2838x_pinmux.h"
#include "frm_uart.h"
#define LSPCLK_HZ 50000000.0
#define BAUD 57600.0
#define BRR LSPCLK_HZ/(BAUD*8) + 1
uint16_t frmEn = 0;
uint16_t FMSTRIsEnable(void)
{
return frmEn;
}
void FMSTREnableClr(void)
{
frmEn = 0;
}
void FMSTREnableSet(void)
{
frmEn = 1;
}
void FRMUartInit(void)
{
FMSTR_Init();
EALLOW;
CpuSysRegs.PCLKCR7.bit.SCI_A = 1;
EDIS;
#ifdef REF0
EALLOW;
GpioDataRegs.GPADAT.bit.GPIO21 = 1;
GpioDataRegs.GPCDAT.bit.GPIO83 = 0;
EDIS;
#else
EALLOW;
GpioDataRegs.GPEDAT.bit.GPIO133 = 1;
GpioDataRegs.GPEDAT.bit.GPIO145 = 0;
EDIS;
#endif
EALLOW;
SciaRegs.SCICCR.all = 0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all = 0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA = 0;
SciaRegs.SCICTL2.bit.RXBKINTENA = 0;
uint16_t Brr = BRR;
SciaRegs.SCIHBAUD.all = 0xFF & (Brr>>8);//0x0002;
SciaRegs.SCILBAUD.all = 0xFF & Brr;//0x008B;
SciaRegs.SCICTL1.all = 0x0023; // Relinquish SCI from Reset
SciaRegs.SCICTL1.bit.RXENA = 1;
SciaRegs.SCICTL1.bit.TXENA = 1;
EDIS;
FMSTREnableSet();
}
void FMSTR_SCI_PUTCHAR(char _data)
{
SciaRegs.SCITXBUF.all = _data;
}
char FMSTR_SCI_GETCHAR()
{
return SciaRegs.SCIRXBUF.all;
}
void FMSTR_SCI_RE(void)
{
// GpioDataRegs.GPCDAT.bit.GPIO83 = 0;
SciaRegs.SCICTL1.bit.RXENA = 1;
}
void FMSTR_SCI_RD(void)
{
// GpioDataRegs.GPCDAT.bit.GPIO83 = 1;
SciaRegs.SCICTL1.bit.RXENA = 0;
}
void FMSTR_SCI_TE(void)
{
// GpioDataRegs.GPADAT.bit.GPIO21 = 1;
SciaRegs.SCICTL1.bit.TXENA = 1;
}
void FMSTR_SCI_TD(void)
{
// GpioDataRegs.GPADAT.bit.GPIO21 = 0;
SciaRegs.SCICTL1.bit.TXENA = 0;
}
FMSTR_SCISR FMSTR_SCI_RDCLRSR(void)
{
FMSTR_SCISR SciSR = 0;
if (SciaRegs.SCIRXST.bit.RXRDY) // UART receive buffer full
{
SciSR = FMSTR_SCISR_RDRF;
}
// if (SciaRegs.SCIRXST.bit.RXWAKE) // UART receive buffer full
// {
// SciSR = FMSTR_SCISR_RDRF;
// }
if(SciaRegs.SCICTL2.bit.TXEMPTY) // UART is transmitting data or transmit register full (UART busy)
{
SciSR |= FMSTR_SCISR_TDRE;
}
return SciSR;
}