您的位置:首页 > 其它

【iCore1S 双核心板_ARM】例程十八:SD_IAP_FPGA实验——更新升级FPGA

2017-10-20 08:45 711 查看
实验现象及操作说明:

1、烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点亮,烧写失败,如果挂载SD卡失败,红灯快闪,如果打开文件失败,蓝灯快闪,读取文件指针移动失败,白灯点亮,升级失败,红灯慢闪。

2、上电时按着ARM·KEY,进入虚拟U盘模式,计算机将出现一个磁盘,可将升级文件拷入SD卡。

核心代码:

int main(void)
{

/* USER CODE BEGIN 1 */
int i;
int k;
unsigned int counter;
unsigned long int ncounter = 0;
unsigned char buffer[1024];
FIL fil;
FATFS fatfs;
static FRESULT res;

/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */
/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_SDIO_SD_Init();
//  MX_USB_DEVICE_Init();
MX_FATFS_Init();

/* USER CODE BEGIN 2 */
if(!KEY_INPUT){
MX_USB_DEVICE_Init();
while(1){
LED_RED_ON;
HAL_Delay(300);
LED_RED_OFF;
HAL_Delay(300);
}
}

if(BSP_SD_Init() != USBD_OK){
while(1){
LED_RED_ON;
for(i = 0;i < 3000000;i++);
LED_RED_OFF;
for(i = 0;i < 3000000;i++);
}
}
HAL_Delay(500);

//¹ÒÔØSD¿¨
res = f_mount(&fatfs,"0:",1);
if(res != RES_OK){

//¹ÒÔØʧ°Ü£¬Â̵ƿìÉÁ
while(1){
LED_GREEN_ON;
for(i = 0;i < 3000000;i++);
LED_GREEN_OFF;
for(i = 0;i < 3000000;i++);
}
}
res = f_open(&fil,"0:/system/sdram.rbf",FA_READ);
if(res != RES_OK){

//´ò¿ªÊ§°Ü£¬À¶µÆ¿ìÉÁ
while(1){
LED_BLUE_ON;
for(i = 0;i < 3000000;i++);
LED_BLUE_OFF;
for(i = 0;i < 3000000;i++);
}
}
res = f_lseek(&fil,0);
if(res != RES_OK){
//°×É«
LED_RED_ON;
LED_BLUE_ON;
LED_GREEN_ON;
while(1){
}
}

//¿ªÊ¼Éý¼¶FPGA³ÌÐò
NCONFIG_OFF;
DCLK_OFF;
for(i = 0; i < 5000; i++);
if(NSTATUS == 1)
{
LED_RED_ON;
return 0;
}
for(i = 0;i < 40;i++);
NCONFIG_ON;
for(i = 0; i < 40; i++);

while(ncounter < fil.fsize)
{
res = f_read(&fil,buffer,1024,&counter);
if(res != RES_OK){

while(1){
LED_RED_ON;
for(i = 0;i < 10000000;i++);
LED_RED_OFF;
for(i = 0;i < 10000000;i++);
}
}
for(k = 0; k < counter; k++)
{
for(i = 0; i < 8; i++)
{
if(buffer[k]&0x01)DATA0_ON;
else DATA0_OFF;
DCLK_ON;
buffer[k] >>= 1;
DCLK_OFF;
}
ncounter++;
}
}
if(CONFIG_DONE == 1){
LED_GREEN_ON;
}else {
LED_BLUE_ON;
}

for(i = 0; i < 40; i++)
{
DCLK_ON;
for(i = 0; i < 800; i++);
DCLK_OFF;
for(i = 0; i < 800; i++);
}

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}
/* USER CODE END 3 */

}


实验方法及指导书:

链接:http://pan.baidu.com/s/1dFjJs5N 密码:kylw



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