这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
基于spi总线的arm与fpga通信实验 [2020/07/02 18:27] zgf [四、 代码讲解] |
基于spi总线的arm与fpga通信实验 [2022/03/22 10:29] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-07-02 | gingko | 初次建立 | | | V1.0 | 2020-07-02 | gingko | 初次建立 | | ||
行 39: | 行 38: | ||
* SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。如图13-1所示 | * SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。如图13-1所示 | ||
- | 图13-1 | + | {{ :icore4:icore4_fpga_13_1.png?direct |图13-1}} |
=== 3.SPI通信指令表 === | === 3.SPI通信指令表 === | ||
行 59: | 行 58: | ||
=== 4、本实验实现方式 === | === 4、本实验实现方式 === | ||
* 通过FPGA建立的SPI模块对外提供的SCLK、CS、MOSI、MISO接口与STM32的SPI相连接,Commix串口精灵与STM32通过串口连接,实现三者之间的通信。本实验中,Commix串口精灵向STM32发送数据,STM32的RXD端口接收数据,然后,通过TXD端口把数据发送至FPGA,STM32起到一个桥梁作用。程序运行后,FPGA定时向STM32发送数据,经过STM32发送至串口精灵显示出来。下图为实验原理图。 | * 通过FPGA建立的SPI模块对外提供的SCLK、CS、MOSI、MISO接口与STM32的SPI相连接,Commix串口精灵与STM32通过串口连接,实现三者之间的通信。本实验中,Commix串口精灵向STM32发送数据,STM32的RXD端口接收数据,然后,通过TXD端口把数据发送至FPGA,STM32起到一个桥梁作用。程序运行后,FPGA定时向STM32发送数据,经过STM32发送至串口精灵显示出来。下图为实验原理图。 | ||
- | + | {{ :icore4:icore4_fpga_13_2.png?direct&700 |实验原理图}} | |
==== 四、 代码讲解 ==== | ==== 四、 代码讲解 ==== | ||
* 本实验基于ARM+FPGA构架,通过ARM首先发送查询ID指令,然后依次通过指令设置写数据的长度、写数据地址、读数据的长度、读数据的地址,然后对比写入数据和读出数据是否一致判断数据是否写入成功,从而基于SPI总线实现ARM与FPGA之间的通信。 | * 本实验基于ARM+FPGA构架,通过ARM首先发送查询ID指令,然后依次通过指令设置写数据的长度、写数据地址、读数据的长度、读数据的地址,然后对比写入数据和读出数据是否一致判断数据是否写入成功,从而基于SPI总线实现ARM与FPGA之间的通信。 | ||
行 85: | 行 84: | ||
temp_data <= {temp_data[31:0],data_in}; | temp_data <= {temp_data[31:0],data_in}; | ||
if(data_in == 8'd13) | if(data_in == 8'd13) | ||
- | begin | + | begin |
- | data <= temp_data; | + | data <= temp_data; |
- | end | + | end |
else | else | ||
- | begin | + | begin |
- | data <= data; | + | data <= data; |
- | end | + | end |
end | end | ||
4'd1,4'd2,4'd3,4'd4,4'd5,4'd6: | 4'd1,4'd2,4'd3,4'd4,4'd5,4'd6: | ||
行 171: | 行 170: | ||
图13-2 | 图13-2 | ||
5、打开串口精灵,找到对应口打开,如下图。\\ | 5、打开串口精灵,找到对应口打开,如下图。\\ | ||
- | + | {{ :icore4:icore4_fpga_13_3.png?direct |图13-3}} | |
- | 图13-3 | + | |
6、打开KeilMDK开发环境,并打开实验工程。\\ | 6、打开KeilMDK开发环境,并打开实验工程。\\ | ||
7、将ARM程序下载至iCore4。\\ | 7、将ARM程序下载至iCore4。\\ |