26.11.2010, 17:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
EugenyAM
У Вас ошибки в статьях.
Например:
Код:
|
CLK_SWCR_bit.SWEN=1; // Автопереключение источника Clock при неисправности HSE (SWEN). |
Этот бит всего лишь запускает переключение клока. Реакция на неисправность такта задается в регистре CLK_CSSR.
Ну и такая конструкция как обычно при включенной оптимизации будет работать не так как ожидается:
Код:
|
long i;
while(1)
{
PD_ODR_bit.ODR0=~PD_ODR_bit.ODR0; //Переключим светодиод
for(i=0;i‹200000;i++); //Подождем...
} |
Оптимизатор выбросит и переменную i и цикл. Вы забыли volatile добавить. Из за таких мелочей начинающий может на несколько дней застрять
Последний раз редактировалось kison; 26.11.2010 в 17:41.
|
|
|
|
26.11.2010, 17:59
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Оптимизатор выбросит и переменную i и цикл. Вы забыли volatile добавить. Из за таких мелочей начинающий может на несколько дней застрять
|
По дефолту оптимизация во всех компиляторах отключена, если не ошибаюсь. И думаю что очень многие её никогда и не включают чтобы не нарваться на подобные сюрпризы.
Когда начинающий захочет ею воспользоваться это будет уже не начинающий, во всяком случае, он предварительно поинтересуется какой код имеет большие шансы на вылет и что такое volatile. Хотя подправить конечно не проблема…
|
|
|
|
26.11.2010, 18:00
|
|
Гражданин KAZUS.RU
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugenyAM
|
Через недельку будет реализация DMX512 на нем.
|
Очень интересно будет посмотреть.
|
|
|
|
26.11.2010, 18:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugVor
|
По дефолту оптимизация во всех компиляторах отключена, если не ошибаюсь.
|
В STVD отключена в конфигурации DEBUG и включена в RELEASE. У меня уже включена в обоих ![Улыбка](images/smilies/icon_smile.gif) Вообще ее смысла отключать нет. Если нужно контроллировать какие то переменные, которые оптимизатор зачищает, можно им квалификатор volatile добавить, а после отладки убрать.
|
|
|
|
26.11.2010, 20:00
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
У Вас ошибки в статьях.
Например:
Код:
CLK_SWCR_bit.SWEN=1; // Автопереключение источника Clock при неисправности HSE (SWEN).
Этот бит всего лишь запускает переключение клока. Реакция на неисправность такта задается в регистре CLK_CSSR.
|
т.е. нужно добавить
Код:
|
CLK_CSSR_bit.CSSEN=1 |
так?
|
|
|
|
26.11.2010, 20:19
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Оптимизатор выбросит и переменную i и цикл. Вы забыли volatile добавить. Из за таких мелочей начинающий может на несколько дней застрять
|
В IAR эффект наблюдается, только если включить уровень оптимизации High.
по умолчанию такое стоит в Release.
Исправим...
|
|
|
|
26.11.2010, 20:54
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от faru
|
В принципе - интересно, если бы по каждому устройству переферии - прожевывался все подразделы по 00016 мануалу целиком, а не выборочно выдранные пункты.
|
Если кто-то захочет посодействовать с превеликим удовольствием разместим Ваш материал или замечания-исправления.
|
|
|
|
26.11.2010, 21:08
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Правильная инициализация CLK с автопереключением
Код:
|
CLK_ECKR_bit.HSEEN=1; //Разрешаем работу генератора с внешним кварцем (HSEEN)
CLK_SWCR_bit.SWEN=1; //Разрешаем переключение генераторов;
CLK_SWR=0xB4; //Выбираем clock от кварцевого генератора (HSE)
CLK_CKDIVR=0; //Делители частоты внутреннего и внешнего генератора на 1 - частота ядра максимальная
while(CLK_CMSR!=0xB4); //Ждем стабилизации частоты
CLK_CSSR_bit.CSSEN=1; //Разрешаем автопереключение источника Clock на внутренний при неисправности генератора
|
|
|
|
|
26.11.2010, 22:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugenyAM
|
Правильная инициализация CLK с автопереключением
|
Какие то у Вас странные конструкции. Если хотите именно вручную переключать такт, то запускаете нужный генератор, например HSE. Далее ЖДЕТЕ пока он запустится - установится бит HSERDY в регистре ECKR. И только потом переключаете клок.
Для включения автоподмены клока при отказе основного действительно достаточно установить CSSEN в CSSR, но смысла в этом нет. Нужно как минимум еще прерывание разрешить, ведь замена к примеру 16МГц внешнего такта на 2МГц внутренний скорее всего не улучшит функционирование. ![Улыбка](images/smilies/icon_smile.gif) Это аварийный режим, а не рабочий.
Сообщение от faru
|
И на том рисунке не пояснено - к каким пинам чипа ноги эненкодера цеплять и как ..
|
Цеплять паяльником ![Улыбка](images/smilies/icon_smile.gif) , ноги на рисунке нарисованы. Линия от TIM1_CH1 называется TI1, TIM1_CH2 - TI2.
Сообщение от faru
|
туплю может, но вроде речь идет о механическом девайсе а не о виртуальной штукенции.
|
О механическом конечно. У инкрементального энкодера два выхода - А и В. Вот их и надо подключать к TI1 и TI2.
|
|
|
|
26.11.2010, 22:54
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Какие то у Вас странные конструкции. Если хотите именно вручную переключать такт, то запускаете нужный генератор, например HSE. Далее ЖДЕТЕ пока он запустится - установится бит HSERDY в регистре ECKR. И только потом переключаете клок.
|
мануал, п 8.2.2, пункт Automatic switching
Разрешаем работу генератора HSEEN=1
Разрешаем механизм переключения SWEN=1
Записываем код источника в CLK_SWR=0xB4
ждем результат
Цитата:
|
Нужно как минимум еще прерывание разрешить, ведь замена к примеру 16МГц внешнего такта на 2МГц внутренний скорее всего не улучшит функционирование. Это аварийный режим, а не рабочий.
|
Естественно, аварийный режим... Например если не ждать готовности основного генератора, а сразу разрешить CSSEN, мы получим автоматическое переключение на резервный генератор, что будет заметно по уменьшению частоты мигания светодиода в 8 раз.
Проверено чисто в учебных целях, чтобы на это не попадаться.
Естественно, в реальном проекте надо разрешать прерывание и обрабатывать данную ситуацию.
Если последнюю строчку закомментировать, на работе примеров это не отразится.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:55.
|
|