专栏中心

EEPW首页 > 专栏 > 串行外设接口(SPI) cpld 被动接收

串行外设接口(SPI) cpld 被动接收

发布人:0750long 时间:2010-03-12 来源:工程师 发布文章
串行外设接口(SPI) cpld 被动接收

 

 


//---------------------------------------------------------------------
//    串行外设接口(SPI)   cpld 被动接收

//在下降沿 采集数据并发送数据 1BYTE

//要求mcu在末端采集数据。并在下降沿之前准备好数据。

module cpld_spi(
   clk,rst_n,
   mcu_sck,mcu_sdo,mcu_sdi,
   //set_I//,set_T,
   led1_data,led2_data
   
  );
input clk;  //50MHz
input rst_n; //低电平复位信号
input mcu_sck;
input mcu_sdo;
output mcu_sdi;
//input[15:0]  set_I;
//input[7:0]  set_T;
output[3:0] led1_data;
output[3:0] led2_data;
//**********************************************************************************


reg SPI_SCK0,SPI_SCK1,SPI_SCK2,SPI_SCK3; //接收数据寄存器,滤波用
wire neg_SPI_SCK; //表示数据线接收到下降沿

always @ (posedge clk or negedge rst_n) begin
 if(!rst_n) begin
   SPI_SCK0 <= 1'b0;
   SPI_SCK1 <= 1'b0;
   SPI_SCK2 <= 1'b0;
   SPI_SCK3 <= 1'b0;
  end
 else begin
   SPI_SCK0 <= mcu_sck;
   SPI_SCK1 <= SPI_SCK0;
   SPI_SCK2 <= SPI_SCK1;
   SPI_SCK3 <= SPI_SCK2;
  end
    end  
assign neg_SPI_SCK = SPI_SCK3 & SPI_SCK2 & ~SPI_SCK1 & ~SPI_SCK0; //接收到下降沿后neg_SPI_SCK置高一个时钟周期  
//**********************************************************************************  

reg[5:0] num;
reg mcu_sdi_r; 
reg [7:0]  set_I_r;
reg[3:0] led1_data_r,led2_data_r;

//--------------------------------------------------- 

always @ (posedge clk or negedge rst_n)begin
 if(!rst_n) begin
   num <= 6'd0;
   mcu_sdi_r <= 0;
   set_I_r <= 8'h56;
   led1_data_r <= 4'd0;
      led2_data_r  <= 4'd0;
   
   end  
     else if (neg_SPI_SCK) begin     // cpld
         num <= num+1'b1;
         
         
             case (num)
              6'd0: led1_data_r[3] <= mcu_sdo;
              6'd1: led1_data_r[2] <= mcu_sdo;
              6'd2: led1_data_r[1] <= mcu_sdo;
              6'd3: led1_data_r[0] <= mcu_sdo;
              6'd4: led2_data_r[3] <= mcu_sdo;
              6'd5: led2_data_r[2] <= mcu_sdo;
              6'd6: led2_data_r[1] <= mcu_sdo;
              6'd7: begin
                    led2_data_r[0] <= mcu_sdo;
                           num <= 6'd0;
                     end
               default: ;
     endcase
           
         
             case (num)
      6'd0: mcu_sdi_r <= set_I_r[7]; //锁存第0bit
      6'd1: mcu_sdi_r <= set_I_r[6]; //锁存第1bit
      6'd2: mcu_sdi_r <= set_I_r[5]; //锁存第2bit
      6'd3: mcu_sdi_r <= set_I_r[4]; //锁存第3bit
      6'd4: mcu_sdi_r <= set_I_r[3]; //锁存第4bit
      6'd5: mcu_sdi_r <= set_I_r[2]; //锁存第5bit
      6'd6: mcu_sdi_r <= set_I_r[1]; //锁存第6bit
      6'd7: begin
            mcu_sdi_r <= set_I_r[0]; //锁存第7bit
             
               end
      default:num <= 6'd0;
     endcase
    
   end
 end
assign mcu_sdi = mcu_sdi_r; 
assign led1_data = led1_data_r;
assign led2_data = led2_data_r;

endmodule

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

电源开发工具

资源下载 2007-02-16

全球经济减缓——半导体产业的机会在哪里?

视频 2011-12-28

凯睿德中国子公司新任总经理

工控自动化 2025-05-14

电源设计工具

资源下载 2007-02-16

现代嵌入式CPU的发展和演变

视频 2011-12-28

去耦电容:原理、选型、容值计算、布局布线

智能无人设备从IP核到系统的全流程功能安全问题初探

中国国际国防电子展览会

视频 2012-01-12

面向 RF 应用的低相位噪声频率合成器

S参数转TDR(阻抗)--网络分析仪“变”采样示波器

解析特朗普高调中东行 NVIDIA老黄跟AI供应链都笑了

Molex与3D打印领军企业Prusa Research携手合作

医疗电子 2025-05-14

输出电压调节

视频 2012-02-01

英飞凌与美的签署战略合作协议:聚焦技术创新与智能绿色生活

国际视野 2025-05-14

TDK推出用于电源线路的业界最高额定电流8A的积层贴片磁珠

Eversource Energy与MathWorks合作,利用概率潮流自动化将可再生能源纳入系统规划流程

首款采用DO-214AB紧凑型封装的2kA保护晶闸管

更多 培训课堂
更多 焦点
更多 视频

技术专区