我需要使用 Xilinx FPGA 上的 GPIO 引脚捕获和解码红外信号(使用 NEC 红外协议),并在控制台上显示信号的内容。我收到地址上的信号
XPAR_GPIO_IR_BASEADDR // 0x40040000
如何获取该寄存器的内容并将其放入另一个变量中,然后用于解码信号?
u32 packet
这部分的目标是获取从 IR 接收到的值,然后将其插入到数据包变量中,如上所示。然后该变量将用于其他操作。
该宏定义就是外设的绝对地址。因此,如果您没有为系统生成驱动程序并且没有可用的函数 - 那么对于 C 语言,您只需将该地址转换为与寄存器大小匹配的类型的易失性指针,然后取消引用它。
基本上你会做
u32 value = *(volatile u32 *)XPAR_GPIO_IR_BASEADDR;
Vitis 生成的 BSP 包括便利函数
Xil_In32()
和 Xil_Out32()
,以及其他数据大小的函数,基本上做同样的事情。