MSP430 - учебный курс. Часть 4 - генератор констант и система тактирования.

План.
1. Генератор констант.
2. Система тактирования.
До понедельника, надеюсь, потестирую свой новый контроллер и перейдём к свежим сериям MSP430. Уних есть некоторые преимущества, но в целом архитектура одинакова с сотой серией.
Для начала несколько замечаний по предыдущему материалу.
Замечание 1. По режимам адресации.
Т.к. регистры ядра не имеют физического адреса, выражаемого числом, то к ним неприменимы следующие режимы адресации:
- символьный;
- абсолютный;
- непосредственный.
В словном режиме недопустимо обращение по нечётным адресам памяти!
При обмене «регистр -> память»:
- при словном режиме младшая часть регистра помещается по меньшему (чётному) адресу, старшая по следующему (+1).
- при байтном режиме по адресу обращения помещается младшая часть, старшая игнорируется.
При обмене «память -> регистр»:
- при словном режиме в младшую часть регистра помещается значение из меньшего (чётного) адреса, в старшую из следующего (+1).
- при байтном режиме в младшую часть регистра помещается значение из ячейки по адресу обращения, в старшую заносится 0.
Инкремент счетчика команд (только на число, кратное 2!) происходит в момент предшествующий дешифрации команды, после выборки. Это значит, что на момент исполнения команды, счётчик команд указывает на следующую команду. Т.е. код:
mov PC, R4
даст нам в R4 указатель не на эту команду, а на следующую (в данном случае +2).
А теперь приступим к сегодняшнему уроку.
1. Генератор констант.
Самый непонятный и пугающий зверь — фирменная фишка TI (по крайней мере, я нигде подобного не встречал).
Когда столкнулся с этим впервые то ничего не понял. Понял только одно — что-то хитрое с регистром R3. Вроде он есть, но пользоваться им нельзя. В документации — дремучий лес. Настойчивые расспросы старших товарищей привели к мысли, что есть средство генерирующее какие-то числа аппаратно. «Зачем?» — подумал я, — «Прописал константу в коде команды и всё ок!»
«Зачем?» — сказали товарищи, — «Прописал константу в коде команды и всё ок, будет тебе оптимизация, не парься!»
Но я не понимал в чём соль. Пытливый ум продолжил ковырять документацию и чудесное откровение снизошло сверху (из глубин подсознания).
В общем, ларчик просто открывался. Есть регистр R3 (также частично задействован и R2), который используется особым образом.
Суть в том, что в повседневной деятельности программист часто использует константы 0, +-1, 2, 4, 8. Обычно их помещают в код команды, что приводит к разрастанию объема команды и увеличению времени выполнения, т.к. оно требуется на выборку из памяти дополнительного аргумента. Все помнят, что в x86 команду "mov AX, 0" старались замещать аналогичной по результату "xor AX, AX". Так же и здесь, но TI пошел ещё дальше.
Предположим, нам нужно поместить 1 в регистр. Что делать? "mov #1, R"? Без генератора констант команда в коде и её исполнение выглядело бы так:
- выбрать команду из памяти и дешифровать;
- т.к. команда с аргументом, то выбрать аргумент и поместить его в регистр.
Но товарищи техасцы, как известно, люди суровые. Они предложили отдать на откуп один регистр (а вы часто используете более 8 штук?) для оптимизации и сказали: «Пусть при обращении к этому регистру будет автоматически появляться какое-то число». Таким образом цепочка сократилась до:
- выбрать команду из памяти, дешифровать и поместить константу в регистр.
Т.к. мы можем использовать 4 способа адресации к регистру, то получаем 4 разных числа. Вы спросите, где ещё две константы? Вспомним о регистре R2 aka SR. Как мы можем его использовать? Считать флаги, да установить флаги. Т.е., только в регистровом режиме. В самом деле, не имеют смысла адреса по значению флагов. Таким образом у нас есть ещё три режима, свободных для данного регистра. Но, по какой-то прихоти, ковбои запретили индекный режим для R2, поэтому остались только косвенные. Вот вам и ещё 2 числа.
Итого имеем: для получения константы без использования аргумента дополнительно к коду команды надо обратиться к R2 или R3 с использованием определённых режимов адресации. А т.к. компилятор штука умная, то нам нет нужды помнить о них — мы просто подставляем нужную константу в команду.
Проиллюстрируем.
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label vissible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
mov R2, R4 ; R2 -> R4
;mov 0(R2), R4 ; запрещено
mov R3, R4 ; 0 -> R4
mov #0, R4 ; то же
mov 0(R3), R4 ; 1 -> R4
mov #1, R4 ; то же
mov @R3, R4 ; 2 -> R4
mov #2, R4 ; то же
mov @R3+, R4 ; -1 -> R4
mov #-1, R4 ; то же
mov @R2, R4 ; 4 -> R4
mov #4, R4 ; то же
mov @R2+, R4 ; 8 -> R4
mov #8, R4 ; то же
mov #3, R4 ; 3 -> R4
mov #16, R4 ; 16 -> R4
JMP $ ; jump to current location '$'
; (endless loop)
END
Здесь я привёл попарно примеры с явным использованием адресации и с указанием константы. В конце, для контраста, поместил использование констант 3 и 16, которые не генерируются аппаратно, а помещаются аргументом к команде.
При отладке откройте окна «Register» и «Disassembly» в IAR (из меню «View»). В окне дешифрованного кода вы увидите, что мнемоники для явного указания и просто константы дают одинаковый код. Там же увидите разницу в размере кода, на примере последних команд. А в окне регистров (при этом должна быть выбрана секция «CPU Registers» в списке окна) внизу есть значение «CCSTEP», в котором указано количество тактов на последнюю выполненную команду.
Как говориться: почувствуйте разницу.
2. Система тактирования.
Как уже было упомянуто, у MSP430 имеется несколько источников тактовых сигналов. Повторим их.
- DCO (Digital Controlled Oscillator) — внутренний, построен на RC-цепочке и имеет частоту в пределах 120 кГц… 10 МГц (750 кГц по умолчанию, максимум ограничен контроллером и не может быть выше рабочей частоты, даже если источник это позволяет), может меняться программно или с помощью внешнего резистора, но девиация сильно зависит от температуры.
- LFXT1 (Low Frequency eXternal) — внешний, работает в двух режимах: высокочастотном (450 кГц… 8 МГц) и низкочастотном (оптимизирован под часовой кварц 32768 Гц, при этом не нужны внешние конденсаторы).
- XT2 (eXternal) — внешний, высокочастотный — 450 кГц… 8 МГц.
Выбор источника тактирования осуществляется программно. При этом, по умолчанию запускается на встроенном. Если мы пытаемся подключить внешний источник и нам это не удалось, контроллер вернётся к работе на встроенный и не зависнет.
Общая схема системы тактирования выглядит так:

