新手,跪求spi串口程序

2019-07-15 23:07发布

新手,真心求助。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
Heng_Ji
2019-07-17 10:59
  1. module spi_receiver
  2. (
  3.         //global clock
  4.         input                                clk,
  5.         input                                rst_n,
  6.        
  7.         //mcu spi interface
  8.         input                                spi_cs,                //Chip select enable, default:L
  9.         input                                spi_sck        ,        //Data transfer clock
  10.         input                                spi_mosi,        //Master output and slave input
  11. //        output                                spi_miso,        //Master input and slave output

  12.         //user interface       
  13.         output        reg                        rxd_flag,       
  14.         output        reg        [7:0]        rxd_data
  15. );

  16. //-------------------------------------
  17. //mcu data sync to fpga
  18. reg        spi_cs_r0,                 spi_cs_r1;               
  19. reg        spi_sck_r0,                spi_sck_r1;                //fsmc default 0; 8080 default 1; spi default 0;
  20. reg        spi_mosi_r0,         spi_mosi_r1;
  21. always@(posedge clk or negedge rst_n)
  22. begin
  23.         if(!rst_n)
  24.                 begin
  25.                 spi_cs_r0 <= 1;                spi_cs_r1 <= 1;                //chip select enable
  26.                 spi_sck_r0 <= 0;        spi_sck_r1 <= 0;        //data transfer clock
  27.                 spi_mosi_r0 <= 0;        spi_mosi_r1 <= 0;        //Master output and slave input
  28.                 end
  29.         else
  30.                 begin
  31.                 spi_cs_r0 <= spi_cs;                spi_cs_r1 <= spi_cs_r0;
  32.                 spi_sck_r0 <= spi_sck;                 spi_sck_r1 <= spi_sck_r0;
  33.                 spi_mosi_r0 <= spi_mosi;        spi_mosi_r1 <= spi_mosi_r0;
  34.                 end
  35. end
  36. wire        mcu_cs = spi_cs_r1;       
  37. wire        mcu_data = spi_mosi_r1;
  38. wire        mcu_read_flag = (~spi_sck_r1 & spi_sck_r0) ? 1'b1 : 1'b0;        //posedge of sck
  39. wire        mcu_read_done = (~spi_cs_r1 & spi_cs_r0) ? 1'b1 : 1'b0;                //posedge of cs

  40. //-------------------------------------
  41. //sample signal, receive data
  42. reg        [3:0]        rxd_cnt;
  43. reg        [7:0]        rxd_data_r;
  44. always@(posedge clk or negedge rst_n)
  45. begin
  46.         if(!rst_n)
  47.                 begin
  48.                 rxd_cnt <= 0;
  49.                 rxd_data_r <= 0;
  50.                 end
  51.         else if(mcu_cs == 1'b0)
  52.                 begin
  53.                 if(mcu_read_flag)        //posedge of sck
  54.                         begin
  55.                         rxd_data_r[3'd7 - rxd_cnt[2:0]] <= mcu_data;
  56.                         rxd_cnt <= rxd_cnt + 1'b1;        //0-7-8
  57.                         end
  58.                 else
  59.                         begin
  60.                         rxd_cnt <= rxd_cnt;
  61.                         rxd_data_r <= rxd_data_r;
  62.                         end
  63.                 end
  64.         else
  65.                 begin
  66.                 rxd_cnt <= 0;
  67.                 rxd_data_r <= rxd_data_r;
  68.                 end
  69. end

  70. //-------------------------------------------------
  71. //output spi receive data and receive flag
  72. always@(posedge clk or negedge rst_n)
  73. begin
  74.         if(!rst_n)
  75.                 begin
  76.                 rxd_flag <= 0;
  77.                 rxd_data <= 0;
  78.                 end
  79.         else if(mcu_read_done)
  80.                 begin
  81.                 rxd_flag <= 1'b1;
  82.                 rxd_data <= rxd_data_r;
  83.                 end
  84.         else
  85.                 begin
  86.                 rxd_flag <= 0;
  87.                 rxd_data <= rxd_data;
  88.                 end
  89. end

  90. endmodule
复制代码

一周热门 更多>