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