如何将二进制转换为十六进制并在特定地址写入值?

时间:2018-07-14 16:43:02

标签: c sdk fpga xilinx

我有以下几行代码:

u8 SW = Xil_In8(XPAR_AXI_GPIO_0_BASEADDR);


Xil_Out32(XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR, 0x00000020 + SW);

我在这里做的是从地址XPAR_AXI_GPIO_0_BASEADDR读取并将值存储在SW中。对我而言,相关数据仅存储在后4位。

我要完成的工作是以这样一种方式写在另一个地址(XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR)上,例如在值0x00000020中,最后一个字节(现在为0)始终包含SW的当前值。好吧,它的最后4位。所以基本上有这样的东西0x0000002SW。如何做到这一点,以便即使SW的值发生变化,0x00000020的最后一个字节也始终包含SW的当前值(后4位)而不是0。我必须执行哪些转换?

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

???

您可以一行完成。

u8 SW = Xil_In8(XPAR_AXI_GPIO_0_BASEADDR);
u8 last_4_bits = SW & 0xf //gets you the last 4 bits
Xil_Out32(XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR, 0x00000020 | last_4_bits); //OR'ing sets those 4 bits

我将把它留给您作为练习,以了解按位数学运算。如果您在纸上写下这些位并进行数学运算,会容易得多。如果您不熟悉它,请不要在您的头脑中这样做。