/***************************** 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] |