реклама на сайте
подробности

 
 
> STM32F103T8, не получается DMA-прерывание
AndreyKeil
сообщение Sep 30 2010, 13:30
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Прошу помощи. 1111493779.gif
Не возникает прерывание от DMA- первого канала. Настраиваю АЦП:
Цитата
RCC->CFGR&= ~0x000C000; //(предделитель PLCK2 АЦП = 2)
RCC->CFGR|= 0x0008000; //предделитель PLCK2 АЦП = 6
GPIOA->CRL&= ~(0x00000033|//PA0,PA1 как входы
0x000000CC);//PA0,PA1 как аналоговые входы
RCC->APB2ENR|= (0x0001| //разреш альтернативных функций
0x0200);//ADC1EN-разреш.тактирования АЦП
ADC1_SQR1=0x00100000; //длина-две последовательности каналов(0-одна)
ADC1_SQR2= 0x0000;
ADC1_SQR3=
00<<(0*5)| //выбор нулевого канала для преобразования
01<<(1*5)| //выбор первого канала для преобразования
00<<(2*5)| //второй канал не занят
00<<(3*5); //третий канал не занят
ADC1_SMPR2= (0x00000006| //0-канал,время преобраз 71.5циклов
0x00000030);//1-канал,время преобраз 71.5циклов
ADC1_CR1= (0x000100| //SCAN-сканирование каналов
0x000000); //
//0x000020); //EOCIE-прерывание от АЦП разрешено
ADC1_CR2= (0x00100000| //запуск внешним событием рег.каналов
0x000E0000| //SWSTART- программный запуск преобразования
0x00000100| //DMA-вкл.
0x00000001);//ADON-разреш. АЦП

ADC1_CR2|= 0x00400000;//старт преобразования

Затем настраиваю DMA:
Цитата
RCC->AHBENR|= 0x00000001;//разреш.клока DMA1
DMA_CNDTR1= c_InxAdc; //кол-во передаваемых данных
DMA_CPAR1= 0x4001244C; //адрес периферийный &ADC1_DR
DMA_CMAR1= BufAdc; //адрес памяти
DMA_CCR1=0 << 14| //передача память-память
01 << 12| //приоритет-MEDIUM
02 << 10| //1-разрядность памяти 16 бит (2-32 бит)
02 << 8| //1-разрядность периферии 16 бит (2-32 бит)
1 << 7| //инкремент адреса памяти
0 << 6| //инкремент адреса периферии
1 << 5| //циклический режим (по кругу)
0 << 4| //0-чтение с периферии в память(1-наоборот)
1 << 3| //TEIE-прерывание по ошибке передачи
1 << 2| //HTIE-прерывание по половине передачи
1 << 1| //TCIE-прерывание по завершению передачи
1 << 0; //EN-разрешение канала

После запуска проги вижу, что АЦП работает, передаёт данные двух каналов АЦП в DMA, DMA передает данные в озу (массив BufAdc[2]), но прерывание от DMA при этом не возникает. Что я делаю не так?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 03:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.02313 секунд с 7
ELECTRONIX ©2004-2016