[Actel FPGA] 串口发送

[复制链接]
2010|1
 楼主| li0411 发表于 2008-6-11 20:23 | 显示全部楼层 |阅读模式
功能:<br />实现10Hz向外发送10个字节数据<br />问题:<br />通过仿真,没有问题,下载后也没有问题&nbsp;;系统断电后,重起,没有数据输出.<br /><br />//&nbsp;Send.v<br />module&nbsp;Uart_Send(Clk_Out,TXD,TI);<br />input&nbsp;Clk_Out;<br />output&nbsp;TXD,TI;<br />reg[7:0]&nbsp;Send_d;<br />//TI为发送中断标志:正在发送时为0,发送完最后一位后置1,且空闲时为1<br />reg&nbsp;[9:0]&nbsp;Send_d1ata;&nbsp;//发送数据缓存(加上起始位“0”和结束位“1”)<br />reg&nbsp;load_count&nbsp;=&nbsp;1;&nbsp;//装载输入数据标志:为“1”时载入新数据<br />reg&nbsp;TI,TXD_buf,TXD;<br />reg&nbsp;Date_En&nbsp;=&nbsp;0;&nbsp;//100H发送数据使能&nbsp;<br />integer&nbsp;Clk_Conut&nbsp;=&nbsp;0;<br />integer&nbsp;send_count&nbsp;=&nbsp;0;<br />integer&nbsp;data_Count&nbsp;=&nbsp;0;<br />//TI为发送中断标志寄存器,TXD_buf为串行数据数据输出缓存<br />always&nbsp;@(posedge&nbsp;Clk_Out&nbsp;)<br />//9600Hz脉冲计数,经过100分频,得到100Hz的发送使能<br />begin&nbsp;<br />if(Clk_Conut&nbsp;&lt=&nbsp;960)<br />begin&nbsp;<br />Clk_Conut&nbsp;=&nbsp;Clk_Conut+1;&nbsp;<br />end&nbsp;<br />else<br />begin<br />Date_En&nbsp;=&nbsp;1;<br />Clk_Conut&nbsp;=&nbsp;0;&nbsp;<br />end<br />//发送使能,开始发送数据<br />if(Date_En&nbsp;==&nbsp;1)<br />begin<br />//装载数据<br />if(load_count&nbsp;==&nbsp;1)<br />begin&nbsp;<br />Send_d&nbsp;=&nbsp;data_Count;//data[data_Count*8+:8]&nbsp;;&nbsp;<br />Send_d1ata&nbsp;=&nbsp;{1'b1,Send_d,1'b0};&nbsp;<br />load_count&nbsp;=&nbsp;0;<br />TI&nbsp;=&nbsp;0;<br />end<br />else<br />begin<br />if(send_count&nbsp;&gt=&nbsp;10)&nbsp;//当send_count等于10时,已发送完一个字节&nbsp;<br />begin<br />send_count&nbsp;=&nbsp;0;&nbsp;//清零发送位数计数器<br />TXD_buf&nbsp;=&nbsp;1;<br />TI&nbsp;=&nbsp;1;&nbsp;//发送完毕中断标志<br />load_count&nbsp;=&nbsp;1;&nbsp;//置位load_count,允许载入新数据<br />data_Count&nbsp;=&nbsp;(data_Count+1);&nbsp;//指向下一个数据,如果发送字节完毕,Date_En=0;<br />if(data_Count&nbsp;&gt=&nbsp;10)<br />begin<br />Date_En&nbsp;=&nbsp;0;&nbsp;<br />data_Count&nbsp;=&nbsp;0;<br />end<br />end<br />else<br />begin<br />TI&nbsp;=&nbsp;0;&nbsp;//清除发送完毕中断标志<br />TXD_buf&nbsp;=&nbsp;Send_d1ata[0];&nbsp;//串行数据输出<br />Send_d1ata&nbsp;=&nbsp;(Send_d1ata&nbsp;&gt&gt&nbsp;1'b1);&nbsp;//将高位移至最低位<br />send_count&nbsp;=&nbsp;(send_count&nbsp;+&nbsp;1'b1);<br /><br />end<br /><br />end&nbsp;<br />TXD&nbsp;&lt=&nbsp;TXD_buf;&nbsp;//数据从TXD端输出&nbsp;<br />end<br />end<br />endmodule<br />下载完,通过示波器,串口调试助手接受数据,都正常。<br /><br />关掉FPGA的电源,重开启,示波器上面是很多脉冲,没有固定周期,<br /><br />这是什么原因?????<br />
fsyicheng 发表于 2008-9-1 14:22 | 显示全部楼层

复位

我有个建议,就是加一个复位信号.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

0

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