目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2019-12-25 gingko 初次建立

实验十六:基于SPI总线的ARM+FPGA通信实验

一、实验目的与意义

  1. 了解SPI通信的基本原理。
  2. 掌握SPI通信基于FPGA的实现方法。
  3. 学习基于SPI总线的ARM+FPGA数据传输应用。

二、实验设备及平台

  1. iCore3 双核心板( FPGA型号为EP4CE10F17,ARM型号为STM32F407IGT6)。点击购买
  2. Blaster(或相同功能的)仿真器和USB线缆。点击购买
  3. Micro USB线缆。
  4. QuartusII开发软件(本实验中使用的是13.1版本)。

三、实验原理

图1  信号连接图

四、代码讲解

1.FPGA接收数据。

    always@(posedge spi_clk or negedge rst_n)
	if(!rst_n)
		data_in<=40'd0;
	else if(!spi_cs)
		data_in<=40'd0;
		else
		data_in<={data_in[38:0],spi_mosi_r};//将SPI输入数据存入data_in寄存器
        always@(posedge spi_clk or negedge rst_n)
	    if(!rst_n)
		data<=32'd0;
	    else if(data_in[7:0] == 8'd13)//“回车”键对应的ASCII码的值为8‘d13
		data<=data_in>>8;//取回车键之前的值
	     else
		data<=data;
	//对比接收数据//
	reg [2:0]led;	
        always@(posedge CLK_25M or negedge rst_n)
		if(!rst_n)
		   led <= 3'b111;
		else if (data == ledr)
			led <= 3'b011;                  //红灯亮
		else if (data == ledg)
			led <= 3'b101;			//绿灯亮
		else if (data == ledb)
			led <= 3'b110;			//蓝灯亮

2.FPGA发送数据。

always@(negedge  spi_clk or negedge rst_n)
        if(!rst_n)
            begin 
                spi_miso<=1;
                data_out<=hello;
            end
        else    if(!spi_cs )
                begin
                    spi_miso <= data_out[39]; //将最高位通过SPI总线发送出去
                    data_out<=data_out<<1;
                end
            else
                begin
                    spi_miso<=1'b1;
                    data_out<=hello;
                end

五、操作流程和测试结果

1.操作步骤

2.实验结果

串口发送命令格式 ARM_LED现象 FPGA_LED现象
LEDR\CR\LF 红灯亮 红灯亮
LEDG\CR\LF 绿灯亮 绿灯亮
LEDB\CR\LF 蓝灯亮 蓝灯亮

* 在Commix上发送命令后,对应的ARM和FPGA的LED灯亮,同时接收显示:“hello”表示实验成功,如下面两图所示: 图2  串口指令发送 图3  实验效果展示