代码之家  ›  专栏  ›  技术社区  ›  onaclov2000

微控制器到微控制器的SPI通信

  •  0
  • onaclov2000  · 技术社区  · 15 年前

    我在读一些书,甚至有一个“大师”SPI在我的微控制器上工作。这里是我的问题,基本上,如果主程序想要初始化一个写给我们写给sspbuf的从程序,我们如何控制从程序的响应呢?在这种情况下,数据表似乎不太清楚事件的顺序。

    也就是说,master将char放入sspbuf,这将启动spi模块向slave发送数据,在移位期间,slave返回一个字节。

    在slave端,是否有什么东西告诉您有传入的数据,并且您可以先写入sspbuf,然后接受数据?

    在主机有机会启动传输之前,您是否必须将您想要发送回的第一个“返回值”写入SSPBUF?

    4 回复  |  直到 7 年前
        1
  •  1
  •   Yann Ramin    15 年前

    您想在处理从机芯片选择的GPIO线路上使用中断。确保有足够的时间让从机处理该中断,并在时钟开始前加载输出数据寄存器。

    一些SPI模块排除了GPIO的使用-您需要检查SPI模块是否具有处理芯片选择的功能,或者仅根据GPIO活动启用模块。

        2
  •  1
  •   Seidleroni    15 年前

    通常,我在过去使用SPI所做的就是将2个字节从主服务器发送到从服务器,其间的延迟最小。主服务器发送:“x y”,其中“x”是它希望从从属服务器读取的变量,“y”实际上只是一个虚拟变量,用于记录从属服务器的响应。同时,从机在接收到“x”时得到一个中断,查找要放入其输出缓冲区的值,当它接收到“y”时,对其数据包的响应被时钟发送给主机。

        3
  •  0
  •   vicatcu    15 年前

    不管您的微控制器是什么,三个很可能是与接收SPI数据相关联的ISR,以及一个寄存器,在其中可以访问接收到的数据并将其复制到局部变量中。

        4
  •  0
  •   Chandan Kumar    7 年前

    首先,您需要确认您的主设备和从设备具有SPI模式和数据大小等参数的公共值。SPI模式将决定SPI时钟线的空闲极性和数据采样边缘是第一还是第二。数据大小将决定它是8位还是16位,或者根据芯片的不同而有所不同。

    现在,当主设备通过芯片/从设备选择从设备时,从设备变为激活状态,等待时钟改变其状态,一旦时钟改变状态,从设备根据SPI模式选择再次等待第一或第二边缘的时钟线。如果是第1边缘从设备采集Mosi线数据并放入其内部移位寄存器,如果从设备也必须传输数据,则必须将数据保存在所选时钟边缘之前的miso线上。 根据数据大小,此过程将重复8或16次。完成后,主设备和从设备可以生成中断到它们的CPU来收集数据(在微控制器的情况下)。