Кварцы снаружи (опционально, как и доп резистор), остальное внутри контроллера. XT2 (обведено пунктиром) присутствует только в старших моделях (на 64 и более ног).
Не пугайтесь массы обозначений — разжуём и всё станет ясно как летним днём. Чтобы не путаться, источниками назовём DCO, LFXT1 (или просто, XT1) и XT2. А нижеперечисленное будет сигналами.
Каждый источник формирует свой конечный сигнал:
- DCOCLK;
- LFXTCLK;
- XT2CLK.
- MCLK (Master Clock) — основной, используется для тактирования ядра и некоторой периферии (ЭСППЗУ, АЦП, контроллер ПДП).
- SMCLK (Sub-System Master Clock) — дополнительный, может использоваться для тактирования периферии.
- ACLK (Auxiliary Clock) — вспомогательный, может использоваться для тактирования периферии (обычно низкоскоростной).
- ACLK обделён — работает исключительно от LFXT1.
- MCLK — можно завести от любого источника.
- SMCLK — работает от DCO или XT2.
Всё это богатство предназначено для оптимизации по энергопотреблению. Кстати, с этим у MSP430 вообще всё интересно. Можно, к примеру, включить конкретный модуль периферии, отключив всё остальное, вплоть до ядра. Контроллер будет мирно спать почти не потребляя, пока не наступит событие от периферии или немаскируемое прерывание. Или вообще послать всё в глубокий сон до сброса. Можно сделать наоборот, но ядро является самым потребляющим устройством. Источники тактирующих сигналов можно менять программно «на ходу».
Стандартный джентльменский набор:
- DCO — по умолчанию 750 кГц;
- LFXT1 — часовой кварц 32768 Гц;
- XT2 — HS-кристалл 8 МГц с конденсаторами 6..12 пФ.
Сильно размусоливать не будем, подробности можно найти в документах «Руководство пользователя» («User's guide») на конкретные серии, найти можно на сайте TI. Вот ссылки (ссылки прямые на PDF):
http://www.ti.com/litv/pdf/slau049f — MSP430x1xx
http://www.ti.com/litv/pdf/slau144f — MSP430x2xx
Есть чудесные русские переводы этих документов для сотой и четырёхсотой серий, а также примеров применений. Раньше лежали на сайте Компела, но сейчас их там нет. Есть онлайновые варианты на сайте http://gaw.ru. Сразу на главной есть ссылки. Я же обозначу основные моменты.
Как уже было сказано, ядро тактируется сигналом MCLK, который может быть выбран от любого из источников. Выбор осуществляется битами SELMx. После коммутатора сигнал проходит через программируемый делитель, коэффициент деления задаётся битами DIVMx. Бит CPUOFF позволяет отключить тактирующий сигнал от ядра (вывести его из этого режима может сигнал сброса или прерывание). Обратите внимание — название бита говорит о его функции, т.е. «1» отключает сигнал тактирования!
Тактирование периферии осуществляется каким-либо из основных тактирующих сигналов. Не для всей периферии доступен MCLK. Обычно используются SMCLK (как правило, для высокоскоростной, при этом сигнал берется от источника XT2, а туда обычно вешают мегагерцовые кварцы), ACLK (для низкоскоростной, т.к. обычно на LFXT1 висит часовой кварц) и некоторые внешние источники для таймеров (эти источники не входят в главную систему тактирования; обычно это счетные импульсы для модуля захвата/сравнения).
Сигнал ACLK также имеет свой делитель, коэффициент деления задают биты DIVAx. Сигнал неотключаемый, но вы можете его просто не использовать.
Сигнал SMCLK может подаваться от источников DCO или XT2, выбор осуществляется битом SELS. После коммутатора стоит делитель, коэффициент деления выбирается битами DIVSx. И, наконец, битом SCG1 можно выключить этот сигнал (выключение — «1»!).
Выбор сигнала тактирования осуществляется индивидуально для каждого модуля периферии (каждый модуль имеет биты выбора).
Рассмотрим кратко источники тактирования.
XT2.
Самый простой в плане управления. Есть бит XT2OFF, который отключает источник. Всё.
LFXT1.
Ненамного сложнее. Имеется бит OSCOFF, отключающий весь источник. Бит XTS переключает режимы между высокой («1») и низкой 32768 Гц («0») частотой. Биты LFOff и XT1Off отключают индивидуально усилители для каждого из режимов.
DCO.
«Старый дедушка Колль
был весёлый король...»
Да, здесь много весёлых и занятных вещей. Но все они становятся просты, если немного вникнуть.
Источник DCO имеет множество тонких настроек. Основан на RC-генераторе.
Бит DCOR выбирает внутренний («0») или внешний («1») резистор для генератора. От этого выбора будет зависеть основная частота. Биты RSELx выбирают диапазон частот, а DCOx выбирают одну из 8 частот, распределённых равномерно в диапазоне. Биты MODx управляют работой хитрого модулятора, позволяющего осуществить дополнительное управление диапазонами частот (подробности в документации, я этим не пользовался). Бит SCG0 отключает («1») источник вообще.
Вот и все тонкости тактирования. Есть ещё несколько (скорость запуска источников, сбои в их работе), но мы их рассмотрим по мере использования в следующих статьях и при накоплении вопросов.
Фух, читайте и да наступит вам просветление!

- +2
- 16 марта 2011, 21:22
- SerjT
Я сделаю так — продублирую в третьей части постскриптумом, ок?
Исходил из соображения, что те, кто прочитал предыдуший урок, вряд ли полезут перечитывать. Поэтому внёс в новый.
Исходил из соображения, что те, кто прочитал предыдуший урок, вряд ли полезут перечитывать. Поэтому внёс в новый.
МОжно поскриптом. Не суть важно как.
Мммм неверная предпосылка. Это не лекционая аудитория, а интернет. Студент может свалиться с поиска куда угодно, в любую статью, а потом уйти навсегда. Или прийти потом. И представь Искал статью про генератор констант, нашел статью, а там во первых строках втирают про какую то адресацию сидишь и думаешь — что это, к чему это?
Так что материал лучше рубить на функционально законченыне статьи с началом, описанием, завершением и дополнениями всякими.
Мммм неверная предпосылка. Это не лекционая аудитория, а интернет. Студент может свалиться с поиска куда угодно, в любую статью, а потом уйти навсегда. Или прийти потом. И представь Искал статью про генератор констант, нашел статью, а там во первых строках втирают про какую то адресацию сидишь и думаешь — что это, к чему это?
Так что материал лучше рубить на функционально законченыне статьи с началом, описанием, завершением и дополнениями всякими.
Про CG вообще мало кто будет искать :-)
Но, думаю, дубль не испортит настроения, тем более сказано: «дополнение к предыдущему уроку».
Ой, горе мне! Только сейчас подумал — может стоит добавить в уроках ссылки «Следующий» и «Предыдущий»?
Но, думаю, дубль не испортит настроения, тем более сказано: «дополнение к предыдущему уроку».
Ой, горе мне! Только сейчас подумал — может стоит добавить в уроках ссылки «Следующий» и «Предыдущий»?
Вообще можно. Но с этим есть ряд заморочек:
Во первых по MSPстатьи в блог MSP пишут несклько человек, всех не уследишь.
Вторая проблема в том, что если поправить чуть чуть заголовок, то меняется ссылка на статью, а значит разрушается сеть линков. Так что тут надо быть осторожным. Ну и потом, если что то захочется дополнить-добавить новой статьей между двух, то править придется сразу три статьи.
Во первых по MSPстатьи в блог MSP пишут несклько человек, всех не уследишь.
Вторая проблема в том, что если поправить чуть чуть заголовок, то меняется ссылка на статью, а значит разрушается сеть линков. Так что тут надо быть осторожным. Ну и потом, если что то захочется дополнить-добавить новой статьей между двух, то править придется сразу три статьи.
Опа, а при таком изврате с регистрами содержимое R2 и R3 как я понял не меняется. Так?
И фактически можно писать
И фактически можно писать
И ещё вопрос… Правда немного не по теме, но думаю многим будет интересно, как и каким софтом можно програмировать например тот же LaunchPad самостоятельно и как же всётаки слить програму уже записаную в чипе?? Даже через IAR у меня не получилось просто его запрограмировать (только через дебагер) и вообще ненашел как считать прошивку назад…
По поводу программирования.
По лончпаду — у _YS_ это описано, он лучше знает, но должен программироваться и из IAR.
Есть ещё MSPFET — бесплатная утилитка.
Если JTAG собран по фирменной схеме от TI, то проблем не должно быть.
А вот считывание прошивки невозможно в принципе.
Дело в том, что сам контроллер шифрует прошивку, в качестве ключа используется таблица векторов прерываний. Если её не знать, то никакими методами считать нельзя.
По лончпаду — у _YS_ это описано, он лучше знает, но должен программироваться и из IAR.
Есть ещё MSPFET — бесплатная утилитка.
Если JTAG собран по фирменной схеме от TI, то проблем не должно быть.
А вот считывание прошивки невозможно в принципе.
Дело в том, что сам контроллер шифрует прошивку, в качестве ключа используется таблица векторов прерываний. Если её не знать, то никакими методами считать нельзя.
>«Дело в том, что сам контроллер шифрует прошивку, в качестве ключа используется таблица векторов прерываний.»
Я слышал, там есть дырка… Желающим предлагаю погуглить. Но таки да, такое считывание это именно хак, а не стандартная функция.
>" Правда немного не по теме, но думаю многим будет интересно, как и каким софтом можно програмировать например тот же LaunchPad самостоятельно"
В смысле сам LaunchPad — есть ощущение, что никак, кроме IAR'овского отладчика (как — см. мою статью). Хотя вообще, насколько я понял (если неправ — пусть знающие меня поправят), в нем стоит урезанный USB-FET, и потому, видимо, софтины, работающие с FET'ом должны работать и с LaunchPad'ом. Но у меня они ругались… Надо будет еще раз попробовать.
Я слышал, там есть дырка… Желающим предлагаю погуглить. Но таки да, такое считывание это именно хак, а не стандартная функция.
>" Правда немного не по теме, но думаю многим будет интересно, как и каким софтом можно програмировать например тот же LaunchPad самостоятельно"
В смысле сам LaunchPad — есть ощущение, что никак, кроме IAR'овского отладчика (как — см. мою статью). Хотя вообще, насколько я понял (если неправ — пусть знающие меня поправят), в нем стоит урезанный USB-FET, и потому, видимо, софтины, работающие с FET'ом должны работать и с LaunchPad'ом. Но у меня они ругались… Надо будет еще раз попробовать.
Сейчас попробую MSPFET и отпишусь. Косвенным подтверждением вышеизложенной гипотезы про урезанный FET является то, что для общения с обоими адаптерами используется одна и та же DLL.
Да, можно сказать, что MSPFET работает с LaunchPad. Почему «можно сказать»? В списке МК, поддерживаемых MSPFET, нет серии G. Обидно… А так да, в LaunchPad стоит урезанный USB-FET. Теперь я уверен в этом на 99.8%.
Если кому интересно, как заставить MSPFET работать с LaunchPad:
1. Скачиваем MSPFET.
2. Берем из папки IAR msp430.dll и hil.dll и копируем их в папку MSPFET.
3. В настройках ставим
Current adapter settings->FET msp430.dll:
Port: TIUSB
Protocol: Spy-bi-Wire
Все. Готово. Можно читать, перезагружать, стирать. А вот как шить — вопрос. В списке контроллеров, как я уже упоминал, серии G нет.
Если кому интересно, как заставить MSPFET работать с LaunchPad:
1. Скачиваем MSPFET.
2. Берем из папки IAR msp430.dll и hil.dll и копируем их в папку MSPFET.
3. В настройках ставим
Current adapter settings->FET msp430.dll:
Port: TIUSB
Protocol: Spy-bi-Wire
Все. Готово. Можно читать, перезагружать, стирать. А вот как шить — вопрос. В списке контроллеров, как я уже упоминал, серии G нет.
Итак, я его нашел. Подходит FET-Pro430 Lite Software.
Настройки:
Memory Options: снять галку Check DCO Constants — в серии G они расположены в другом месте, программа их не находит и ругается. Потому — не надо их проверять.
Connection/Device Reset:
Communication with Target Device->Spy-Bi-Wire
COM port->USB->Automatic
Final Target device action->Reset and start the application program
Used Adapter->TI's FET or…
Потом выбираем устройство (поддерживаются все МК), жмем AUTO PROG. м все.
Настройки:
Memory Options: снять галку Check DCO Constants — в серии G они расположены в другом месте, программа их не находит и ругается. Потому — не надо их проверять.
Connection/Device Reset:
Communication with Target Device->Spy-Bi-Wire
COM port->USB->Automatic
Final Target device action->Reset and start the application program
Used Adapter->TI's FET or…
Потом выбираем устройство (поддерживаются все МК), жмем AUTO PROG. м все.
Прекрасно читается то что туда записал :) Я тоже после 2 часов поиска выкопал эту софтинку (MSPFET) и ещё поле часа обнаружил что типы поддерживаемых МК уложены именно в ДЛЛ. и скопировал туда поледние :) Я правда их брал из CCS. Но теперь незнаю как заставить CCS сгенерить бинарик :) генерит только *.out который не есть бинарик :) Иду качать и пробовать FET-Pro430 Lite Software.
Я нормально програмирую в Adobe FLEX Builder. Так же получилось прикрутить к нему AVR GCC. Для MSP430 я поставил ещё одну версию еклипса отдельно :) Без проблем научил его дебужить и через LaunchPad. Писать ничео небуду — ТУТ очень подробно и с картинками это всё описано. Только замечу что есть две версии фирмваря для LaunchPada — и чтобы всё работало — надо его заагрейдить… Как это сделать — описано на TI Wiki.
IAR, вообще-то, де-факто промышленный стандарт и самый эффективный набор компиляторов под разные процы. Не раз сравнивали с фирменными и GCC-шными — IAR рулез форева. Да, среда немного неудобная после AVRStudio и MPLAB. Да, не симулирует периферию в программной эмуляции.
Но как инструмент для компиляции — цацка.
Но как инструмент для компиляции — цацка.
Так а кто мешает-то? Он вроде как в IAR IDE не вкручен болтами. 
Хотя, скажу честно, новогодние елки типа MSVS меня утомляют. Может, в каком-то плане оно и удобно (скажем, от подсказки параметров я бы не отказался), но стОит все же соблюдать разумную грань между сиянием IDE и его производительностью. Тем более, когда все вокруг скачет, всплывает и вылазит при каждом нажатии на кнопку, это элементарно отвлекает. Кстати, в CodeBlocks я долго не мог привыкнуть к тому, что редактор норовит сам за меня поставить "}" — приходилось стирать лишнюю скобку, ибо за пару лет написания программ в AVR Studio создание типовых синтаксических конструкций вышло у меня на уровень рефлекса.

