04.08.2011, 10:27
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Tiomich
|
Значит нужно ждать, когда станут ширпотребовскими процы с сопроцессором.
|
Cortex M4 выполняет кое какие операции с плавучкой, и в то же время позиционируется как ширпотребовский кристалл.
Уже выпускается NXP и вроде как ST тоже анонсировал ... скоро надо полагать появятся ...
|
|
|
|
04.08.2011, 16:06
|
|
Временная регистрация
Регистрация: 05.03.2011
Сообщений: 67
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подскажите, ктонибудь подключал OpenJTAG программатор (его китайцы продают) к Кейлу? И где бы прочитать описание на русском по программе eclipse для win32?
|
|
|
|
05.08.2011, 12:47
|
|
Частый гость
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Ребят, как обрабатывать несколько каналов ацп?
Вот как инициализирую АЦП:
Цитата:
|
void ADC_init(void) // Инициализация ацп
{
RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN; // подаем такты на АЦП
ADC1-›CR2 |= ADC_CR2_ADON; // подаем питание на АЦП
ADC1-›SQR1|= ADC_SQR1_L_0; // Выставили колличество преобразований равным 2
ADC1-›CR2 &= ~ADC_CR2_EXTSEL; // Обнулили ( Timer CC1 event)
ADC1-›CR2 |= ADC_CR2_EXTSEL_2; // Запуск по TRGO Timer 3
ADC1-›CR2 |= ADC_CR2_CONT; // Режим непрерывных преобразований
ADC1-›CR2 |= ADC_CR2_EXTTRIG; // включаем запуск от внешнего события
ADC1-›SQR3 |= ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_3;//На 14 канал 1-е преобр
ADC1-›SQR3 |=ADC_SQR3_SQ2_0| ADC_SQR3_SQ2_1 | ADC_SQR3_SQ2_2|ADC_SQR3_SQ2_3; //На 15 канал 2-е преобр
ADC1-›CR1 |= ADC_CR1_EOCIE; // вкл. прерывания
NVIC_SetPriority(ADC1_IRQn, 10);
}
|
Далее в прерывании считываю значение
Цитата:
|
void ADC1_IRQHandler(void)
{
ADC=ADC1-›DR; //считали в переменную
/*Написали на монитор*/
lcd_clear();
set_cursor(0,0);
lcd_print ("ADC:");
set_cursor(0,1);
lcd_print(itoa(ADC,10));
ADC1-›SR&=~ADC_SR_EOC; /*Пытаюсь программно обнулить EOC( написано в референсе вроде как). Это почему-то не работает - значение ADC1-›SR остается неизменным со стоящим EOC */
}
|
Значение оказывается с первого преобразования и похоже происходит постоянное считывание его.
Вот , что говорит нам референс:
Последний раз редактировалось ^smbd^; 05.08.2011 в 13:11.
|
|
|
|
07.08.2011, 12:15
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ^smbd^
|
как обрабатывать несколько каналов ацп?
|
Флаг SCAN надо добавить
|
|
|
|
07.08.2011, 12:49
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ^smbd^
|
Далее в прерывании считываю значение
Цитата:
void ADC1_IRQHandler(void)
{
ADC=ADC1-›DR; //считали в переменную
/*Написали на монитор*/
lcd_clear();
set_cursor(0,0);
lcd_print ("ADC:");
set_cursor(0,1);
lcd_print(itoa(ADC,10));
ADC1-›SR&=~ADC_SR_EOC; /*Пытаюсь программно обнулить EOC( написано в референсе вроде как). Это почему-то не работает - значение ADC1-›SR остается неизменным со стоящим EOC */
}
|
Насколько целесообразно впихивать столько в прерывание ?
Всегда старались обработчик сделать как можно меньше, выставить флаг и вернуться .
Или нет ? ( © Bill)
__________________
Осторожно , злой кот
|
|
|
|
07.08.2011, 14:00
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dosikus
|
Всегда старались обработчик сделать как можно меньше, выставить флаг и вернуться .
|
А зачем? Постоянная проверка флага - это лишний overhead и к тому же не позволяет вытеснять низкий приоритет более высоким. Если хочется иметь возможность не блокировать другие прерывания - на ARM это и так есть, а на всякой мелочи типа AVR можно было флаг прерывания сразу сбросить, чтоб могли вызыываться следующие прерывания.
Вывод на экран из обработчика действтилеьно лучше бы убрать, т.к. это по сути фоновая задача и они может занять больше времени, чем период между прерываниями.
|
|
|
|
07.08.2011, 14:15
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tanq
|
Постоянная проверка флага - это лишний overhead и к тому же не позволяет вытеснять низкий приоритет более высоким.
|
А каким боком проверка флага относится к прерыванию с более высоким приоритетом???
|
|
|
|
07.08.2011, 15:13
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от st_1
|
А каким боком проверка флага относится к прерыванию с более высоким приоритетом???
|
К примеру имеется 5 прерываний, кторые надо обрабатывать с учетом их приоритета. Как это можно сделать, если в обработчике прерывания делается только установка флага, а сами вычислния происходят в основой программе?
|
|
|
|
07.08.2011, 15:28
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
А что... на основную программу времени совсем нет???
|
|
|
|
07.08.2011, 20:52
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Предполагается, что время есть. Но тем не менее, желаемое сдлеать не получится, потому что метод с проверкой флагов работает довольно тупо: проверяются флаги -› выполняется необходимое действие. Сооответствено, следующее действие будет выполняться после окончания предыдущего. Если же не умничать и события обрабатывать в самих обработчиках прерываний, то получается нормальная вытесняющая многозадачность, что и нужно. При этом более приоритетное прерывание будет начинать обрабатываться СРАЗУ, не дожидаясь окончания менее приоритетного.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:17.
|
|