-
GD32USB移植时钟问题
在GD32F450Z官方例程中USB键盘例程中,工程在system_gd32f4xx.c设置为系统时钟为168MHz_25MHz,在对USB延时上使用TIMER2进行实现,预分频为(6+1),微秒级延时计数值为(11+1),毫秒级计数值(11999+1)。我对这个没有疑问。但是问题在于当我将system_gd32f4xx.c中的系统时钟改为200MHz_25MHz后,将TIMER2的预分频值改为(9+1),微秒级延时计数值为(9+1),毫秒级计数值(9999+1),却无法实现功能。我单独在200MHz测试定时器功能,正常延时,有哪位老哥知道原因。
4090浏览量 7回复量 关注量 -
有没有N32G45x的定时器延时例程 sos
程序需要延时,使用官方例程中的systick是可以的,官方例程只能在144MHz下延时116ms,大于这个时间需要自行修改代码实现。通过一定修改现在可以延时任意时长了。但是还是想利用tim7进行延时,不用中断的那种,根据ST的例程进行修改,但总是有问题。
723浏览量 0回复量 关注量 -
下面这段Verilog语言代码,怎么写testbench的测试代码?
[i=s] 本帖最后由 a438338076 于 2021-4-30 00:46 编辑 [/i] 本人看了两天,自己写了几遍,还是出错,希望有大神来帮我解决下这个仿真问题module delay( input clk ,//时钟信号 input rst_n ,//全局复位信号,低有效 input din ,//输入信号 input [7:0] dly_data , output reg dout ); wire add_cnt ; wire end_cnt ; reg [7:0] dly_data_reg ; reg [2:0] din_ff ; reg pos_flag ; reg neg_flag ; reg [7:0] cnt ; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin dly_data_reg <= 'd0; end else begin dly_data_reg <= dly_data; end end always @(posedge clk)begin din_ff <= {din_ff[1:0],din}; end //上升沿 always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin pos_flag <= 1'b0; end else if(end_cnt)begin pos_flag <= 1'b0; end else if(pos_flag == 1'b0 &&din_ff[2:1] == 2'b01)begin pos_flag <= 1'b1; end end //下降沿 always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin neg_flag <= 1'b0; end else if(end_cnt)begin neg_flag <= 1'b0; end else if(neg_flag == 1'b0 &&din_ff[2:1] == 2'b10)begin neg_flag <= 1'b1; end end //延迟值 always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= 0; else cnt <= cnt + 1'b1; end end assign add_cnt = pos_flag || neg_flag; assign end_cnt = add_cnt && cnt == dly_data_reg -1; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin dout <= 1'b0; end else if(pos_flag && end_cnt)begin//上升沿来了 dout <= 1'b1; end else if(neg_flag && end_cnt)begin//下降沿来了 dout <= 1'b0; end end endmodule
1719浏览量 1回复量 关注量