是否是配置有问题?用的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++);
}
}