#include "main.h" #include "ff.h" /******************************************************************************/ #define FSPI_DELAY 100 void fspi_delay(void) { int i; for(i=0; i>16)&0xff); fspi_trans((addr>> 8)&0xff); fspi_trans((addr>> 0)&0xff); fspi_setcs(1); fspi_delay(); epcs_wait(); return 0; } int epcs_page_write(int addr, u8 *buf) { int i; epcs_wen(1); fspi_setcs(0); fspi_delay(); fspi_trans(0x02); fspi_trans((addr>>16)&0xff); fspi_trans((addr>> 8)&0xff); fspi_trans((addr>> 0)&0xff); for(i=0; i<256; i++){ fspi_trans(buf[i]); } fspi_setcs(1); fspi_delay(); epcs_wait(); return 0; } int epcs_read(int addr, int len, u8 *buf) { int i; fspi_setcs(0); fspi_delay(); fspi_trans(0x0b); fspi_trans((addr>>16)&0xff); fspi_trans((addr>> 8)&0xff); fspi_trans((addr>> 0)&0xff); fspi_trans(0); for(i=0; i>24; } int fpga_update(int check) { FIL fp; int i, addr, retv, fsize; u8 fbuf[256]; // 检查是否有升级文件. retv = f_open(&fp, "/SAROO/update/SSMaster.rbf", FA_READ); if(retv){ printk("No FPGA config file.\n"); return -1; } fsize = f_size(&fp); printk("Found FPGA config file.\n"); printk(" Size %08x\n", fsize); if(check){ f_close(&fp); return 0; } printk("EPCS ID: %08x\n", epcs_readid()); for(addr=0; addrIDR&0x0800)? 1 : 0; } int fpga_status(void) { return (GPIOC->IDR&0x0010)? 1 : 0; } int fpga_init_done(void) { return (GPIOC->IDR&0x0080)? 1 : 0; } int fpga_set_config(int val) { if(val) GPIOA->BSRR = 0x0010; else GPIOA->BSRR = 0x0010<<16; return (GPIOA->IDR&0x0010)? 1 : 0; } void fpga_reset(int val) { if(val) GPIOC->BSRR = 0x0020; else GPIOC->BSRR = 0x0020<<16; } void fpga_config(void) { FIL fp; int i, retv, addr; u32 rv; u8 fbuf[256]; fpga_reset(0); // 等待FPGA配置完成 for(i=0; i<10; i++){ if(fpga_config_done()) break; osDelay(1); } if(i==10){ printk("FPGA config timeout!\n"); }else{ fpga_reset(1); printk("FPGA config done!\n"); } printk("FPGA state:\n"); printk(" config done: %d\n", fpga_config_done()); printk(" init done: %d\n", fpga_init_done()); printk(" status: %d\n", fpga_status()); printk("\n"); return; } /******************************************************************************/