打印
[Actel FPGA]

串口发送

[复制链接]
1361|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
li0411|  楼主 | 2008-6-11 20:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能:
实现10Hz向外发送10个字节数据
问题:
通过仿真,没有问题,下载后也没有问题 ;系统断电后,重起,没有数据输出.

// Send.v
module Uart_Send(Clk_Out,TXD,TI);
input Clk_Out;
output TXD,TI;
reg[7:0] Send_d;
//TI为发送中断标志:正在发送时为0,发送完最后一位后置1,且空闲时为1
reg [9:0] Send_d1ata; //发送数据缓存(加上起始位“0”和结束位“1”)
reg load_count = 1; //装载输入数据标志:为“1”时载入新数据
reg TI,TXD_buf,TXD;
reg Date_En = 0; //100H发送数据使能 
integer Clk_Conut = 0;
integer send_count = 0;
integer data_Count = 0;
//TI为发送中断标志寄存器,TXD_buf为串行数据数据输出缓存
always @(posedge Clk_Out )
//9600Hz脉冲计数,经过100分频,得到100Hz的发送使能
begin 
if(Clk_Conut <= 960)
begin 
Clk_Conut = Clk_Conut+1; 
end 
else
begin
Date_En = 1;
Clk_Conut = 0; 
end
//发送使能,开始发送数据
if(Date_En == 1)
begin
//装载数据
if(load_count == 1)
begin 
Send_d = data_Count;//data[data_Count*8+:8] ; 
Send_d1ata = {1'b1,Send_d,1'b0}; 
load_count = 0;
TI = 0;
end
else
begin
if(send_count >= 10) //当send_count等于10时,已发送完一个字节 
begin
send_count = 0; //清零发送位数计数器
TXD_buf = 1;
TI = 1; //发送完毕中断标志
load_count = 1; //置位load_count,允许载入新数据
data_Count = (data_Count+1); //指向下一个数据,如果发送字节完毕,Date_En=0;
if(data_Count >= 10)
begin
Date_En = 0; 
data_Count = 0;
end
end
else
begin
TI = 0; //清除发送完毕中断标志
TXD_buf = Send_d1ata[0]; //串行数据输出
Send_d1ata = (Send_d1ata >> 1'b1); //将高位移至最低位
send_count = (send_count + 1'b1);

end

end 
TXD <= TXD_buf; //数据从TXD端输出 
end
end
endmodule
下载完,通过示波器,串口调试助手接受数据,都正常。

关掉FPGA的电源,重开启,示波器上面是很多脉冲,没有固定周期,

这是什么原因?????

相关帖子

沙发
fsyicheng| | 2008-9-1 14:22 | 只看该作者

复位

我有个建议,就是加一个复位信号.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

0

粉丝