MHROIF0J0)GMTOAT89~8@MI.png (14.17 KB, 下載次數: 77)
下載附件
2020-6-15 21:30 上傳
- module uart_rx(
- clk,
- rst_n,
- bps_start,
- clk_bps,
- rs232_rx,
- rx_data,
- rx_int,
- led
- );
- input clk; //時鐘
- input rst_n; //復位
- input rs232_rx; //接收數據信號
- input clk_bps; //高電平時為接收信號中間采樣點
- output bps_start; //接收信號時,波特率時鐘信號置位
- output [7:0] rx_data;//接收數據寄存器
- output rx_int; //接收數據中斷信號,接收過程中為高
- output [7:0] led;
- reg [7:0] led;
- reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;//接收數據寄存器
- wire neg_rs232_rx;//表示數據線接收到下沿
-
- always @(posedge clk or negedge rst_n) begin
- if(!rst_n) begin
- rs232_rx0 <= 1'b0;
- rs232_rx1 <= 1'b0;
- rs232_rx2 <= 1'b0;
- rs232_rx3 <= 1'b0;
- end
-
- else begin
- rs232_rx0 <= rs232_rx;
- rs232_rx1 <= rs232_rx0;
- rs232_rx2 <= rs232_rx1;
- rs232_rx3 <= rs232_rx2;
- end
- end
- assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0;//串口傳輸線的下沿標志
- reg bps_start_r;
- reg [3:0] num;//移位次數
- reg rx_int; //接收中斷信號
-
- always @(posedge clk or negedge rst_n)
- if(!rst_n) begin
- bps_start_r <=1'bz;
- rx_int <= 1'b0;
- end
- else if(neg_rs232_rx) begin//
- bps_start_r <= 1'b1; //啟動串口,準備接收數據
- rx_int <= 1'b1; //接收數據中斷使能
- end
- else if(num==4'd12) begin //接收完有用的信號,
- bps_start_r <=1'b0; //接收完畢,改變波特率置位,方便下次接收
- rx_int <= 1'b0; //接收信號關閉
- end
-
- assign bps_start = bps_start_r;
-
- reg [7:0] rx_data_r;//串口數據寄存器
- reg [7:0] rx_temp_data;//當前數據寄存器
-
- always @(posedge clk or negedge rst_n)
- if(!rst_n) begin
- rx_temp_data <= 8'd0;
- num <= 4'd0;
- rx_data_r <= 8'd0;
- end
- else if(rx_int) begin //接收數據處理
- if(clk_bps) begin
- num <= num+1'b1;
- case(num)
- 4'd1: rx_temp_data[0] <= rs232_rx;
- 4'd2: rx_temp_data[1] <= rs232_rx;
- 4'd3: rx_temp_data[2] <= rs232_rx;
- 4'd4: rx_temp_data[3] <= rs232_rx;
- 4'd5: rx_temp_data[4] <= rs232_rx;
- 4'd6: rx_temp_data[5] <= rs232_rx;
- 4'd7: rx_temp_data[6] <= rs232_rx;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼 全部資料51hei下載地址:
uart.7z
(1.28 MB, 下載次數: 42)
2020-6-15 21:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|