Что является источником ошибки IID 0x7ffffff в отладчике CCES и как ее исправить?

У меня проблемы с передачей MDMA на ADSP-SC584. Я работаю в CCES IDE 2.8.3

Я беру пример проекта MDMA CrossCore и делаю изменения в направлении потока данных ARM. Таким образом, инициализация одинакова (адреса MCAPI и SID прерывания).

У меня сложная проблема с этим:

  1. Когда я запускаю проект в режиме отладки с ICE-1000 и запускаю ядро ​​DSP, отправляющее данные с MDMA, ядро ​​ARM не запускается. Но когда я выполняю пошаговое выполнение MDMA, отправляющего триггеры ядра ARM, я вижу данные в буфере зоны DDR ARM и т. Д.

  2. Когда я запускаю оба ядра, я получаю ошибку ошибки

    Включено прерывание с идентификатором (IID) 0x7fffffff, возникающее, когда не зарегистрирован обработчик.

MDMA открыть в DSP Proj:

ADI_DMA_RESULT eResult = ADI_DMA_SUCCESS;
  //*************************************************************************
  // Open MDMA channel
  //*************************************************************************
  DBG_MSG ( "Core1: Opening MDMA channel\n");
  eResult = adi_mdma_Open (MEMCOPY_STREAM_ID, &MemDmaStreamMem[0],
               &hMemDmaStream, &hSrcDmaChannel, &hDestDmaChannel,
               NULL,
               NULL);

  if (eResult != ADI_DMA_SUCCESS)
    {
      DBG_MSG ("Failed to open MDMA stream, Error Code: 0x%08X\n",
        eResult);
      return ARM_LINK_ERROR;
    }

  //*************************************************************************
  // Configure MDMA channel
  //*************************************************************************
  adi_mdma_EnableChannelInterrupt (hDestDmaChannel, false, false); // Disable the MDMA destination transfer complete interrupt
  adi_mdma_GetChannelSID (hDestDmaChannel, &nSid_SHARC1_Master); // Get the channel SID for the MDMA destination complete interrupt
  /*add sharc int offset*/
  //adi_sec_SetPriority(nSid_SHARC1_Master,ADI_SEC_MAX_INT_PRIO);
  nSid_SHARC1_Master += SHARC_INT_OFFSET;

  //adi_sec_SetCoreID (nSid_SHARC1_Master, ADI_SEC_CORE_0);

 adi_mdma_EnableChannelInterrupt (hSrcDmaChannel, true, true);    // Enable the MDMA source transfer complete interrupt
  DBG_MSG ( "\n Destination Channel interrupt SID: \t%08X\n ",
        (unsigned int) nSid_SHARC1_Master);

  #if 1
    eResult = adi_dma_UpdateCallback (hSrcDmaChannel, MemDmaCallback,  hMemDmaStream); // Register source transfer complete interrupt
    /* IF (Failure) */
    if (eResult != ADI_DMA_SUCCESS)
      {
        DBG_MSG ("Failed to set DMA callback, Error Code: 0x%08X\n",eResult);
        return ARM_LINK_ERROR;
      }
  #endif

установить прерывание на подчиненном ARM:

adi_int_InstallHandler (nSID_SHARC_Master, DataTransferFromSHARCComplete, NULL, true);

Я вижу, что MCAPI отправляет мне правильный SID прерывания (со смещением для ARM)

Обратный звонок на ARM с RTOS:

void DataTransferFromSHARCComplete(uint32_t SID, void *pCBParam)
{
  // Save the CPU registers
  CPU_SR_ALLOC();
  // Protect a critical section
  CPU_CRITICAL_ENTER();
  // Make the kernel aware that
  // the interrupt has started
  OSIntEnter();
 CPU_CRITICAL_EXIT();
  // Handle the interrupt
  static uint32_t test=0;
  test= BufferFromSHARC1[0];
  BufferFromSHARC1[0]=0;
  // Make the kernel aware that
  // the interrupt has ended
  OSIntExit();
}

Мне нужно отправить данные, которые я получаю от DSP на ПК через UDP. Передача UDP работает автономно, передача DMA работает автономно, но вместе я всегда получаю ошибку 0x7fffffff IID.

0 ответов

Другие вопросы по тегам