This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c2000 SCIa与PC端通信,接收标志RXDY一直为零,RX wake已经置1

Other Parts Discussed in Thread: TMS320F28027

是否是配置有问题?用的C2000 launchpad TMS320F28027开发板

读到数据才进行发送

串口灯闪,PC端有数据发出,但是mcu收不到,接收标志RXDY一直为零,而RX wake已经置1

独立测试发送是,发送正常

而测试读数据时却收不到,这是为什么呢?请各位大神帮忙看下,本人新手,现在被搞糊涂了。。。

#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include <stdio.h>
#include <file.h>

#include "f2802x_common/include/adc.h"
#include "f2802x_common/include/clk.h"
#include "f2802x_common/include/flash.h"
#include "f2802x_common/include/gpio.h"
#include "f2802x_common/include/pie.h"
#include "f2802x_common/include/pll.h"
#include "f2802x_common/include/sci.h"
#include "f2802x_common/include/wdog.h"

void scia_init(void);
uint16_t sciaTx_Ready(void);//发送标志判断函数
uint16_t sciaRx_Ready(void);
void msdelay(Uint16 n);//延时函数

uint16_t sdataA; // Send data for SCI-A
uint16_t rdataA; // Received data for SCI-A
uint16_t Rx_flag=0;//数据读取标志,待读取0/已读取1(1可发送)

ADC_Handle myAdc;
CLK_Handle myClk;
FLASH_Handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
SCI_Handle mySci;

void main(void)
{
// uint16_t i,j;

CPU_Handle myCpu;
PLL_Handle myPll;
WDOG_Handle myWDog;

// Initialize all the handles needed for this application
myAdc = ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
mySci = SCI_init((void *)SCIA_BASE_ADDR, sizeof(SCI_Obj));
myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));

// Perform basic system initialization
WDOG_disable(myWDog);
CLK_enableAdcClock(myClk);
(*Device_cal)();

//Select the internal oscillator 1 as the clock source
CLK_setOscSrc(myClk, CLK_OscSrc_Internal);

// Setup the PLL for x10 /2 which will yield 50Mhz = 10Mhz * 10 / 2
PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);

// Initialize GPIO
GPIO_setPullUp(myGpio, GPIO_Number_28, GPIO_PullUp_Enable);
GPIO_setPullUp(myGpio, GPIO_Number_29, GPIO_PullUp_Disable);
GPIO_setQualification(myGpio, GPIO_Number_28, GPIO_Qual_ASync);
GPIO_setMode(myGpio, GPIO_Number_28, GPIO_28_Mode_SCIRXDA);
GPIO_setMode(myGpio, GPIO_Number_29, GPIO_29_Mode_SCITXDA);

 scia_init();        // Init SCI-A

for(;;)
{

if((sciaTx_Ready() == 1)&&(Rx_flag == 1))
{
SCI_putDataBlocking(mySci, rdataA); // Send data
Rx_flag = 0;
msdelay(1000);
msdelay(1000);
}

if(sciaRx_Ready() == 1)
{
rdataA = SCI_getData(mySci);
Rx_flag = 1;
}
}
}

void scia_init()
{
CLK_enableSciaClock(myClk);

// 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SCI_disableParity(mySci);
SCI_setNumStopBits(mySci, SCI_NumStopBits_One);
SCI_setCharLength(mySci, SCI_CharLength_8_Bits);

// enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SCI_enableTx(mySci);
SCI_enableRx(mySci);
SCI_enableTxInt(mySci);
SCI_enableRxInt(mySci);
//SCI_disableRxInt(mySci);

/* SCI_enableLoopBack(mySci);*/

// SCI BRR = LSPCLK/(SCI BAUDx8) - 1
#if (CPU_FRQ_60MHZ)
SCI_setBaudRate(mySci, (SCI_BaudRate_e)194);
#elif (CPU_FRQ_50MHZ)
SCI_setBaudRate(mySci, SCI_BaudRate_9_6_kBaud);
#elif (CPU_FRQ_40MHZ)
SCI_setBaudRate(mySci, (SCI_BaudRate_e)129);
#endif

SCI_enable(mySci);

return;
}

uint16_t sciaTx_Ready(void)
{
uint16_t i;

if(SciaRegs.SCICTL2.bit.TXRDY == 1)

{
i = 1;
//返回 1 说明发送器已经准备就绪,可以接收新的数据进行发送
}
else
{
i = 0;
}

return(i);
}

uint16_t sciaRx_Ready(void)
{
uint16_t i;

if(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
i = 1;

//返回 1 说明发送器已经准备就绪,可以接收新的数据进行发送
}
else
{

i = 0;
}

return(i);

}

//延时函数
void msdelay(Uint16 n)
{
int i,j;
for(i=n;i>0;i--)
{
for(j=0;j<1000;j++);
}
}