C 如何用FPGA从SPI连接的加速度计中获取数据

C 如何用FPGA从SPI连接的加速度计中获取数据,c,spi,intel-fpga,nios,C,Spi,Intel Fpga,Nios,对于任何有经验并且对低级编程和/或接口有良好理解的人来说,我认为这是一项非常容易的任务。问题是-我无法完成与我的LIS3DH加速计的通信 我正在进行的设置是: CYC1000配备Cyclone 10 FPGA(Cyclone 10 LP) LIS3DH三轴传感器通过SPI和2条INT线与FPGA连接 由于我似乎理解SPI工作原理的一般概念,所以我无法掌握如何在FPGA板上实际操作 我使用的是Quartus II Lite,我已经使用Platform Designer设置了系统,您可以在goo

对于任何有经验并且对低级编程和/或接口有良好理解的人来说,我认为这是一项非常容易的任务。问题是-我无法完成与我的LIS3DH加速计的通信

我正在进行的设置是:

  • CYC1000配备Cyclone 10 FPGA(Cyclone 10 LP)

  • LIS3DH三轴传感器通过SPI和2条INT线与FPGA连接

由于我似乎理解SPI工作原理的一般概念,所以我无法掌握如何在FPGA板上实际操作

我使用的是Quartus II Lite,我已经使用Platform Designer设置了系统,您可以在google drive链接上查找该.qsys文件: 虽然我几乎可以肯定那里的东西很好,但如果你能给我任何提示,我将不胜感激

现在,根据我从中得到的知识,有一个访问例程由一个函数提供,这个函数名为

alt_u32 base, alt_u32 slave, alt_u32 write_length, const alt_u8* wdata,
                       alt_u32 read_length,
                       alt_u8* read_data,
                       alt_u32 flags
问题是-我不太明白应该在那里输入哪些值。从第一个基开始-它是我的
SPI_-base
(SPI从机的基址) 当我运行类似这样的代码时:

int x = alt_avalon_spi_command(SPI_BASE, 0, 16, data_in, 16, data_out, 0);
该程序在altera_avalon_spi.c代码文件中的无限循环过程中被卡住了

do
{
status = IORD_ALTERA_AVALON_SPI_STATUS(base);
}
while (((status & ALTERA_AVALON_SPI_STATUS_TRDY_MSK) == 0 || credits == 0) &&
        (status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK) == 0);
debug窗口中的
状态将根据do/while的开始或结束获取值512或0,然后它将以退出值0终止(而正常运行不会弹出任何错误)

此外,正如我所期望的,要真正运行加速度计,你应该首先告诉它应该如何工作——设置一些寄存器和设置,如图所示。 问题是——我实际上如何做到这一点?我是否从一开始就做得很糟糕,在系统项目(.qsys和.sv文件)中遗漏了一些重要的难题

我非常感谢任何关于我应该知道的主题或基础知识的提示、材料或教程-请不要太过严厉地批评我:)

编辑: 好的,基本上如我所料,在
alt\u avalon\u spi\u命令的
write\u data
参数中设置传感器。 我犯的另一个错误,至少在我的例子中,是将SPI设置为从机-将其切换为主让我解决方案,因为我不再卡在do/while循环中。
固执和不看制造商提供的例子是没有好处的——给我一些时间,我已经理解了我的错误和过程,问题结束了

该链接指向.xml文件和.sv文件。什么是.sv文件?您希望我们如何处理.xml文件?请发布
altera_avalon_spi.c
文件,并指出代码在该文件中的确切位置。好的,打开.qsys时,文本文件是.xml。正如我在问题中提到的,这是quartus平台设计器文件。sv文件是一种系统verilog格式,它包含了平台设计器设计的初始化。当然,我已经根据CYC1000模块的文档设置了引脚。我将尽快发布.c文件,这是我在google上找到的某个存储库的源代码,它们是相同的,因为它是生成的文件。它在82行的do/while上阻塞(永远重复)。我很确定我在设计中遗漏了一些东西,因为我缺乏知识,但我不知道它是什么。链接是指向一个.xml文件和一个.sv文件。什么是.sv文件?您希望我们如何处理.xml文件?请发布
altera_avalon_spi.c
文件,并指出代码在该文件中的确切位置。好的,打开.qsys时,文本文件是.xml。正如我在问题中提到的,这是quartus平台设计器文件。sv文件是一种系统verilog格式,它包含了平台设计器设计的初始化。当然,我已经根据CYC1000模块的文档设置了引脚。我将尽快发布.c文件,这是我在google上找到的某个存储库的源代码,它们是相同的,因为它是生成的文件。它在82行的do/while上阻塞(永远重复)。我很确定我在设计中遗漏了一些东西,因为我缺乏知识,但我不知道是什么。