我在micrilaze xilinx 13.1中实现UART。我想将rx值存储在fifo中,这是使用VHDL中的xilinx ipcore实现的。
我收到了这样的字节,
while(1) {
Recvd_Byte = XUartLite_RecvByte(0x40600000);
}
我已经在我的VHDL代码中实现了fifo。 system.xmp和fifo都是我顶层模块下的组件。
如何在C代码中访问此Recvd_Byte并传递给VHDL中的fifo(fifo_wr_data)。
请帮帮我。我是微博的新手。
答案 0 :(得分:0)
要将数据写入fpga中的寄存器,xil_io.h中有函数。 地址可以在xparameters.h中看到 您想要写入数据的寄存器的地址是什么?
默认IP核有32个寄存器,你从0x40600000读取数据; 那就是slv_reg0; 假设slv_reg1是免费的,那么你可以在它的地址写入数据。 Next寄存器位于地址0x40600004; //假设寄存器的宽度为32位
you can use commands
Xil_Out8(0x40600004);
Xil_Out16(0x40600004);
Xil_Out32(0x40600004);
或者也可以将数据写入下一个字节,使用命令
Xil_Out8(0x40600001);
//尝试在问题中提供更多详细信息。
//我们可以更好地帮助您。
答案 1 :(得分:0)
您可以在EDK中添加新的GPIO外设。然后使用GPIO将Recvd_Byte写入micrlaze外的信号。所以:
添加GPIO外设。 [本指令的图像] [1]
映射地址后,我建议将GPIO_IO_O设为外部地址。 [本指令的图像] [2]
生成网表后。将硬件设计导出到SDK。
这是一个通过GPIO在Microblaze之外发送数据的简单代码:
#include "xparameters.h"
#include "xgpio.h"
XGpio Gpio;
int main (void){
...
int Status;
Status = XGpio_Initialize(&Gpio, XPAR_XPS_GPIO_0_DEVICE_ID);
XGpio_SetDataDirection(&Gpio, 1, 0x00000000);
XGpio_DiscreteWrite(&Gpio, 1,Recvd_Byte );
...
return 0;
}
[1]:https://i.stack.imgur.com/fr0iG.png [2]:https://i.stack.imgur.com/kAnCK.png