📄 fpga.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 + -