我使用F2812的SCIB作为串口运行,外面接的是485的差分输入,进过示波器的实际测量,发现数据已经到DSP SCIB的接收引脚,但就是无法接收到数据。但可以发送。
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
void scib_loopback_init(void); void scib_fifo_init(void);
void scib_xmit(int a); //void error(int);
Uint16 LoopCount;
Uint16 ErrorCount;
void main(void)
{
Uint16 SendChar;
Uint16 ReceivedChar;
InitSysCtrl();
InitGpio();
EALLOW;
GpioMuxRegs.GPFMUX.all=0x0030; // Select GPIOs to be Sci pins
EDIS;
// Disable and clear all CPU interrupts:
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
LoopCount = 0;
ErrorCount = 0;
scib_fifo_init(); // Initialize the SCI FIFO
scib_loopback_init(); // Initalize SCI for digital loop back
SendChar = 0;
EALLOW;
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 0;
GpioMuxRegs.GPFDIR.bit.GPIOF6 = 1; //设置为输出
EDIS;
//用来使用485的接收功能 1为发送,0接收
GpioDataRegs.GPFDAT.bit.GPIOF6 = 0;
{
scib_xmit(SendChar);
while(ScibRegs.SCIFFRX.bit.RXFIFST !=1) { } // wait for XRDY =1 for empty state
ReceivedChar = ScibRegs.SCIRXBUF.all;
SendChar++;
SendChar &= 0x00FF;
}
void scib_loopback_init()
{
ScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
ScibRegs.SCICTL2.all =0x0003;
ScibRegs.SCICTL2.bit.TXINTENA =1;
ScibRegs.SCICTL2.bit.RXBKINTENA =1;
ScibRegs.SCIHBAUD =0x0000;
ScibRegs.SCILBAUD =0x0079;
ScibRegs.SCICCR.bit.LOOPBKENA =0; // Enable loop back
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
void scib_xmit(int a)
{
ScibRegs.SCITXBUF=a;
}
void scib_fifo_init()
{
ScibRegs.SCIFFTX.all=0xE040;
ScibRegs.SCIFFRX.all=0x204f;
ScibRegs.SCIFFCT.all=0x0;
}