[an error occurred while processing this directive]
|
#include
#includeshort A[64];
short B[64];char mdma0_cnt;
//INTERRUPT
//channel 0 demonstrate source interrupt error//comment next line to receive D0 DONE interrupt
//#define SOURCE_INTERRUPTEX_INTERRUPT_HANDLER(MEMDMA0_ISR)
{
mdma0_cnt++;
#ifdef SOURCE_INTERRUPT
*pMDMA_S0_IRQ_STATUS = 0x1;
#else
*pMDMA_D0_IRQ_STATUS = 0x1;
#endif
}void Init_MDMA0_test(long source, long dest)
{
// source before destination
// read channel
*pMDMA_S0_START_ADDR=(void *)source;
*pMDMA_S0_X_COUNT = 64;
*pMDMA_S0_X_MODIFY = 0x2;//write channel
*pMDMA_D0_START_ADDR=(void *)dest;
*pMDMA_D0_X_COUNT = 64;
*pMDMA_D0_X_MODIFY = 0x2;//array
#ifdef SOURCE_INTERRUPT
*pMDMA_S0_CONFIG = DMAEN | WDSIZE_16 | DI_EN;
asm("ssync;");
*pMDMA_D0_CONFIG = DMAEN | WDSIZE_16 | WNR;
#else
*pMDMA_S0_CONFIG = DMAEN | WDSIZE_16 ;
asm("ssync;");
*pMDMA_D0_CONFIG = DMAEN | WDSIZE_16 | WNR | DI_EN;
#endif
}void Init_Interrupts(void)
{
register_handler(ik_ivg13, MEMDMA0_ISR);
*pSIC_IMASK=0x00200000;
}main()
{
Init_Interrupts();for(i=0;i<64;i++)
A[i]=0x100+i;
Init_MDMA0_test((long)A,(long)B);while(!mdma0_cnt);
for(;;);
};
E-mail: info@telesys.ru