|
Странности таймеров в STR912 |
|
|
|
Jan 18 2010, 16:01
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Наткнулся на одну неприятную особенность таймеров STR912. Таймеры тактируются от PCLK. Частота PCLK 48 МГц. Надо организовать прерывание таймера через 1мкс. Значения регистра совпадения и предделителя рассчитаны правильно, но прерывание возникает с периодом больше чем 1 мкс. В поисках по форуму, наткнулся на пост уважаемого AlexandrY: Цитата Кстати, обнаружил, что програмный такт у STR в 1.4 раза длинее чем у LPC при выполнении из RAM. Т.е. если симулятор для LPC покажет 60 000 000 тактов при выполнении процедуры, а потом измерить это время при выполнении на мекете с частотой ядра 60 Мгц то получим ровно 1 сек. Для STR91 получим 1.4 сек при выполнении из области DTCM RAM, а из области мапированной на AHB RAM еще длинее. Но так как таймеры тактируются от сигнала PCLK да и сказанно там про программный такт, то как по мне частота тикания таймера от сказанного в цитате не зависит. Тогда вопрос, изза чего таймер тикает медленее? Попытка подключить источник тактового сигнала Fmstr вместо PCLK не увенчалась успехом.
Сообщение отредактировал artur_off - Jan 18 2010, 16:04
--------------------
Big time.
|
|
|
|
|
 |
