完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` module abc( clk, rst_n, spi_clk, somi, cs, simo); input clk; input rst_n; output reg spi_clk; output cs; input somi; output reg simo; //---------------10MHz to 500KHz divided by 20----------------------- parameter N = 3'd5; parameter M = 5'd20; reg [N-1:0]clk_count; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin clk_count <= 5'b0; spi_clk <= 1'b0; end else if(clk_count == M/2-1) begin spi_clk <= ~spi_clk; clk_count <= 5'b0; end else begin clk_count <= 5'b0; clk_count <= clk_count+1'b1; end end //--------------------------------------------------------------- // data transfer reg cs; reg [7:0]tx; reg [7:0]txd; always@ (posedge clk or negedge rst_n) begin if(!rst_n) begin tx <=8'ha9; end else begin txd <= tx; end end reg [3:0]ShiftCounter; // 移位 always@(posedge spi_clk or negedge rst_n) begin if(!rst_n) begin simo <= 1'bz; cs <= 1; end else if(ShiftCounter == 4'd8) begin simo <= 1'bz; cs <= 1; end else begin cs <= 0; end end //上升沿处理// transmit data to mcu always@(posedge spi_clk or negedge rst_n) if(!rst_n) begin ShiftCounter <= 4'd0; simo <= 1'bz; end else if(~cs) begin simo <= txd[7-ShiftCounter]; ShiftCounter <= ShiftCounter + 4'd1; if(ShiftCounter == 4'd8) ShiftCounter <= 4'd0; end endmodule 两次片选拉高之间8个时钟,现在是9个,大家看看是什么问题 ` |
|
相关推荐
2个回答
|
|
|
|
|
|
多发了clk!!!!!!!!!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-21 17:28 , Processed in 0.823539 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号