A3P250 spi 从机 LED 控制逻辑

A3P250 spi 从机, 主机发送指令控制 LED , 0x55 关闭 LED, 0x AA 打开 LED;

 

module led( clk_40mhz, rst_n, led_1, spi_cs_n, spi_clk, spi_mosi, gpio_95, gpio_94, gpio_93 );

input clk_40mhz;  // pin62
input rst_n;      // pin64
output led_1;     // pin13

output gpio_95;   // pin95
output gpio_94;   // pin94
output gpio_93;   // pin93

// spi signal
input spi_cs_n; // pin97
input spi_clk;  // pin98 必须用 可以接入时钟的 引脚
input spi_mosi; // pin96

// 变量区
reg led_reg = 1'd0;

reg [3:0] rx_cnt = 4'd0;
reg [7:0] rx_data = 8'd0;

// 接收数据控制逻辑
always @(posedge spi_clk or posedge spi_cs_n or negedge rst_n) begin
    if(!rst_n) 
    begin
        rx_data <= 8'd0;
    end 
    else if(!spi_cs_n)
    begin
        rx_data[rx_cnt] <= spi_mosi;
    end
    else begin
        rx_data <= 8'd0;
    end
end

// 接收计数 控制逻辑
always @(posedge spi_clk or posedge spi_cs_n or negedge rst_n) begin
    if(!rst_n) 
    begin
        rx_cnt <= 4'd7;
    end 
    else if(!spi_cs_n)
    begin
        rx_cnt <= rx_cnt - 4'd1;
    end
    else begin
        rx_cnt <= 4'd7;
    end

end

// led 控制逻辑
always @(posedge clk_40mhz or negedge rst_n) begin

    if(!rst_n) begin
        led_reg <= 1'd0;
    end else begin
        if(rx_data==8'h55) begin
            led_reg <= 1'd1; // 接收到主机发来的数据 0x55 关闭 LED1
        end else if(rx_data == 8'hAA) begin
            led_reg <= 1'd0; // 接收到主机发来的数据 0xAA 关闭 LED1
        end

    end

end


assign led_1 = led_reg;

// 输出信号观察
assign gpio_95 = spi_cs_n;
assign gpio_94 = spi_clk;
assign gpio_93 = spi_mosi;

endmodule

 

posted on 2025-08-01 16:00  所长  阅读(17)  评论(0)    收藏  举报

导航