原创 FPGA串口单次发送16bit数据

2013-1-15 10:24 2763 5 9 分类: FPGA/CPLD

串口在调试代码的时候,打印信息很方便,MCU,DSP,ARM,都是集成的串口控制器,向SBUF写数据,然后启动发送,就是可以开始发送数据了,但是FPGA没有这个集成的串口控制器,这就需要我们自己模拟IO来实现的,接下来我们具体谈谈。http://bbs.ednchina.com/BLOG_ARTICLE_219306.HTM,这是网友博客的地址,对串口讲的很经典,是FPGA实现串口的东西,很好,我就是参考他的代码,在这里表示感谢了,24343357_133867969906KI.jpg

这位网友给出的代码是串口调试助手发送一个字节数据到FPGA,然后FPGA将该字节返回给串口调试助手。

我用的功能需要连续发送16bit的数据,也就是说,每次启动串口发送,都是发送2个字节数据,只要TxD_start输入一定频率的矩形波,就是连续将16bit数据发送出去了。

看代码,我在网友的代码上修改的。

 

24343357_1338679722g3JH.jpg

Data2uart是要发送的数据,data2是发送频率,我用KEY2来触发的。这是top层代码。

下面,我们看看async_transmitter里面我修改了什么,下面标红的代码,就是我添加的,没有什么难度,都可以看懂的,不多说了,这里还是要谢谢那个位网友。CLK时钟为50MHZ,波特率115200.

reg [1:0]counter;

always @(posedge clk)

 if(TxD_ready & TxD_start & (counter<2)) TxD_dataReg <= TxD_data;

wire [15:0] TxD_dataD = RegisterInputData ? TxD_dataReg : TxD_data;

always @(posedge clk )

if(counter<2)

begin

case(state)

       4'b0000: if(TxD_start) state <= 4'b0001;              

       4'b0001: if(BaudTick) state <= 4'b0100;                                                      

       4'b0100: if(BaudTick) state <= 4'b1000;  // start              

       4'b1000: if(BaudTick) state <= 4'b1001;  // bit 0              

       4'b1001: if(BaudTick) state <= 4'b1010;  // bit 1   

       4'b1010: if(BaudTick) state <= 4'b1011;  // bit 2    

       4'b1011: if(BaudTick) state <= 4'b1100;  // bit 3

       4'b1100: if(BaudTick) state <= 4'b1101;  // bit 4

       4'b1101: if(BaudTick) state <= 4'b1110;  // bit 5

       4'b1110: if(BaudTick) state <= 4'b1111;  // bit 6

       4'b1111: if(BaudTick)

                                          begin

                                          state <= 4'b0010;

                                          counter<=counter+1;

                                          end                        // bit 7

       4'b0010: if(BaudTick) state <= 4'b0011;  // stop1

       4'b0011: if(BaudTick) state <= 4'b0000;  // stop2

       default: if(BaudTick) state <= 4'b0000;

endcase

end

else if(TxD_start==0)

counter<=0;

reg muxbit;

always @( * )

if(counter==0)

begin

case(state[2:0])

       3'd0: muxbit <= TxD_dataD[0];

       3'd1: muxbit <= TxD_dataD[1];

       3'd2: muxbit <= TxD_dataD[2];

       3'd3: muxbit <= TxD_dataD[3];

       3'd4: muxbit <= TxD_dataD[4];

       3'd5: muxbit <= TxD_dataD[5];

       3'd6: muxbit <= TxD_dataD[6];

       3'd7: muxbit <= TxD_dataD[7];

endcase

end

       else

       begin

       case(state[2:0])

       3'd0: muxbit <= TxD_dataD[8];

       3'd1: muxbit <= TxD_dataD[9];

       3'd2: muxbit <= TxD_dataD[10];

       3'd3: muxbit <= TxD_dataD[11];

       3'd4: muxbit <= TxD_dataD[12];

       3'd5: muxbit <= TxD_dataD[13];

       3'd6: muxbit <= TxD_dataD[14];

       3'd7: muxbit <= TxD_dataD[15]; 

endcase

end

  

文章评论4条评论)

登录后参与讨论

用户1779562 2015-12-15 18:57

xiexie

用户575732 2013-10-24 10:45

不错

用户377235 2012-7-31 15:47

同样的问题

用户420394 2012-7-10 09:12

可以啊,我这里是正常的,

用户377235 2012-7-7 21:22

一直都用的WEB版的,原来还有SwitcherPro Desktop 这么个软件。

用户377235 2012-6-8 18:36

图片怎么不显示呢?
相关推荐阅读
用户420394 2013-01-23 09:17
PCB走线信号分析3-串扰
先看串扰的一些概念,串扰是指信号在传输通道上传输时,因电磁耦合而对相邻传输线产生的影响。   变化的信号(如阶跃信号)沿传输线由A到B传播,传输...
用户420394 2013-01-23 09:16
PCB走线信号分析2-hyperlynx
传输线的反射- 先说几个信号完整性的经典语句 1:一个信号沿着传输线前进的每一步中,都会感觉到一个瞬间阻抗。听起来,感觉是在开汽车,都会感觉到路面的坑坑洼洼一...
用户420394 2013-01-23 09:16
PCB走线信号分析1-hyperlynx
昨天晚上原本还打算再介绍一下PADS如何设计自己的元器件和PCB封装,我到网络上看了一下,这个方面的有很多的教程,所以呢,我就不多说了,各位可以到网络上参考其他好心网友提供的教程,很...
用户420394 2013-01-21 12:06
CY7C68013自动下载固件驱动程序的配置
CY7C68013自动下载固件驱动程序的配置 EZ Loader Custom USB Firmware Loader Driver 上面的一串英文是cypress公司的一个文档名称,是讲...
用户420394 2013-01-21 12:01
ADUC842开发-初步概述
  简单介绍一下ADI公司的8052核心的单片机。   8052核心的,不用多说了吧,这个表可以大概的知道这个系列单片机的性能,注意,ADUC分频比可以是1,传统的8052都是1...
用户420394 2013-01-21 11:59
ADUC842开发-IIC接口
  今天简单介绍一下ADuC842的IIC接口。 ADUC842有专门的IIC接口,我们不需要使用IO去模拟IIC主机了,先看看IIC的寄存器   这里我说明一下,我们下面把...
我要评论
4
5
关闭 站长推荐上一条 /3 下一条