DSP28335 485通讯问题 200
用了一根485转USB线,发送没问题,接收不了,接收使能压低(允许接收)时FE就置位出错(就算我没有从串口发信息给它,总线悬空),之前用232没有任何问题。调试时用的程序...
用了一根485转USB线,发送没问题,接收不了,接收使能压低(允许接收)时FE就置位出错(就算我没有从串口发信息给它,总线悬空),之前用232没有任何问题。调试时用的程序。
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#define RX_EN GpioDataRegs.GPBCLEAR.bit.GPIO49=1;
#define TX_EN GpioDataRegs.GPBSET.bit.GPIO49=1;
void delay (Uint16 t)
{ Uint16 i;
while(t--)
{
for(i=0;i<125;i++)
;
}
}
void InitSysCtrl()
{
Uint16 i;
EALLOW;
SysCtrlRegs.WDCR=0x0068;
SysCtrlRegs.PLLCR.all=0xA;
for(i=0;i<5000;i++);
SysCtrlRegs.HISPCP.all=0x0001;
SysCtrlRegs.LOSPCP.all=0x0002;
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK=1;
SysCtrlRegs.PCLKCR0.bit.SCIBENCLK=1;
EDIS;
}
void InitGpio()
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO22=0;//SCIB RX TX上拉电阻
GpioCtrlRegs.GPAPUD.bit.GPIO23=0;
GpioCtrlRegs.GPAMUX2.bit.GPIO22=3;
GpioCtrlRegs.GPAMUX2.bit.GPIO23=3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO23=3;//scib
GpioCtrlRegs.GPBPUD.bit.GPIO49=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO49=0;//485
GpioCtrlRegs.GPBDIR.bit.GPIO49=1;
GpioDataRegs.GPBSET.bit.GPIO49=1;
EDIS;
}
void InitSCIB()
{
ScibRegs.SCICCR.all=0x07;
ScibRegs.SCICTL1.all=0x3;
ScibRegs.SCICTL2.all=0x3;
ScibRegs.SCICTL2.bit.TXINTENA = 1;
ScibRegs.SCICTL2.bit.RXBKINTENA =1;
// ScibRegs.SCICTL1.bit.RXERRINTENA=1;
ScibRegs.SCIHBAUD=0x00;
ScibRegs.SCILBAUD=0x79;
ScibRegs.SCICTL1.bit.SWRESET=1;
}
void main()
{
InitSysCtrl();
InitGpio();
DINT;
IER=0;
IFR=0;
InitPieCtrl();
InitPieVectTable();
InitSCIB();
PieCtrlRegs.PIEIER9.bit.INTx3=1;
PieCtrlRegs.PIEIER9.bit.INTx4=1;//SCIB
IER|=M_INT9;//scib
EINT;
ERTM;
ScibRegs.SCITXBUF='a';
delay(7);
RX_EN;
while(1)
{
if(ScibRegs.SCICTL1.bit.SWRESET==0)ScibRegs.SCICTL1.bit.SWRESET=1;
}
}
接收中断中有RXERROR为1时,SWRESET=0。
可以的话加我QQ478820944,早上可能不在,解决可以另有报酬。 展开
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#define RX_EN GpioDataRegs.GPBCLEAR.bit.GPIO49=1;
#define TX_EN GpioDataRegs.GPBSET.bit.GPIO49=1;
void delay (Uint16 t)
{ Uint16 i;
while(t--)
{
for(i=0;i<125;i++)
;
}
}
void InitSysCtrl()
{
Uint16 i;
EALLOW;
SysCtrlRegs.WDCR=0x0068;
SysCtrlRegs.PLLCR.all=0xA;
for(i=0;i<5000;i++);
SysCtrlRegs.HISPCP.all=0x0001;
SysCtrlRegs.LOSPCP.all=0x0002;
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK=1;
SysCtrlRegs.PCLKCR0.bit.SCIBENCLK=1;
EDIS;
}
void InitGpio()
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO22=0;//SCIB RX TX上拉电阻
GpioCtrlRegs.GPAPUD.bit.GPIO23=0;
GpioCtrlRegs.GPAMUX2.bit.GPIO22=3;
GpioCtrlRegs.GPAMUX2.bit.GPIO23=3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO23=3;//scib
GpioCtrlRegs.GPBPUD.bit.GPIO49=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO49=0;//485
GpioCtrlRegs.GPBDIR.bit.GPIO49=1;
GpioDataRegs.GPBSET.bit.GPIO49=1;
EDIS;
}
void InitSCIB()
{
ScibRegs.SCICCR.all=0x07;
ScibRegs.SCICTL1.all=0x3;
ScibRegs.SCICTL2.all=0x3;
ScibRegs.SCICTL2.bit.TXINTENA = 1;
ScibRegs.SCICTL2.bit.RXBKINTENA =1;
// ScibRegs.SCICTL1.bit.RXERRINTENA=1;
ScibRegs.SCIHBAUD=0x00;
ScibRegs.SCILBAUD=0x79;
ScibRegs.SCICTL1.bit.SWRESET=1;
}
void main()
{
InitSysCtrl();
InitGpio();
DINT;
IER=0;
IFR=0;
InitPieCtrl();
InitPieVectTable();
InitSCIB();
PieCtrlRegs.PIEIER9.bit.INTx3=1;
PieCtrlRegs.PIEIER9.bit.INTx4=1;//SCIB
IER|=M_INT9;//scib
EINT;
ERTM;
ScibRegs.SCITXBUF='a';
delay(7);
RX_EN;
while(1)
{
if(ScibRegs.SCICTL1.bit.SWRESET==0)ScibRegs.SCICTL1.bit.SWRESET=1;
}
}
接收中断中有RXERROR为1时,SWRESET=0。
可以的话加我QQ478820944,早上可能不在,解决可以另有报酬。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应
|
问题解决率99%
|
24小时在线
立即免费咨询律师
13295人正在获得一对一解答
哈尔滨冰雪奇缘1分钟前提交了问题
南京彩虹之旅3分钟前提交了问题
西安夜猫子4分钟前提交了问题