zoukankan      html  css  js  c++  java
  • 【iCore1S 双核心板_ARM】例程十八:SD_IAP_FPGA实验——更新升级FPGA

    实验现象及操作说明:

    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

  • 相关阅读:
    剑指offer 51.构建乘积数组
    剑指offer 50.数组中重复的数字
    股票价格涨跌预测—基于KNN分类器
    R语言-神经网络包RSNNS
    基于客户保持率的人口特性分析
    车辆碰撞位置间的关联性分析
    统计学的七大支柱[转载@谢益辉]
    AutoDesK演示项目部署
    自定义数字键盘组件化方案
    2020年大前端发展趋势
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/7697722.html
Copyright © 2011-2022 走看看