verilog中串口通信中遇到的问题 FPGA通过串口接收数据后执行命令
verilog中串口通信中遇到的问题
1. 对于串口而言,或者说对于任何协议都是这样,你所要传输的对于它而言都是数据,只有先后之分,你要将它们区分只能自己加些额外的标志,或者用自己定义一个标志来区分。比如你可以一次传两个数,你认为第一个是加数另一个是被加数。或者中间加个间隔标志,诸如种种。还有模块同时执行部知道你指的具体是什么,都是RXD上传输的怎么会有同时调用两次的问题出现;
2. 既然串口都模拟出来了,应该知道串口数据的“起始位”这概念吧,其实也就是个传输开始标志,接收模块只有收到了这个起始标志才知道有数据来了,才开始接收,这个起始标志也就是RXD上的低电平;那么对应代码页就是判断if(!RXD);
3. 溢出这问题有点麻烦,是否可以做个判断,如果有溢出就发送两个字节,就是把溢出位单独再发一次,更好的方法暂时还没想到。
FPGA通过串口接收数据后执行命令
uart可以网上down一个,另外写个命令判断模块
假设uart接口如下:
uart U1(clk,rst,RX,TX,ready,dout)
命令判断接口如下:
judge U2(clk,rst,ready,din,active)
弄个32bit的寄存器,
每次收到ready脉冲,将uart的dout(8bit)放到该reg的末尾,同时整体左移8位。
reg [31:0]tmp
always @(posedge clk or negedge rst)
begin
...
if(ready) tmp <= {tmp[23:0],din[7:0]}
end
assign active = (tmp == 32h11223344)
active为1,则摄像头启动程序开始运行