| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > [arm] Проблема с DMA в тестовой программе. |
| Автор: OlegIT 28.10.2010, 09:20 | ||
| Есть тестовый пример I2S для Keil, МК LPC2478 (плата SK-MLPC2478, JTAG отладчик DPM-ARM_Cortex). Программа виснет на ожидании флагов
Функция прерывания void DMAHandler(void) __irq, из файла dma.c срабатывает один раз, и значение в регистре GPDMA_INT_TCSTAT равно 1. Соответственно переменная I2SDMA0Done равна 1, а I2SDMA1Done всегда равна 0. Почему так? Как сделать так, что бы программа работала правильно? |
| Автор: daemonaz 28.10.2010, 14:54 |
| У меня такая же проблема была на I2C, стартовый сигнал принят и ждешь адрес, а его нет, хотя сигналы были. Я решал проблему таймаутом, может поможет, не сидеть в цикле, а по таймеру ждем таймаут, если не отправили, то повторить, то есть с первого раза не получается почему-то. Библиотеку с примерами можно взять из сайта STM, там же коллекция аппноутов с исходниками, или же в папке IAR там тоже есть примеры.. |
| Автор: OlegIT 29.10.2010, 12:04 | ||||
Попробовал проект SSP0, там используются два канала DMA. Вообще ни от одного DMA канала прерывание не возникает. Чего то я тут не до понимаю.
Но в I2S адреса нет и ждать кроме как прихода прерываний от каналов DMA не чего. Или я Вас не так понял?
Я так и делаю, но только с NXP беру. И с макетной платой они пришли. |
| Автор: Mazzi 29.10.2010, 17:22 | ||
А вы добавьте таймаут и программа не будет виснуть.
|
| Автор: OlegIT 30.10.2010, 10:11 |
| Вообще-то вопрос не в самом зависании (извиняюсь за не точность формулировки), а в том, почему DMA1 не отвечает. Как я понимаю после инициализации канал DMA должен проинформировать о своём состоянии, а с DMA1 этого не происходит. |