⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpgaconfig.c

📁 用NiosII软核配置FPGA的C语言源程序
💻 C
字号:
//-------------------------------------------------------------------------------
//                                 FPGA配置程序(NiosII)
// 描述:
//      CPU:NiosII
//      采用PS方式配置FPGA
//-------------------------------------------------------------------------------
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_type.h"
const unsigned char FPGAconfigCode[]=
{ #define "../../ep2c5/p_fpga.ttf" };

#define uchar unsigned char
#define uint  unsigned int

//nCONFIG不能用于其他用途,配置完后维持高电平
#define nCONFIG_OFF()  IOWR_ALTERA_AVALON_PIO_nCONFIG_DATA(PIO_nCONFIG_BASE,0X0)
#define nCONFIG_ON()   IOWR_ALTERA_AVALON_PIO_nCONFIG_DATA(PIO_nCONFIG_BASE,0X01)
#define nSTATUS_CHECK()   IORD_ALTERA_AVALON_PIO_nSTATUS_DATA(PIO_nSTATUS_BASE)&0X01
#define nCONFIG_DONE_CHECK()   IORD_ALTERA_AVALON_PIO_DONE_DATA(PIO_DONE_BASE)
//nCONFIG_DONE为高电平时表示配置完成
#define DCLK_OFF    IOWR_ALTERA_AVALON_PIO_DCLK_DATA(PIO_DCLK_BASE,0X0)
#define DCLK_ON     IOWR_ALTERA_AVALON_PIO_DCLK_DATA(PIO_DCLK_BASE,0X01)
//-------------------------------------------------------------------------
//nCONFIG -> PIO_nCONFIG              nSTATUS ->  PIO_nSTATUS
//nCONFIG_DONE -> PIO_DONE            DCLK  -> PIO_DCLK
//DATA ->PIO_DOUT
//-------------------------------------------------------------------------

void config_write(uchar data)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        if(data & 0x01)
        {
            IOWR_ALTERA_AVALON_PIO_DOUT_DATA(PIO_DOUT_BASE,0X01);
        }
        else
        {
            IOWR_ALTERA_AVALON_PIO_DOUT_DATA(PIO_DOUT_BASE,0X0);
        }
        DCLK_ON;
        data = data >> 1;
        DCLK_OFF;
     }
}

//---------------------------------------------------------------------------
//描述:FPGA配置子程序
//参数:无
//返回:true:配置成功;false:配置失败
//---------------------------------------------------------------------------
uchar FPGA_config(void)
{
    const uchar *p;
    uchar count;
    uchar i;
    
    nCONFIG_ON();
    delayus(5);
    nCONFIG_OFF();
    while(nSTATUS_CHECK());
    delayus(5);
    nCONFIG_ON();
    while(!nSTATUS_CHECK());
    p = FPGAconfigCode;
    while(p != &FPGAconfigCode[sizeof(FPGAconfigCode)])
    {
        config_write(*p++);
    }
    if(!CONFIG_DONE_CHECK()) return false;
    for(count=0;count<5;count++)          //使DCLK产生40个脉冲
    {
        config_write(0xff); 
    }
    return true;
}
          
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -