SPI代码详解FPGA-verilog部分(FPGA+STM32)(三)

声明:本篇文章面向在已对SPI的四种时序有所了解的人

我们采用SPI3模式以及将FPGA作从机,STM32作主机的方式讲解,在STM32控制部分采用的是半双工模式,但其实半双工与全双工区别不大,
稍加修改即可


本片文章是接续上篇文章的,如果未浏览上一篇文章的,可以在此跳转SPI驱动代码详解SPI代码详解FPGA-verilog部分(FPGA+STM32)(二)


本文是FPGA通过SPI接收的数据做出应答的模块,比如改变ADC采样率,将ADC采集的数据放在RAM中和从RAM中取出再发送给单片机


module samplingCtrl (
        input clk,
        input rstn,
        input [31:0] FCW, //频率控制字,是由单片机发送过来的
        input en,		//采样使能控制信号,是由单片机发送过来的
        input [11:0] AD9226_Din_0, //AD9226模块0采样后转换出来的数字量
        input [11:0] AD9226_Din_1, //AD9226模块1采样后转换出来的数字量
        input [11:0] AD9226_Din_2, //AD9226模块2采样后转换出来的数字量
        input [6:0] rd_addr,       //读RAM地址,是由单片机发送过来的
        output reg clk_sampling_1, //AD9226模块0时钟,由频率控制字控制
        output reg clk_sampling_2, //AD9226模块1时钟,由频率控制字控制
        output reg clk_sampling_0, //AD9226模块2时钟,由频率控制字控制
        output reg [11:0] AD9226_Dout_0, //从RAM0中读出的AD9226模块0采集的数据,将来发送给STM32
        output reg [11:0] AD9226_Dout_1, //从RAM1中读出的AD9226模块1采集的数据,将来发送给STM32
        output reg [11:0] AD9226_Dout_2, //从RAM2中读出的AD9226模块2采集的数据,将来发送给STM32
        output reg busy 				//判断一组采样(设置的是1024个点或者512个点)是否完成
    );


    localparam OFFSET_VALID = 7'd0;   //RAM偏移地址可以过滤掉采集的前几个不太正常的数据,但是一般数据都是正常的,这个功能暂时不开启

    wire clk_sampling;   //ADC模块的采样时钟
    reg [1:0] r_en;
    wire pos_en;
    reg [1:0] r_clk_sampling;
    wire pos_clk_sampling;
    wire neg_clk_sampling;

    reg wr_en;
    reg [6:0] wr_addr;

    wire [15:0] ram_dout0;
    wire [15:0] ram_dout1;
    wire [15:0] ram_dout2;

    //
    always @(posedge clk , negedge rstn)
    begin
        if(<
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值