This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

IDMA on C6747/OMAPl137

Hello,

I am trying to to copy buffer from address in SDRAM into address in IRAM using IDMA0 channel. The function I wrote is (from modified CSL):

CSL_IdmaRegsOvly idmaRegs = (CSL_IdmaRegsOvly)CSL_IDMA_0_REGS;  // a structure that maps IDMA0 and IDMA1 registers

void IDMA0_Copy(Uint32 * dst, Uint32 * src, Uint32 length, Uint32 mask)
{
unsigned int restore_value;

// Save interrupt state
  restore_value = _disable_interrupts();
  idmaRegs->IDMA0_MASK = mask;
  idmaRegs->IDMA0_SOURCE = (Uint32)src;   // Set the source
  idmaRegs->IDMA0_DEST = (Uint32)dst;         // Set destination

  idmaRegs->IDMA0_COUNT = CSL_FMKT(IDMA_IDMA0_COUNT_INT, INT)
                        | CSL_FMK(IDMA_IDMA0_COUNT_COUNT,length);                                // length is a multiple of 4

  // Wait while the transfer is active
  while(CSL_FEXT(idmaRegs->IDMA0_STAT,IDMA_IDMA0_STAT_ACTV) == 1);
  // Restore interrupt state
  _restore_interrupts(restore_value);
}

Physically I see in watch that I am writing to the IDMA registers, starting from address 0x01820000, but nothing happens.

The source address is 0xC300AD30 (in SDRAM), the destination address is 0x1180D8D0 (IRAM). Can I use the IDMA for these addresses? If so what I am doing wrong?

 

Thanks

Arye