Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: обработка прерываний rm9200
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Отладочные платы
RW9UAO
в main описана работа с MCI:
Цитата
AT91F_MCI_CfgPIO();//AT91F_PIO_CfgPeriph();
AT91F_MCI_CfgPMC();//AT91F_PMC_EnablePeriphClock(AT91C_ID_MCI);
AT91F_PDC_Open(AT91C_BASE_PDC_MCI);
// Configure MCI interrupt
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
AT91C_ID_MCI,
AT91C_AIC_PRIOR_HIGHEST,
AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
AT91F_ASM_MCI_Handler);

// Enable MCI interrupt
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_MCI);
AT91F_MCI_Configure(AT91C_BASE_MCI,
(AT91C_MCI_DTOMUL_1048576 | AT91C_MCI_DTOCYC) ,
// 15MHz for MCK = 60MHz (CLKDIV = 1)
(AT91C_MCI_MR_PDCMODE | 1),
AT91C_MCI_SDCARD_4BITS_SLOTA );

еще есть функция чтения блока:
Цитата
read_block:
AT91C_BASE_PDC_MCI->PDC_PTCR = (AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS);
AT91C_BASE_PDC_MCI->PDC_RPR = (unsigned int)dataBuffer;
AT91C_BASE_PDC_MCI->PDC_RCR = sizeToRead;

AT91F_MCI_SendCommand(pMCI_Device, AT91C_READ_SINGLE_BLOCK_CMD, src, 0);

// Enable AT91C_MCI_RXBUFF Interrupt
AT91C_BASE_MCI->MCI_IER = AT91C_MCI_RXBUFF;

// (PDC) Receiver Transfer Enable
AT91C_BASE_PDC_MCI->PDC_PTCR = AT91C_PDC_RXTEN;

само собой описан хэндлер:
Цитата
void AT91F_MCI_Handler(void){
int status;

status = ( AT91C_BASE_MCI->MCI_SR & AT91C_BASE_MCI->MCI_IMR );
AT91F_MCI_Device_Handler(&MCI_Device,status);
}

... и ассемблерный
Цитата
ASM_ISR.s:
IRQ Entry
ldr r1, =AT91F_MCI_Handler
mov r14, pc
bx r1
IRQ Exit

Все аккуратно скопировано от Черкашина. проблема в том, что PDC набивает указанный буффер корректными данными, выставляются флаги RXBUFF, но прерывание не происходит. т.е. в обработчик прерывания я не попадаю никогда. точно также не вызывается ни обработчик SYS прерывания, ни TC0.
мою программу в память грузит атмеловский ромбут, после него я инициализирую нужную периферию.
подскажите где копать?
Daermon
Тоже подобная проблема с прерываниями от Таймеров...думаю и с другими прерываниями.
Есть пример программы который отлично работает и можно выводить нужную инфу по DBGU прямо в гипертерминал... а вот прерывания не срабатывают...
Думаю что дело в аппаратных настройках.
Вот только в каких?

зы: Есть другой пример в котором отлично работают прерывания от таймера, но не пашет вывод в DBGU/
Прикрепил пример с выводом в DBGU.
Работаю с Аргусовтовской AS-9200/

Памагите люди добрые crying.gif crying.gif crying.gif crying.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.