zoukankan      html  css  js  c++  java
  • 【iCore1S 双核心板_FPGA】例程十四:FSMC总线通信实验——独立地址模式

    实验原理:

      STM32F103上自带FMC控制器,本实验将通过FMC总线的地址独立模式实现STM32与FPGA

    之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC总线从STM32向

    RAM块中写入数据,然后读取RAM出来的数据进行验证。

    核心代码:

    int main(void)
    {
        int i;
        unsigned short int fsmc_read_data;
        
      HAL_Init();
      system_clock.initialize();
    
        led.initialize();
        fsmc.initialize();
        LED_GREEN_ON;
        
        while(1)
            {
                for(i=0;i<512;i++)
                {
                    fpga_write(i,i);    //дÊý¾Ý
                }
                for(i=0;i<512;i++)
                {
                    fsmc_read_data=fpga_read(i);    //¶ÁÊý¾Ý
                    if(fsmc_read_data!=i)        //±È½ÏÊý¾Ý
                    {
                        LED_GREEN_OFF;
                        LED_RED_ON;
                        while(1);
                    }
                }
         }
    }
    module FSMC_Ctrl(
        input [8:0]ab,
        inout [15:0]db,
        input wrn,
        input rdn,
        input csn,
        input PLL_48M,
        input RST_n
    );
    //------------------------wr_rd-----------------------------//
        wire wr;
        wire rd;
        
        assign wr = (csn | wrn);    //提取写信号
        assign rd = (csn | rdn);    //提取读信号
        
    //-------------------------clk------------------------------//
        reg wr_clk1,wr_clk2;
        wire clk;
        
        always@(posedge PLL_48M 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
        
        assign clk = (!wr_clk2 | !rd);    //将读写信号转换为时钟信号
        
    //-------------------------DB_OUT---------------------------//
        wire [15:0]DB_OUT;
        
        assign db = !rd ? DB_OUT : 16'hzzzz;
        
    //--------------------------ram-----------------------------//
        //实例化ram
        my_ram     u1(
                        .address(ab),
                        .clock(PLL_48M),
                        .data(db),
                        .rden(!rd),
                        .wren(!wr),
                        .q(DB_OUT)
                        );
    
    //----------------------emdmodule---------------------------//    
    endmodule

    实验方法及指导书:

    链接:http://pan.baidu.com/s/1bpq7qyV 密码:kib5

  • 相关阅读:
    (紫书,感谢作者)第7章暴力求解法
    明日更新
    明天更新
    UVa11882最大的数(dfs+剪枝)
    UVa12569树上的机器人的规划
    es6中的reduce方法?
    浏览器是如何渲染页面的?
    判断是不是一个数组?
    判断是否是一个数组?
    var与let的区别?
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/7549904.html
Copyright © 2011-2022 走看看