07.08.2011, 21:00
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tanq
|
Предполагается, что
|
... если всё сделано правильно, то всё работает как хотелось... и ещё остаются свободные ресурсы...
Изначально вопрос был...
Сообщение от dosikus
|
Насколько целесообразно впихивать столько в прерывание ?
|
А где и что, и как делать... это уже по задаче... по конкретной задаче...
|
|
|
|
07.08.2011, 21:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tanq
|
При этом более приоритетное прерывание будет начинать обрабатываться СРАЗУ, не дожидаясь окончания менее приоритетного.
|
Сомневаюсь, что индикация является приоритетной задачей. За исключением, пожалуй, индикации ради индикации.
Код:
|
ADC1-›SR&=~(1‹‹ADC_SR_EOC); |
Мож так попробовать?
Последний раз редактировалось omercury; 07.08.2011 в 22:12.
|
|
|
|
08.08.2011, 00:33
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от omercury
|
Сомневаюсь, что индикация является приоритетной задачей. За исключением, пожалуй, индикации ради индикации.
|
Конкретно индикация - не является. Обсуждение было для более общего случая. Индикация - это, пожалуй, единственное что я выношу за пределы прерываний.
Сообщение от omercury
|
Мож так попробовать? ADC1-›SR&=~(1‹‹ADC_SR_EOC);
|
Операция сдвига - лишняя, а тк идея здравая весьма.
|
|
|
|
08.08.2011, 15:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Код:
|
ADC1-›SR&=~(1‹‹ADC_SR_EOC); |
Цитата:
|
Операция сдвига - лишняя, а тк идея здравая весьма.
|
Всё зависит от того, как описаны биты в includ-ах. Обычно как номер бита. В этом случае сдвиг необходим.
|
|
|
|
09.08.2011, 07:55
|
|
Частый гость
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Вот как задефайнен, поэтому не вижу зачем сдвиг.
Цитата:
|
#define ADC_SR_EOC ((uint8_t)0x02)
|
Поставил
Цитата:
|
ADC1-›CR1 |= ADC_CR1_SCAN; // Режим сканирования
|
Заработало- спасибо, tanq.
Однако, в отладчике я вижу , что порядок чтения каналов - как будто хаотичен. То есть написав так:
Цитата:
|
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-е преобр
|
Я ожидал увидеть значение ацп сначала 14 , а потом 15 канала и так они должны чередоваться дальше- тогда можно будет сделать обработку значения ацп просто по номеру отсчета. Однако , вопреки всему в отладчике на появилось сначала значение 15 канала , потом опять 15 , потом 14 три раза и далее считывание происходило как будто случайно.
Что я делаю не так?
А еще мне не нравится
Цитата:
|
ADC1-›CR2 |= ADC_CR2_CONT; // Режим непрерывных преобразований
|
Ибо в нем постоянно происходит обработка значения АЦП , а не по событию ( или я не понял как это совместить), однако без этого режима не работает. С выключенным сканом на ацп значения 14 канала , а со включенным сканом с 15( почему так я не понял, но думаю , что преобразование как-то происходит за один раз и новое значение затаптывает старое. Или нет?).
Итого:
1) Как понять какой канал сейчас у тебя в DR?
2) Как обрабатывать несколько каналов по событию?
Последний раз редактировалось ^smbd^; 09.08.2011 в 08:08.
|
|
|
|
09.08.2011, 12:25
|
|
Частый гость
Регистрация: 16.01.2010
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Настроил таймер и порт с помощью STM32_Init.c все норм 0 Error(s), 0 Warning(s). Отлаживаю в Кеилле тоже все работает, но когда загружаю на дискавери выдает error while attempting to read 312 bytes from 0x10000000 нажимаю ок, отлажую, но виснет после stm32_Init (); ((((
#include "STM32_Init.h"
#include ‹stm32f10x.h›
int a=0;
void TIM1_UP_IRQHandler (void)
{
if ((TIM1-›SR & 0x0001) != 0)
{
if (a==0)
{
GPIOC-›BSRR=GPIO_BSRR_BS8;
a=1;
}
else
{
GPIOC-›BSRR=GPIO_BSRR_BR8;
a=0;
}
TIM1-›SR &= ~(1‹‹0);
}
}
int main (void)
{
stm32_Init ();
while (1)
{
}
}
|
|
|
|
09.08.2011, 13:03
|
|
Частый гость
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
ROM начало и объем прописаны?
|
|
|
|
09.08.2011, 14:00
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ^smbd^
|
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-е преобр
|
Я не понял этот код. Во-первых, не прописано общее число каналов в цепочке. Во-вторых, начало последоватеьности каналов лежит в регистре SQR1, а в SQR3 лежит окончание.
Флаг CONT отвечает за то, что АЦП после наступления события будет молотить без остановки.
|
|
|
|
09.08.2011, 14:16
|
|
Прохожий
Регистрация: 03.08.2011
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Доброго времени суток! появилась проблема, мож кто сталкивался...
Во время обработки прерывания от таймера в переменную сохраняется значение регистра, примерно так:
void TIM3_IRQHandler(void)
{
Flag_Front=1; //флаг для дальнейшей обработки
Time_Front=TIM3-›CCR2; // та переменная о которой идет речь
TIM_ITConfig(TIM3, TIM_IT_CC1, DISABLE);
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
}
эта переменная больше нигде не используется, кроме как проверяется на содержимое, примерно так:
if(Time_Front == 0x0D)
{
GPIOB-›BRR = GPIO_BRR_BR10; //зажигаем светодиод
}
НО ЧТО В НЕЙ ТОКА НЕ БЫВАЕТ))) хотя регистр TIM3-›CCR2 всегда равен 0х0D, смотрел по остановке в отладчике.
пытался написать так:
if(TIM3-›CCR2== 0x0D)
{
GPIOB-›BRR = GPIO_BRR_BR10; //зажигаем светодиод
}
опять же ставишь точку остановки на else этого if смотришь регистр он равен 0x0D, спрашивается кокого лешего он защел в else.
ЧТО ЭТО чудеса компиляции ???
PS: пишу в JAR, отладчик JAR.
|
|
|
|
09.08.2011, 14:26
|
|
Частый гость
Регистрация: 16.01.2010
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ^smbd^
|
ROM начало и объем прописаны?
|
да, виснет STM32_Init.c на
if (__RCC_CR_VAL & RCC_CR_HSEON) { // if HSE enabled
while ((RCC-›CR & RCC_CR_HSERDY) == 0); // Wait for HSERDY = 1 (HSE is ready)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:14.
|
|