【iCore1S 雙核心板_ARM】例程十二:DMA實驗——儲存器到儲存器的傳輸

XiaomaGee發表於2017-09-05

實驗原理:

  DAM(直接儲存器訪問)傳輸不需要佔用CPU,可以在儲存器至儲存器實現高速的資料

傳輸。本實驗採用DAM2控制器的資料流0,選用通道0進行資料傳輸。通過LED的顏色來

判斷傳輸是否成功。

實驗現象:

  實驗成功藍色LED燈閃爍,實驗失敗紅色LED燈閃爍。

核心程式碼:

int main(void)
{

  /* USER CODE BEGIN 1 */
  HAL_StatusTypeDef har_status;

  /* USER CODE END 1 */

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

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

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

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  SystemClock_Config();

  /* USER CODE BEGIN 2 */
    
  //²âÊÔDMA£¬²âÊԳɹ¦À¶µÆÉÁ˸£¬²âÊÔʧ°Ü£¬ºìµÆÉÁ˸
  har_status=HAL_DMA_Start(&hdma_memtomem_dma1_channel1,(uint32_t)&SRC_Const_Buffer,(uint32_t)&DST_Buffer,32);
    
  if(har_status==HAL_OK)
  {
    TransferStatus = Buffercmp(SRC_Const_Buffer, DST_Buffer, 32);   // ¼ì²é·¢ËͺͽÓÊÕµÄÊý¾ÝÊÇ·ñÏàµÈ 
    
    if(TransferStatus == SUCCEED)    // Èç¹û½ÓÊպͷ¢Ë͵ÄÊý¾Ý¶¼ÊÇÏàͬµÄ£¬Ôòͨ¹ý 

    {            
            while(1){
                    LED_BLUE_TOGGLE;
                    HAL_Delay(1000);        
            }            
    }
    else                                                      // Èç¹û½ÓÊպͷ¢Ë͵ÄÊý¾Ý²»Í¬£¬Ôò´«Êä³ö´í 

    {
            while(1){
                    LED_RED_TOGGLE;
                    HAL_Delay(1000);        
            }            
    }
  }
  /* 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/1c6h7rg 密碼:hfza

相關文章