Ответов
|
Feb 12 2010, 18:32
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Цитата(artur_off @ Jan 19 2010, 14:45)  Ради интереса выставил сделал счетчик, который каждую секунду должен зажигать светодиод.
Но период не 1 сек, а примерно 1,3-1,5. Чушь какая-то. Два-три года назад реализовывал проект на STR911, таймера использовал для генерации нескольких частот (использовались аналоговой частью прибора - как сигналы возбуждения, синхронными детекторами и т.п.). Никаких таких проблем не было. Если бы у меня частота отличалась хоть на 1%, просто ничего бы не работало. У STR91 есть особенность работы, поищите в мануале Special interrupt mode control. Я плохо помню подробности, но смысл там в том, что при его использовании при выполнении программы RCLKDIV устанавливается в какое-то значение, а в прерываниях он кажись становится 1. Ну а вся пакость в том, что переключается не только тактовая ядра, но и все частоты, которые получаются из RCLK. Выход - отказаться от использования Special interrupt mode control
|
|
|
|
|
Feb 12 2010, 21:30
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(koyodza @ Feb 12 2010, 20:32)  <br />Чушь какая-то.<br />Два-три года назад реализовывал проект на STR911, таймера использовал для генерации нескольких частот (использовались аналоговой частью прибора - как сигналы возбуждения, синхронными детекторами и т.п.). <b>Никаких</b> таких проблем не было. Если бы у меня частота отличалась хоть на 1%, просто ничего бы не работало.<br /><br />У STR91 есть особенность работы, поищите в мануале Special interrupt mode control. Я плохо помню подробности, но смысл там в том, что при его использовании при выполнении программы RCLKDIV устанавливается в какое-то значение, а в прерываниях он кажись становится 1. Ну а вся пакость в том, что переключается не только тактовая ядра, но и все частоты, которые получаются из RCLK. Выход - отказаться от использования Special interrupt mode control<br /><br /> <br /><br /><br /> Это называется Special Interrupt mode IRQ(есть также для FIQ). Этот режим выключен. Цитата The special interrupt mode using IRQ causes the CPU to operate at full speed (fMSTR as clock frequency) when the IRQ service routine reads the vector address register in the VIC and jumps then to the specified interrupt routine with the speed selected by the RCLKDIV clock divider. Как я понял из перевода и диаграмм тактовых сигналов, если включен этот режим, то CPU тактируется от fMSTR, а обработчик прерывания от RCLK.
--------------------
Big time.
|
|
|
|
|
Feb 16 2010, 07:22
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(artur_off @ Feb 13 2010, 00:30)  Как я понял из перевода и диаграмм тактовых сигналов, если включен этот режим, то CPU тактируется от fMSTR, а обработчик прерывания от RCLK. Кроме того, если бы происходило произвольное изменение PCLKDIV, то изменения частот таймеров и UART были бы в РАЗЫ, а наблюдаются всего проценты. Я тоже грешил на делитель для PCLK, но по здравому размышлению отказался. Больше похоже на PLL. Может ведь так быть, что присваивая настройки PLL для генерации 96МГц, на самом деле эта PLL генерит на несколько процентов меньше? Проверить это можно только частотомером с выхода, например, таймеров. Других способов я не вижу.
|
|
|
|
|
Feb 17 2010, 16:29
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Цитата(Aprox @ Feb 16 2010, 09:22)  Кроме того, если бы происходило произвольное изменение PCLKDIV, то изменения частот таймеров и UART были бы в РАЗЫ, а наблюдаются всего проценты Ваше предположение не вполне верно. Дело в том, что частота в "нормальном" режиме и в "обработчике прерывания" разная, она и правда меняется в разы. Но частота ведь всё время меняется, и на выходе таймера вы видите уже проинтегрированное значение. К слову, не PCLKDIV, а RCLKDIV  ------------ Хм, посмотрел на блок-схему, освежил в памяти... Чего-то оно не очень освежилось... Всё равно проверьте ещё раз насчёт настроек RCLKDIV и Special Interrupt Mode, если меня не подводит память - там какая-то засада была именно с таймерами, из-за чего я сразу отказался от использования этого режима
|
|
|
|
|
Feb 17 2010, 18:10
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(koyodza @ Feb 17 2010, 18:29)  Ваше предположение не вполне верно. Дело в том, что частота в "нормальном" режиме и в "обработчике прерывания" разная, она и правда меняется в разы. Но частота ведь всё время меняется, и на выходе таймера вы видите уже проинтегрированное значение. К слову, не PCLKDIV, а RCLKDIV ------------ Хм, посмотрел на блок-схему, освежил в памяти... Чего-то оно не очень освежилось... Всё равно проверьте ещё раз насчёт настроек RCLKDIV и Special Interrupt Mode, если меня не подводит память - там какая-то засада была именно с таймерами, из-за чего я сразу отказался от использования этого режима Да вроде как наладилось. Отказался от библиотек ST. Измерил частоту ШИМ с помощью осца. Отклонение рассчитанных значений и измеренных составило меньше одного процента и если учитывать, что частота определялась на глаз и осц довольно древний, то с уверенностью можно сказать, что после отказа от библиотек ST таймеры затикали нормально. За Special Interrupt mode спасибо. Буду иметь ввиду  .
Сообщение отредактировал artur_off - Feb 17 2010, 18:28
--------------------
Big time.
|
|
|
|
|
Feb 18 2010, 14:53
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Цитата(artur_off @ Feb 17 2010, 20:10)  Да вроде как наладилось. Отказался от библиотек ST. Вот так и рождаются нездоровые сенсации... А разобраться в чём дело значит не захотели. Библиотеки-то со всеми исходниками, можно ведь посмотреть и определить, кто и где был неправ
|
|
|
|
|
Feb 18 2010, 16:20
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(koyodza @ Feb 18 2010, 16:53)  Вот так и рождаются нездоровые сенсации... А разобраться в чём дело значит не захотели. Библиотеки-то со всеми исходниками, можно ведь посмотреть и определить, кто и где был неправ К сожалению нету времени в них копаться. Может как нибудь на досуге. Один из примеров. Как только начинал с ним работать, не хотели прерывания генерироваться. Поднял на форуме тему, в одном из сообщений подсказали попробовать объявить обработчик прерывания таким образом __irq void ........ (void) (в библиотеках ST почему-то это дело написано без __irq).
Сообщение отредактировал artur_off - Feb 18 2010, 16:25
--------------------
Big time.
|
|
|
|
Сообщений в этой теме
artur_off Странности таймеров в STR912 Jan 18 2010, 16:01 scifi Я бы всё-таки ещё раз проверил, что регистры иници... Jan 19 2010, 06:33    artur_off Цитата(Aprox @ Feb 16 2010, 09:22) Кроме ... Feb 16 2010, 08:40       Aprox Цитата(koyodza @ Feb 18 2010, 17:53) Вот ... Feb 20 2010, 13:30 artur_off Решил не создавать еще одну тему, так как вопрос к... Feb 9 2010, 12:59 Warlockwolf Цитата(artur_off @ Feb 9 2010, 15:59) У к... Feb 9 2010, 18:06 artur_off В Reference manual, на странице 49 есть картинка с... Feb 9 2010, 18:25 Warlockwolf http://www.st.com/mcu/devicedocs-STR912FAW44-101.h... Feb 9 2010, 18:50 artur_off Опа. Походу у меня референс мануал старый.
Внизу с... Feb 9 2010, 18:56 artur_off Думаю, что эту тему надо перенести в раздел для на... Feb 10 2010, 18:59 Aprox Цитата(artur_off @ Feb 10 2010, 21:59) Ду... Feb 11 2010, 07:53  artur_off Цитата(Aprox @ Feb 11 2010, 09:53) Не спе... Feb 20 2010, 15:32   koyodza Как обычно всё смешалось в одну кучу:
Цитата(artur... Feb 24 2010, 19:37    Aprox Цитата(koyodza @ Feb 24 2010, 22:37) ....... Feb 25 2010, 20:52     artur_off Цитата(Aprox @ Feb 25 2010, 22:52) У меня... Feb 26 2010, 06:19      Aprox Цитата(artur_off @ Feb 26 2010, 09:19) По... Feb 27 2010, 07:57       artur_off Цитата(Aprox @ Feb 27 2010, 09:57) Завыш... Feb 27 2010, 13:20        Aprox Цитата(artur_off @ Feb 27 2010, 16:20) Ну... Feb 27 2010, 15:32         artur_off Цитата(Aprox @ Feb 27 2010, 17:32) Ловит... Feb 27 2010, 16:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|