首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA串口单次发送16bit数据 (转)

FPGA串口单次发送16bit数据 (转)

串口在调试代码的时候,打印信息很方便,MCU,DSP,ARM,都是集成的串口控制器,向SBUF写数据,然后启动发送,就是可以开始发送数据了,但是FPGA没有这个集成的串口控制器,这就需要我们自己模拟IO来实现的,接下来我们具体谈谈。
我用的功能需要连续发送16bit的数据,也就是说,每次启动串口发送,都是发送2个字节数据,只要TxD_start输入一定频率的矩形波,就是连续将16bit数据发送出去了。
看代码,我在网友的代码上修改的。



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
继承事业,薪火相传
返回列表