[an error occurred while processing this directive]
вот собственно "test case" - может я чего-то не так сделал
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено yes 29 сентября 2005 г. 10:04
В ответ на: кто с BF531-BF533 работает, не сталкивались ли с тем, что source MDMAx не умеет генерить прерывание? отправлено yes 29 сентября 2005 г. 10:00


#include
#include

short 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_INTERRUPT

EX_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: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru