|
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
|
||||||
Запуск кварцевого (ВЧ) генератора в MSP430 (решено)24.10.2013, 01:38. Показов 9060. Ответов 8
Метки нет (Все метки)
Осваиваю систему тактирования МСП430, а именно - семейство MSP430FR57xx. Так как в МСП430 все вновье, то нипанятки не знаю куда относить. Потому и спрашиваю.
Итак, у меня генератор ХТ1 работает с кварцем 7,3728 МГц. В данном семействе специального ВЧ генератора ХТ2 нет, поэтому один и тот же ХТ1 используется и с часовыми кварцами, и с высокочастотными. Для конфигурирования железа придумали бит ХТ1 в регистре CSCTL4. И вот не запускается у меня кварцевый генератор. Вот код:
Итак, сначала настраиваю выводы порта PJ на работу с кварцем. Потом разблокирую доступ к регистрам системы тактирования, даю максимум мощности ХТ1-генератору (на время запуска), ставлю флаг высокочастотной работы XTS, снимаю флаг XT1BYPASS и (тут отступил от библиотеки) - флаг XT1OFF. Теперь, ИМХО, генератор начнет раскручиваться. В цикле while ожидается, когда он перестанет поднимать флаг ошибки. Если это произойдет раньше 1000000 проходов в цикле while, то все чики-пики. Но у меня всегда истекает таймаут. Ну, дальше там по программе объявление ХТ1 источником сигнала для MCLK и SMCLK, а потом я наблюдаю значение переменной success_clock. Она и показывает, что кварц не стартанул (впрочем, осцилл поддерживает это мнение). В чем я нахомутал? Примеры в даташитах как-то мало имеют дела со внешними кварцами. Стандартные функции от dryverlib не работают так же. Кварц менял. Ну, могу дальше рыться, но вдруг я чего-то крупно не понимаю - прошу помощи. ДОБАВЛЕНО: Итак, в чем была ошибка: в конфигурировании портов PJ.4 и PJ.5. Я ставил GPIO_SECONDARY_MODULE_FUNCTION - а нужно GPIO_PRIMARY_MODULE_FUNCTION.
0
|
||||||
| 24.10.2013, 01:38 | |
|
Ответы с готовыми решениями:
8
Моделирование кварцевого генератора.
Расчет кварцевого генератора на ТТЛ |
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
| 24.10.2013, 02:18 | |
|
подозреваю что CSKEY равен 0xA5, а не 0xA500.
соответственно CSCTL0_H = 0xA5; младшие разряды помечены как reserved и read only, лучше в них ничего не писать. если не поможет: руками записать PJSEL раз уж всё остальное напрямую делается попробовать XT1DRIVE занулить, хотя осциллографом хоть что-нибудь было бы видно, если бы из-за этого. ну и совсем невероятное: timeout не 16ти разрядный случайно и делать какие-либо действия в сложных условиях нехорошо, while ((CSCTL5 & XT1OFFG) && --timeout) компилятор может оказаться слишком умным и по совпадению с первым условием на второе забить совсем, зачем проверять если и так понятно какой результат будет, соответственно декремент --timeout может быть пропущен, в данном случае не принципиально, так как если CSCTL5 & XT1OFFG окажется нулём то из цикла всё равно вывалимся, не особо важно, уменьшая лишний раз timeout или нет, но в другой ситуации грабли могут получиться знатные.
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 300
|
||
| 24.10.2013, 02:41 | ||
|
Если с железом проблем нет (кварц и конденсаторы исправные).
То вот это можно проверить: в FR57xx серии флаги ошибок осциляторов нужно очищать в софте до использования.
0
|
||
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
| 24.10.2013, 02:49 | |
|
так он и так в цикле очищается.
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 300
|
||
| 24.10.2013, 03:03 | ||
0
|
||
|
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
|
||
| 24.10.2013, 11:41 | ||
|
Спасибо, коллеги, что откликнулись!
Ладно, не буду посыпать свою бедную голову дерьмом, у нас на форуме достаточно таких, кто с удовольствием сделают это за меня. "К тому же у них разделенье труда..." :) Чуток разобрался. Есть результат, есть новый вопрос. Итак, в чем была ошибка: в конфигурировании портов PJ.4 и PJ.5. Кстати, эту ошибку в приведенном коде видно :) Там я ставлю GPIO_SECONDARY_MODULE_FUNCTION - а нужно GPIO_PRIMARY_MODULE_FUNCTION. Вот и весь хер до копейки! Генератор заработал. ЩАС еще поиграюсь, посмотрю, что там можно, что нельзя - в смысле последовательности действий по конфигурированию. Чтобы уже разобраться с вопросом раз и навсегда. Потом забуду, спрошу на форуме, а мой Брат shads даст ссылку на мой же постинг - вот и вспомню :) Так что вот результат - сабж решен. Но вот и обещаный вопрос. Он касается даташитов. Похоже, что мой вход в тему МСП430 сразу с семейства FR57xx не типичен, разработчики документации пишут даташиты на это семейство с учетом того, что чайник уже научился чего-нить на предыдущих семействах :) К сожалению, я пока не нашел адекватного описания альтернативных функций портов. Какие источники: 1) Распиновка Интересно, как мне трактовать эти блядские 5 строчек против каждого пина? Кроме Kimeral Purpose там еще 4, а все даташиты вообще говорят о ТРЕХ возможных альтренативных функциях. Ну вот, методом теперь уже тупого тыка (а какой еще может быть тык?) я вычислил, что вывод в порты сигналов внутренних генераторов представляет... барабанная дробь... GPIO_PRIMARY_MODULE_FUNCTION. Во как интересно. В приведенных рисунках-таблицах этого никак не видно. Так что вопрос: мож где-то раньше TI написали, как выбирать нужный номер альтернативной функции - то ткните в ссылку, плз. Я и так медленно въезжаю, а тут еще эксперименты вокруг даташитов танцевать...
0
|
||
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
| 24.10.2013, 12:20 | |
|
в самом конце даташита есть схемы каждого пина, и для каждого пина там есть нормальная табличка значений PSEL
0
|
|
|
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
|
||||||
| 24.10.2013, 13:06 | ||||||
|
Ага! Вот откуда "лишие" строки! Если пин на вход или на выход - то можно его в двух разных альтернативных функциях заюзать с одинаковым кодом этой самой альтернативной функции! Ну, слава Богу! Разобрался. Спасибо!
ОК, идем дальше. Уже не сабж, но небольшой вопрос, не буду плодить темы. Посмотрел я на эти dryverlib, которые то хочу, то не хочу использовать. Вот сейчас уже снова не хочу: Ладно, стиль записи громоздкий, эти офигенные имена а-ля немецкие слова. Можно привыкнуть. Ладно, "спрятанность" того, что реально там делается. Можно посмотреть (прямо в Студии, что удобно), когда уже логику понял, то довольно быстро становится понятно, какие там телодвижения возникают Ладно, что в разных версиях библиотек даже дефайны разные. Я наткнулся на такое, когда Грейс породил некий пример, я его заюзал, а потом долго правил такие, скажем, различия, как TimerA_.... и Timer_A_.... (аналогично и в настройках УАРТ-а имена разные). Ладно, что скорострельность уж ОЧЕНЬ падает: смотрим пример цикла с генерацией на 2-х портах меиндров:
Ладно... Все это можно простить, если ориентироваться на переносимость проекта. И то, с учетом нипаняток по поводу разных версий самой drvlib, может не быть уж так все автоматически. Но если я собираюсь данный проект заюзать на одном камешке, если настройки под камень составляют небольшую сложность, если переход на другой вызывается необходимостью много чего переосмыслит-переделать, то "почти автоматическое" портирование - вещь призрачная. Вот и думаю, может все же работать с периферией старым дедовским способом? Какие у колег, работающих с МСП430, есть соображения?
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 300
|
||
| 24.10.2013, 13:24 | ||
Под 1-2 камня всегда можно свои define настрочить и использовать. Плюс библиотек - если изделий много и софта сложного много, а компании нужно экономить на разработчиках, которые десятилетиями это софт поддерживают. Тогда забиваем на эффективность и качество (за счет клиента само собой) и облегчаем себе жизнь библиотеками.
0
|
||
| 24.10.2013, 13:24 | |
|
Помогаю со студенческими работами здесь
9
Питание для кварцевого генератора Форма сигнала кварцевого генератора Правильное подключение кварцевого генератора
(Решено) Запуск внешней программы из своей под OS X Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|