首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

edk怎样用串口接一次很多数据

edk怎样用串口接一次很多数据

/***************************** Include Files *********************************/
#include "stdio.h"
#include "xparameters.h"
#include "xtmrctr.h"
#include "xintc.h"
#include "mb_interface.h"
#include "xuartlite.h"
#include "xuartlite_l.h"
#include "xutil.h"
#define RS232_DEVICE_ID XPAR_RS232_DEVICE_ID
#define INTC_DEVICE_ID XPAR_OPB_INTC_0_DEVICE_ID
#define RS232_INTERRUPT_ID XPAR_OPB_INTC_0_RS232_INTERRUPT_INTR

/************************** Function Prototypes ******************************/
volatile int mark;
volatile char c;
static Xint16 acData;
XStatus RS232init(XIntc* IntcInstancePtr,
XUartLite* InstancePtr,
Xuint16 DeviceId,
Xuint16 IntrId);

/************************** Variable Definitions *****************************/

XIntc InterruptController; /* The instance of the Interrupt Controller */
XUartLite RS232CounterInst; /* The instance of the Timer Counter */

int main(void)
{
int i=0,k;
char m;
Xuint16 mm[10];
Xuint16 *p,*p1;
p=mm;
Xfloat64 nn[10];
for(k=0;k<10;k++)
{nn=i;}

RS232init(&InterruptController,
&RS232CounterInst,
RS232_DEVICE_ID,
RS232_INTERRUPT_ID);
print("begin\r\n");
print("\r\n");
XUartLite_Send(&RS232CounterInst,p,8);
print("\r\n");

while(1)
{

while (! ((XUartLite_mGetStatusReg((XPAR_RS232_BASEADDR)) & 0x01) != 0x01))
{ i=0;
print("\r\n");
while(i<10)
{mm=XUartLite_RecvByte(XPAR_RS232_BASEADDR);
i++;}
XUartLite_Send(&RS232CounterInst,p,8); }
}
}
/*****************************************************************************/
XStatus RS232init(XIntc* IntcInstancePtr,
XUartLite* RS232CtrInstancePtr,
Xuint16 DeviceId,
Xuint16 IntrId)
{
XUartLite_Initialize(RS232CtrInstancePtr,DeviceId);
XUartLite_SelfTest(RS232CtrInstancePtr);
return XST_SUCCESS;
}

是用串口小精灵,当每次只向fpga发送一个字符时程序运行正常,超过一个则是乱码比如“as”

请高手指教

另外 如果不用

while(i<10)
{mm=XUartLite_RecvByte(XPAR_RS232_BASEADDR);
i++;}
使用

XUartLite_Recv(&RS232CounterInst,p,8)

这个程序在超过一个字符时也不好使

可是

XUartLite_Send(&RS232CounterInst,p,8);

却能够正常使用

[em06][em06][em06][em06]
返回列表