UART(接收部分)
来源:互联网 发布:淘宝的垃圾箱在哪里 编辑:程序博客网 时间:2024/06/05 17:41
1、整体框图
文件:UART.v
module UART
(
CLK,nRST,
Rx_Pin_IN,
Rx_En_Sig,
Rx_Done_Sig,
Rx_Data
);
input CLK;
input nRST;
input Rx_Pin_IN;
input Rx_En_Sig;
output Rx_Done_Sig;
output [7:0]Rx_Data;
wire H2L_Sig;
Detect_Module U1
(
.CLK(CLK),.nRST(nRST),
.Pin_IN(Rx_Pin_IN),
.H2L_Sig(H2L_Sig)
);
wire Count_Sig;
wire BPS_CLK;
Rx_Bps_Module U2
(
.CLK(CLK),.nRST(nRST),
.Count_Sig(Count_Sig),
.BPS_CLK(BPS_CLK)
);
Rx_Control_Module U3
(
.CLK(CLK),.nRST(nRST),
.H2L_Sig(H2L_Sig),
.BPS_CLK(BPS_CLK),
.Count_Sig(Count_Sig),
.Rx_Data(Rx_Data),
.Rx_Done_Sig(Rx_Done_Sig),
.Rx_En_Sig(Rx_En_Sig),
.Rx_Pin_IN(Rx_Pin_IN)
);
endmodule
2、子模块
(1)Rx_Bps_Module
文件:Rx_Bps_Module.v
module Rx_Bps_Module
(
CLK,nRST,
Count_Sig,
BPS_CLK
);
input CLK;
input nRST;
input Count_Sig;
output BPS_CLK;
reg [12:0]Count_BPS; always @(posedge CLK or negedge nRST) if(!nRST) Count_BPS<=13'd0; else if(Count_BPS==13'd5207) Count_BPS<=13'd0; else if(Count_Sig) Count_BPS<=Count_BPS+1'd1; else Count_BPS<=13'd0; assign BPS_CLK=(Count_BPS==2604)?1'b1:1'b0; endmodule
(2)Detect_Module
文件:Detect_Module.v
module Detect_Module(CLK,nRST,Pin_IN,H2L_Sig);
input CLK;
input nRST;
input Pin_IN;
output H2L_Sig;
reg H2L_F1;
reg H2L_F2;
always @(posedge CLK or negedge nRST)
if(!nRST)
begin
H2L_F1<=1'b1;
H2L_F2<=1'b1;
end
else
begin
H2L_F1<=Pin_IN;
H2L_F2<=H2L_F1;
end
assign H2L_Sig=H2L_F2&!H2L_F1;
endmodule
(3)Rx_Control_Module
文件:Rx_Control_Module.v
module Rx_Control_Module
(
CLK,nRST,
H2L_Sig,Rx_Pin_IN,
BPS_CLK,Rx_En_Sig,
Count_Sig,Rx_Data,
Rx_Done_Sig
);
input CLK;
input nRST;
input H2L_Sig;
input Rx_Pin_IN;
input Rx_En_Sig;
input BPS_CLK;
output Count_Sig;
output [7:0]Rx_Data;
output Rx_Done_Sig;
reg [3:0]i;
reg [7:0]rData;
reg isCount;
reg isDone;
always @(posedge CLK or negedge nRST)
if(!nRST)
begin
i<=4'd0;
isCount<=1'b0;
rData<=8'd0;
isDone<=1'b0;
end
else if(Rx_En_Sig)
case(i)
4'd0:if(H2L_Sig)begin i<=i+1'b1; isCount<=1'b1;end//检测到起始位,拉高isCount使Rx_BPS_Module产生波特率
4'd1:if(BPS_CLK)i<=i+1'b1;//忽略起始位 4'd2,4'd3,4'd4,4'd5, 4'd6,4'd7,4'd8,4'd9:if(BPS_CLK) begin i<=i+1'b1; rData[i-2]<=Rx_Pin_IN;end//8位数据位 4'd10:if(BPS_CLK) i<=i+1'b1; //忽略校验位 4'd11:if(BPS_CLK) i<=i+1'b1; //忽略结束位 4'd12:begin i<=i+1'b1;isDone<=1'b1;isCount<=1'b0;end //接受完成,拉高isDone;拉低isCount使Rx_BPS_Module停止产生波特率 4'd13:begin i<=4'd0;isDone<=1'b0;end //拉低isDone,等待下一帧数据 endcase
assign Rx_Data=rData;
assign Rx_Done_Sig=isDone;
assign Count_Sig=isCount;
endmodule
- UART(接收部分)
- uart接收改为指定函数发送
- STM32 UART(接收 ,发送数据)
- UART学习笔记三:最优接收模型
- rtcp 接收部分
- LPC17xx管脚复用之Uart部分
- 第四部分 串行接口UART和Console
- 中断条件下ATtiny2313接收UART数据的程序修改
- mini2440 UART实现串口接收后转换为整型数据
- UART接口定义为DMA模式接收数据
- uart接收中断,带解释,可以拷贝直接用
- dsPIC33F串口接收到的数据立即返送-UART
- dsPIC33F串口通讯中断接收发送数据-UART
- EFM32G UART 接收方向的 DMA+FIFO 处理方式
- STM32 UART DMA实现未知数据长度接收
- 全志A33增加uart接收 汇编层次
- STM8S类型单片机UART一直进入接收中断问题解决方案
- STM32 UART常用的3种中断接收
- 为GridView添加HeaderView
- 微软提供的android模拟器
- EularProject 39:给周长判断构成直角三角形个数
- scrollview嵌套listview效果
- Cocos2dx之精灵批处理
- UART(接收部分)
- FAQ13715][Gallery] 如何修改gallery的背景色
- 使用genymotion和chares网络调试设置代理方法
- 1022. Digital Library (30)
- 16进制转10进制方法
- 10个学习Android开发的网站推荐
- org.hibernate.MappingException: Unknown entity 错误修改
- SpringMVC 流程(4)-- HttpMessageConverter
- poj 2186 Popular Cows(kosaraju求联通分量)