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

📄 fpga.c

📁 一个开放源码
💻 C
字号:
/* $Id: fpga.c,v 1.2 2000/11/15 17:44:54 apc Exp $ *//* Copyright 2000  AG Electronics Ltd. *//* This code is distributed without warranty under the GPL v2 (see COPYING) */#include <stdio.h>#include "fpgadata.h"#define FPGA_INIT 8#define FPGA_PROG 4#define FPGA_DONE 2#define FPGA_BUSY 1#ifdef DEBUG_FPGA#define DBG_printf(x) printf x#else#define DBG_printf(x)#endifint program_fpga (void){    volatile char *fpga = (volatile char *) 0xff300000;    int i, count;    volatile unsigned char *fpgactrl = (volatile unsigned char *)0xff000003;        printf("Loading interrupt controller FPGA\n");    if ((*fpgactrl & FPGA_INIT) != 0)	DBG_printf (("INIT is presently asserted\n"));    else	DBG_printf (("INIT is presently deasserted\n"));    DBG_printf (("asserting PROGRAM\n"));    *fpgactrl = FPGA_PROG;    for (i = 0; i < 100; i++)	(void) *fpgactrl;    DBG_printf (("deasserting PROGRAM\n"));    *fpgactrl = 0;    if ((*fpgactrl & FPGA_INIT) == 0)        DBG_printf(("INIT deasserted early\n"));    DBG_printf (("waiting for INIT to deassert\n"));    i = 0;    while ((*fpgactrl & FPGA_INIT) != 0 && i < 100)	i++;    if ((*fpgactrl & FPGA_INIT) != 0)    {        printf("Failure: FPGA INIT did not deassert\n");        return -1;    }          DBG_printf (("checking that DONE is deasserted\n"));    if ((*fpgactrl & FPGA_DONE) != 0)    {	printf ("Failure: found FPGA DONE asserted before programming.\n");        return -1;    }    /* do programming */    DBG_printf (("programming %d bytes...\n",sizeof(fpga_data)));    count = 0;    for (i = 0; i < sizeof(fpga_data); i ++)    {	if ((count % 4096) == 0)	    DBG_printf (("%d bytes\n", count));	count++;	if ((*fpgactrl & FPGA_DONE) != 0)	{	    DBG_printf (("DONE asserted after %d bytes\n", count));	    break;	}	if ((*fpgactrl & FPGA_INIT) != 0)	    DBG_printf (("INIT asserted after %d bytes.\n", count));       *fpga = fpga_data[count];    }        if ((*fpgactrl & FPGA_DONE) == 0)    {	DBG_printf (("waiting for DONE assertion\n"));	while ((*fpgactrl & FPGA_DONE) == 0)            ;    }    DBG_printf (("Done.\n"));        if (fpga[0] == 0xe4 && fpga[1] == 0xfa)        printf("Interrupt controller loaded, version %d.%d\n",                fpga[2], fpga[3]);    else    {        printf("Interrupt controller load failed, signature 0x%02x%02x\n",                fpga[0], fpga[1]);        return -1;    }        return 0;}

⌨️ 快捷键说明

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