基于ARM的FPGA加载配置实现
[09-12 18:12:06] 来源:http://www.88dzw.com 单片机学习 阅读:8180次
文章摘要:pioc->PIO_IFER =nSTATUS | CONF_DONE;pioc->PIO_CODR =DATA0 | nCONFIG | DCLK; pioc->PIO_IDR=DATA0 | nCONFIG | DCLK | nSTATUS | CONF_DONE; pioc->PIO_MDDR =DATA0 | nCONFIG | DCLK;pioc->PIO_PPUDR=DATA0 | nCONFIG | DCLK | nSTATUS | CONF_DONE;pioc->PIO_OWDR =DATA0 | nCONFIG | DCLK | nSTAT
基于ARM的FPGA加载配置实现,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.compioc->PIO_IFER =nSTATUS | CONF_DONE;
pioc->PIO_CODR =DATA0 | nCONFIG | DCLK; pioc->PIO_IDR =DATA0 | nCONFIG | DCLK | nSTATUS | CONF_DONE;
pioc->PIO_MDDR =DATA0 | nCONFIG | DCLK;
pioc->PIO_PPUDR =DATA0 | nCONFIG | DCLK | nSTATUS | CONF_DONE;
pioc->PIO_OWDR =DATA0 | nCONFIG | DCLK | nSTATUS | CONF_DONE;
}
int pioc_map ()
{
int fd;
off_t addr = 0xFFFFF800; // PIO controller C
static void *base;
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC)) == -1)
{
printf ("Cannot open /dev/mem.\n");
}
printf ("/dev/mem opened.\n");
base = mmap (0, MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK);
if (base == (void *) -1)
{
printf ("Cannot mmap.\n");
return 0;
}
printf ("Memory mapped at address %p.\n", base);
pioc = base + (addr & MAP_MASK);
return 1;
}
int main (int argc, char **argv)
{
FILE *file;
char data[16];
int nbytes, i;?
if (argc != 2)
{
printf ("%s \n", argv[0]);
return -1;
}
file = fopen (argv[1], "r");
if (!file)
{
printf ("File %s not found.\n", argv[1]);
return -1;
}
if (!pioc_map ())
return -1;
pioc_setup ();
pioc_out_0 (nCONFIG);
for (i = 0; i < 10000 && pioc_in (nSTATUS); i++) { }
if (i == 10000)
{
printf ("nSTATUS = 1 before attempting configuration.\n");
return -1;
}
pioc_out_1 (nCONFIG);
for (i = 0; i < 10000 && !pioc_in (nSTATUS); i++) { }
if (i == 10000)
{
printf ("Timeout waiting for nSTATUS = 1.\n");
return -1;
}
while ((nbytes = fread (data, sizeof (char), sizeof (data), file)) > 0)
{
if (pioc_in (CONF_DONE))
{
printf ("CONF_DONE = 1 while transmitting data.\n");
return -1;
}
if (!pioc_in (nSTATUS))
{
printf ("nSTATUS = 0 while transmitting data.\n");
return -1 ;
}
for (i = 0; i < nbytes; i++)
xmit_byte (data[i]);
}
for (i = 0; i < 10000 && !pioc_in (CONF_DONE); i++)
{
if (!pioc_in (nSTATUS))
{
printf ("nSTATUS = 0 while transmitting data.\n");
return -1;
}
pioc_out_0 (DATA0);
pioc_out_0 (DCLK);
pioc_out_1 (DCLK);
}
if (i == 10000)
{
printf ("Timeout waiting for CONF_DONE = 1.\n");
return -1;
}
return 0;
}
4 结论
本文给出了基于ARM的FPGA加载配置软件实现。这种方法充分利用了ARM的速度快、灵活的特点,节省了开发成本,又满足了一些特殊的系统设计要求。本方法也适用于其它的微处理器
《基于ARM的FPGA加载配置实现》相关文章
- › 基于ARM+FPGA的重构控制器设计
- › 基于ARM的FPGA加载配置实现
- › 基于ARM7+μC/OSII的数据采集系统设计
- › 基于ARM的信号发生器人机交互系统设计
- › 基于ARM嵌入式系统的ISP设计
- › 基于ARM微处理器的uC/OS的移植设计
- 在百度中搜索相关文章:基于ARM的FPGA加载配置实现
- 在谷歌中搜索相关文章:基于ARM的FPGA加载配置实现
- 在soso中搜索相关文章:基于ARM的FPGA加载配置实现
- 在搜狗中搜索相关文章:基于ARM的FPGA加载配置实现