Хотя, скажу честно, новогодние елки типа MSVS меня утомляют. Может, в каком-то плане оно и удобно (скажем, от подсказки параметров я бы не отказался), но стОит все же соблюдать разумную грань между сиянием IDE и его производительностью. Тем более, когда все вокруг скачет, всплывает и вылазит при каждом нажатии на кнопку, это элементарно отвлекает. Кстати, в CodeBlocks я долго не мог привыкнуть к тому, что редактор норовит сам за меня поставить "}" — приходилось стирать лишнюю скобку, ибо за пару лет написания программ в AVR Studio создание типовых синтаксических конструкций вышло у меня на уровень рефлекса.

Кстати, в CodeBlocks я долго не мог привыкнуть к тому, что редактор норовит сам за меня поставить "}"Есть такое. С другой стороны, к этому несложно привыкнуть. Некоторые мои знакомые кроме MSVS+VAX ничего за IDE и не считают :)
А мешают как обычно лень и необходимость некоторого интегрирующего слоя (особенно чтобы в ту же MSVS вкрутить симулятор с дебаггером).
Артём! Честно признаюсь — БМП. Не пробовал.
Но по логике вещей: первый вход тактового сигнала всегда подключен к "+" встроенного усилителя. Посему, ему хоть кварц, хоть внешний генератор — плевать.
Так что — должно работать.
Главное, согласование сопротивлений.
Но по логике вещей: первый вход тактового сигнала всегда подключен к "+" встроенного усилителя. Посему, ему хоть кварц, хоть внешний генератор — плевать.
Так что — должно работать.
Главное, согласование сопротивлений.
Для внешнего тактирования все то же самое, что и для кварца.
Вот и все. Пара битов — и готово. Вообще, мне кажется, система тактирования явно сильная сторона MSP430 по сравнению с теми же AVR (даже при всей моей любви к последним).
LFXT1 may be used with an external clock signal on the XIN pin in either LF
or HF mode when LFXT1Sx = 11, OSCOFF = 0 and XCAPx = 00. When used
with an external signal, the external frequency must meet the data sheet
parameters for the chosen mode. When the input frequency is below the
specified lower limit, the LFXT1OF bit may be set preventing the CPU from
being clocked with LFXT1CLK.
…
XT2 may be used with external clock signals on the XT2IN pin when XT2Sx
= 11 and XT2OFF = 0. When used with an external signal, the external
frequency must meet the data sheet parameters for XT2. When the input
frequency is below the specified lower limit, the XT2OF bit may be set
preventing the CPU from being clocked with XT2CLK.
Вот и все. Пара битов — и готово. Вообще, мне кажется, система тактирования явно сильная сторона MSP430 по сравнению с теми же AVR (даже при всей моей любви к последним).
Кто его знает. Мож они при настройке на внешку просто лишний усилитель отключают)
Но во всяком случае регулярно видел, как несколько микр с одинаковой тактовой (и полным отсутствием настроек) робят от одного кварца. На одной кварц висит, а остальные с нее сигнал берут. Из последнего — тот мр3 трасмиттер, там проц от кварца работает, а на передатчик с XOUT проца заведено.
Но во всяком случае регулярно видел, как несколько микр с одинаковой тактовой (и полным отсутствием настроек) робят от одного кварца. На одной кварц висит, а остальные с нее сигнал берут. Из последнего — тот мр3 трасмиттер, там проц от кварца работает, а на передатчик с XOUT проца заведено.
Не настаиваю, но хотелось бы отражения или здесь или где-то далее такой фишки как аппаратно-принудительный переход на тактирование от DCO при обработке прерываний.
Не в тему, но пройдусь по CCS, который имеет скверное свойство тереть исходники, созданные другой средой, даже его предшественником ADT430 (оболочка, аналогичная AVR STUDIO ранних версий. Была простая, удобная, шустрая, поддерживала периферию и обрабатывала прерывания). Если кому интересно могу выложить 2,4М архив (free-симулятор, схемы программаторов BSL, программная поддержка программаторов BSL). Для быстрого старта в «железе» самое то, ИМХО.
Не в тему, но пройдусь по CCS, который имеет скверное свойство тереть исходники, созданные другой средой, даже его предшественником ADT430 (оболочка, аналогичная AVR STUDIO ранних версий. Была простая, удобная, шустрая, поддерживала периферию и обрабатывала прерывания). Если кому интересно могу выложить 2,4М архив (free-симулятор, схемы программаторов BSL, программная поддержка программаторов BSL). Для быстрого старта в «железе» самое то, ИМХО.
Думаю, автору (и соавторам) не надоело еще слушать благодарности. Поэтому позвольте сказать огромное спасибо! И за саму идею, и за великолепный стиль.
Я только несколько дней начал почитывать об MSP430. Пока все очень завлекательно. Как конечная цель, ради которой готов попробовать это семейство «в деле», это заменить атмегу168 в одном девайсе, который сделал не так давно. Весь пафос в том, чтобы использовать сигма-дельта АЦП, выжав из него хоть 15 устойчивых разрядов.
Понимаю, что это несколько в стороне от главного стрима данного цикла статей. И все же, как вы посмотрите на вопрос раскуривания практического использования этого АЦП? У меня пока в башке все смешалось, живого камня типа MSP430F4272, ..F427A, ..FE427A под рукой нет, а то, что вычитал до сих пор, недостаточно даже для оценки «есть ли смысл пробовать».
Через неделю пойду на семинар, который проводит Компел с чуваками из TI как раз по этой серии. Чем больше узнаю до этого, тем больше смогу разузнать от них. Так что можем тут и общие вопросы сформулировать.
Я только несколько дней начал почитывать об MSP430. Пока все очень завлекательно. Как конечная цель, ради которой готов попробовать это семейство «в деле», это заменить атмегу168 в одном девайсе, который сделал не так давно. Весь пафос в том, чтобы использовать сигма-дельта АЦП, выжав из него хоть 15 устойчивых разрядов.
Понимаю, что это несколько в стороне от главного стрима данного цикла статей. И все же, как вы посмотрите на вопрос раскуривания практического использования этого АЦП? У меня пока в башке все смешалось, живого камня типа MSP430F4272, ..F427A, ..FE427A под рукой нет, а то, что вычитал до сих пор, недостаточно даже для оценки «есть ли смысл пробовать».
Через неделю пойду на семинар, который проводит Компел с чуваками из TI как раз по этой серии. Чем больше узнаю до этого, тем больше смогу разузнать от них. Так что можем тут и общие вопросы сформулировать.
Вот книга от Компэла (перевод slau144e.pdf, последняя версия от TI — slau144h.pdf): catalog.compel.ru/blog/wp-content/uploads/2011/03/MSP430_Final.pdf
хочу продолжения! :) и примеры, если можно лучше на C. Не стоит подсаживаться на ассемблер, имхо.
- DeusExMachina
- 21 июля 2011, 23:30
- ↓
Маленькое замечание. Ты пишешь:
XT2 (обведено пунктиром) присутствует только в старших моделях (на 64 и более ног).
Это не совсем так. В манюсенькой на 24 ноги MSP430AFE251 есть этот генератор — а вот XT1, как ни странно, нет.
Второе замечание. У той же MSP430AFE251 (и не только) есть еще генератор четвертого типа — Very Low Frequency Oscillator (VLO). Его в даташите называют very-low-power low-frequency oscillator, что отражает и область его использования.
XT2 (обведено пунктиром) присутствует только в старших моделях (на 64 и более ног).
Это не совсем так. В манюсенькой на 24 ноги MSP430AFE251 есть этот генератор — а вот XT1, как ни странно, нет.
Второе замечание. У той же MSP430AFE251 (и не только) есть еще генератор четвертого типа — Very Low Frequency Oscillator (VLO). Его в даташите называют very-low-power low-frequency oscillator, что отражает и область его использования.
Комментарии (67)
RSS свернуть / развернуть