关于rs232的接收模块有点不理解

[复制链接]
 楼主| jakfens 发表于 2012-2-16 13:36 | 显示全部楼层 |阅读模式
本帖最后由 jakfens 于 2012-2-16 15:47 编辑

rt 发送还比较好理解 接收有点难懂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ifpga 发表于 2012-2-16 14:06 | 显示全部楼层
呵呵,这个文档不错
接收好像就是过采样,一般用16倍波特率的频率对输入脚进行采样,
然后,判断1多还是0多,以确定此位是0还是1
还有一种省事的办法就是,直接使用 每一位第8次采样得到的值
ifpga 发表于 2012-2-16 14:07 | 显示全部楼层
忘了说,刚才没仔细看这个文档,只是自己之前在其它地方看到的
 楼主| jakfens 发表于 2012-2-16 14:18 | 显示全部楼层
本帖最后由 jakfens 于 2012-2-16 14:19 编辑

哦哦 主要是那个接受的时候他说要在数据下降沿的时候判断开始位 这个文档上面的几句代码不是太了解
自己画了下时序图 楞是没搞出来
  1. First, the incoming "RxD" signal has no relationship with our clock.
  2. We use two D-flipflops to oversample it, and synchronize it to our clock.
  3. reg [1:0] RxD_sync;
  4. always @(posedge clk) if(Baud8Tick) RxD_sync <= {RxD_sync[0], RxD};
  5. We filter the data, so that short spikes on the RxD line aren't mistaken with start bits.
  6. reg [1:0] RxD_cnt;
  7. reg RxD_bit;

  8. always @(posedge clk)
  9. if(Baud8Tick)
  10. begin
  11. if(RxD_sync[1] && RxD_cnt!=2'b11) RxD_cnt <= RxD_cnt + 1;
  12. else
  13. if(~RxD_sync[1] && RxD_cnt!=2'b00) RxD_cnt <= RxD_cnt - 1;

  14. if(RxD_cnt==2'b00) RxD_bit <= 0;
  15. else
  16. if(RxD_cnt==2'b11) RxD_bit <= 1;
  17. end
GoldSunMonkey 发表于 2012-2-16 15:14 | 显示全部楼层
又是0分,直接无视
ifpga 发表于 2012-2-16 15:26 | 显示全部楼层
哈哈,哥哥,不能只为分啊:lol
GoldSunMonkey 发表于 2012-2-16 15:32 | 显示全部楼层
GoldSunMonkey 发表于 2012-2-16 15:36 | 显示全部楼层
本帖最后由 GoldSunMonkey 于 2012-2-16 15:42 编辑

:L你悬赏的分数送给别人,又不会减少你的分数。
你连点分数都不舍得给别人,别人为什么要帮助你。
 楼主| jakfens 发表于 2012-2-16 15:38 | 显示全部楼层
不懂啥意思
GoldSunMonkey 发表于 2012-2-16 15:42 | 显示全部楼层
重新编辑了,再看一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:鄙视电工就是鄙视全人类的智慧;抛弃电子就是毁灭文明,人类将回到刀割火种的时代

30

主题

1865

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部