zoukankan      html  css  js  c++  java
  • 【iCore1S 双核心板_ARM】例程十七:FSMC实验——读写FPGA

    实验现象:

    先烧写FPGA程序,再烧写ARM程序,ARM程序烧写完毕后即开始读写RAM测试,测试成功,绿色ARM·LED亮,测试失败,红色ARM·LED闪烁。

    核心代码:

    int main(void)
    {
    
      /* USER CODE BEGIN 1 */
    
      /* USER CODE END 1 */
    
      /* MCU Configuration----------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_FSMC_Init();
    
      /* USER CODE BEGIN 2 */
        int i;
        unsigned short int fsmc_read_data;
        LED_GREEN_ON;
        
        /*ÂÌÉ«ledÁÁ£¬±íʾ²âÊÔÕý³£
        ºìÉ«ledÁÁ£¬±íʾ²âÊÔʧ°Ü£¬²âÊÔ½áÊø*/
    
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
      /* USER CODE END WHILE */
    
      /* USER CODE BEGIN 3 */
            for(i = 0;i < 512;i++){
             fpga_write(i,i);                  //ÏòFPGAдÈëÊý¾Ý
            }    
            for(i = 0;i < 512;i++){
                fsmc_read_data = fpga_read(i);   //´ÓFPGA¶ÁÊý¾Ý
                if(fsmc_read_data != i){
                    LED_GREEN_OFF;
                    LED_RED_ON;
                    while(1);
                }            
            }
    
      }
      /* USER CODE END 3 */
    
    }
     module FSMC_Ctrl(
        ab,
        db,
        wrn,
        rdn,
        csn,
        PLL_100M,
        RST_n,
        nadv
         );
        
    //-------------------------fsmc ------------------------------//    
        input [24:16]ab;
        inout [15:0]db;
        input wrn;
        input rdn;
        input csn;
        input PLL_100M;
        input RST_n; 
        input nadv;
        
        wire rd;
        wire wr;
        wire [15:0]DB_OUT;
    //-------------------------rd_wr ----------------------------//        
        assign rd = (csn | rdn);
        assign wr = (csn | wrn);
                
    //-------------------------ab ------------------------------//
        reg [24:0]address;
        always @ (posedge nadv or negedge RST_n)
            begin
                if(!RST_n)
                    begin
                        address <= 25'd0;
                    end
                else 
                    begin
                        address <= {ab,db};
                    end
            end 
    
    //-------------------------clk ----------------------------//
        reg wr_clk1,wr_clk2;    
        always @(posedge PLL_100M or negedge RST_n)
            begin
                if(!RST_n)
                    begin
                        wr_clk1 <= 1'd1;
                        wr_clk2 <= 1'd1;
                    end
                else
                    {wr_clk2,wr_clk1} <= {wr_clk1,wr};    //提取写时钟
            end
            
        wire clk = (!wr_clk2 | !rd);
        
    //------------------------db_out -------------------------//    
        assign db = !rd ? DB_OUT : 16'hzzzz;
    
    //------------------------ma_ram ------------------------//    
    my_ram      u1(                                            //ram块例化
                        .address(address),
                        .clock(clk),
                        .data(db),
                        .wren(!wr),
                        .rden(!rd),
                        .q(DB_OUT),
                        );
                        
    //-------------------------endmodule ------------------------------//
    endmodule

    实验方法及指导书:

    链接:https://pan.baidu.com/s/1fN0LlFdfTBUqA7VeLMxieA
    提取码:zbjj

  • 相关阅读:
    mysql "ON DUPLICATE KEY UPDATE" 语法
    HTTP协议中PUT和POST使用区别
    layui 表单渲染失败
    golang 一行代码 把array/slice转成逗号分隔的字符串
    关于layui、table数据表格请求异常回调函数
    关于layui表单中按钮自动提交的解决方法
    使用 socket.io 报错 Error during WebSocket handshake: Unexpected response code: 400
    解决MySQL报错:[Err] 1055
    jetbrains 修改 http proxy 更换代理
    layui layuiadmin layui.data 数据操作
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/7648827.html
Copyright © 2011-2022 走看看