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

Сегодня заканчиваем обзор ядра, чтобы приступить к остальным полезняшкам.

План.
1. Генератор констант.
2. Система тактирования.

До понедельника, надеюсь, потестирую свой новый контроллер и перейдём к свежим сериям MSP430. Уних есть некоторые преимущества, но в целом архитектура одинакова с сотой серией.

Для начала несколько замечаний по предыдущему материалу.

Замечание 1. По режимам адресации.
Т.к. регистры ядра не имеют физического адреса, выражаемого числом, то к ним неприменимы следующие режимы адресации:
  • символьный;
  • абсолютный;
  • непосредственный.
Замечание2. По байтному и словному доступу.
В словном режиме недопустимо обращение по нечётным адресам памяти!
При обмене «регистр -> память»:
  • при словном режиме младшая часть регистра помещается по меньшему (чётному) адресу, старшая по следующему (+1).
  • при байтном режиме по адресу обращения помещается младшая часть, старшая игнорируется.

При обмене «память -> регистр»:
  • при словном режиме в младшую часть регистра помещается значение из меньшего (чётного) адреса, в старшую из следующего (+1).
  • при байтном режиме в младшую часть регистра помещается значение из ячейки по адресу обращения, в старшую заносится 0.
Замечание 3. Регистр PC (aka R0).
Инкремент счетчика команд (только на число, кратное 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"? Без генератора констант команда в коде и её исполнение выглядело бы так:
  • выбрать команду из памяти и дешифровать;
  • т.к. команда с аргументом, то выбрать аргумент и поместить его в регистр.
Как видим — 2 такта и 2 слова в памяти программ для классических RISC.
Но товарищи техасцы, как известно, люди суровые. Они предложили отдать на откуп один регистр (а вы часто используете более 8 штук?) для оптимизации и сказали: «Пусть при обращении к этому регистру будет автоматически появляться какое-то число». Таким образом цепочка сократилась до:
  • выбрать команду из памяти, дешифровать и поместить константу в регистр.
Итог — 1 такт и 1 слово.

Т.к. мы можем использовать 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 пФ.
Данный набор позволяет построить систему с гибкими возможностями. Я так поступил со своим FET140 — у него на плате были посадочные места под внешние кварцы и конденсаторы (плата MSP-TS430PM64 rev. 0.1).

Сильно размусоливать не будем, подробности можно найти в документах «Руководство пользователя» («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

Комментарии (67)

RSS свернуть / развернуть
За генератор констант огромное спасибо! Наконец-то до конца разобрался.
0
  • avatar
  • _YS_
  • 16 марта 2011, 22:48
В словном режиме недопустимо обращение по нечётным адресам памяти!
А что будет? Компилятор поправит?
0
Пошлёт далеко и сделает обиженный вид :-)
Выдаст ошибку и откажется компилировать. Если такой финт сделать вручную в скомпилированном коде — говорят, проц намертво виснет.
0
Звиняй, обманул.
Проверил на программном симуляторе — нифига.
Компилятор пропускает спокойно, дебаггер выдаёт предупреждение и всё. Делает вид, что младший бит адреса равен 0.
Странно, в предыдущей версии посылал в пень…
На железе проверю позже.
0
Замечания лучше дописать к предыдущей статье. Там оно уместней, как целостный материал.
0
Я сделаю так — продублирую в третьей части постскриптумом, ок?
Исходил из соображения, что те, кто прочитал предыдуший урок, вряд ли полезут перечитывать. Поэтому внёс в новый.
0
МОжно поскриптом. Не суть важно как.

Мммм неверная предпосылка. Это не лекционая аудитория, а интернет. Студент может свалиться с поиска куда угодно, в любую статью, а потом уйти навсегда. Или прийти потом. И представь Искал статью про генератор констант, нашел статью, а там во первых строках втирают про какую то адресацию сидишь и думаешь — что это, к чему это?

Так что материал лучше рубить на функционально законченыне статьи с началом, описанием, завершением и дополнениями всякими.
0
Про CG вообще мало кто будет искать :-)

Но, думаю, дубль не испортит настроения, тем более сказано: «дополнение к предыдущему уроку».

Ой, горе мне! Только сейчас подумал — может стоит добавить в уроках ссылки «Следующий» и «Предыдущий»?
0
Вообще можно. Но с этим есть ряд заморочек:

Во первых по MSPстатьи в блог MSP пишут несклько человек, всех не уследишь.

Вторая проблема в том, что если поправить чуть чуть заголовок, то меняется ссылка на статью, а значит разрушается сеть линков. Так что тут надо быть осторожным. Ну и потом, если что то захочется дополнить-добавить новой статьей между двух, то править придется сразу три статьи.
0
А разве ссылки не статические? Транслит и железно указывает в нужное место.
Если не менять название блога (думаю ты не будешь) и статей (точно не буду), то наверняка всё пучком.
0
Статичные. Но надо помнить, что нельзя менять заголовок который есть.
0
речь тут даже не о CG, а вообще о стилистике статей.

Кстати, по поводу мало… один запрос из поиска по генератору констант уже есть :)))))
0
По запросам «MSP430 учебный курс» и «генератор констант» мы на первом месте в гугле.
Ура, товарищи!
0
И почему я не удивлен? ;)
0
«Ой, чо то я такой в вас влюблённый...»
Знай наших!
0
Насколько мне известно, никто до меня так не раскладывал эту тему.
<Гордо задрал нос и смотрит ввысь.>
0
Опа, а при таком изврате с регистрами содержимое R2 и R3 как я понял не меняется. Так?

И фактически можно писать
0
mov #0, R4, а компилер сам родит:

mov R3, R4

Так?
0
Да, именно так. Об этом я и говорил. Программисту нет необходимости вспоминать, какой режим использовать. Он просто пишет, что ему надо, а компилятор сам смотрит: можно оптимизировать — ок, сделаем; нет — ну и не надо.
В любом случае, содержимое источника — первый операнд — не изменяется.
0
И ещё вопрос… Правда немного не по теме, но думаю многим будет интересно, как и каким софтом можно програмировать например тот же LaunchPad самостоятельно и как же всётаки слить програму уже записаную в чипе?? Даже через IAR у меня не получилось просто его запрограмировать (только через дебагер) и вообще ненашел как считать прошивку назад…
0
  • avatar
  • wowa
  • 17 марта 2011, 11:55
По поводу программирования.
По лончпаду — у _YS_ это описано, он лучше знает, но должен программироваться и из IAR.
Есть ещё MSPFET — бесплатная утилитка.
Если JTAG собран по фирменной схеме от TI, то проблем не должно быть.

А вот считывание прошивки невозможно в принципе.
Дело в том, что сам контроллер шифрует прошивку, в качестве ключа используется таблица векторов прерываний. Если её не знать, то никакими методами считать нельзя.
0
>«Дело в том, что сам контроллер шифрует прошивку, в качестве ключа используется таблица векторов прерываний.»

Я слышал, там есть дырка… Желающим предлагаю погуглить. Но таки да, такое считывание это именно хак, а не стандартная функция.

>" Правда немного не по теме, но думаю многим будет интересно, как и каким софтом можно програмировать например тот же LaunchPad самостоятельно"

В смысле сам LaunchPad — есть ощущение, что никак, кроме IAR'овского отладчика (как — см. мою статью). Хотя вообще, насколько я понял (если неправ — пусть знающие меня поправят), в нем стоит урезанный USB-FET, и потому, видимо, софтины, работающие с FET'ом должны работать и с LaunchPad'ом. Но у меня они ругались… Надо будет еще раз попробовать.
0
Сейчас попробую MSPFET и отпишусь. Косвенным подтверждением вышеизложенной гипотезы про урезанный FET является то, что для общения с обоими адаптерами используется одна и та же DLL.
0
Да, можно сказать, что 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 нет.
0
И даже свеженький с сайта про них не знает?
Странно, отстают ребята.
0
Итак, я его нашел. Подходит 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. м все.
0
Прекрасно читается то что туда записал :) Я тоже после 2 часов поиска выкопал эту софтинку (MSPFET) и ещё поле часа обнаружил что типы поддерживаемых МК уложены именно в ДЛЛ. и скопировал туда поледние :) Я правда их брал из CCS. Но теперь незнаю как заставить CCS сгенерить бинарик :) генерит только *.out который не есть бинарик :) Иду качать и пробовать FET-Pro430 Lite Software.
0
Послушайте доброго совета — потрите CCS и поставьте IAR. Он генерит все, что пожелаете, плюс не такой ужасно тормозной. И да, в нем компилятор один из самых эффективных.
0
Стоят оба :) Я к эклипсу просто привык… Програмирую в нём уже лет 8… И машина у меня на него заточена… Так что у меня он литает как милый :)
0
На вкус и цвет товарищей нет. Просто когда я его поставил, мне он показался тормозным УГ… Я снес его, поставил IAR, и с тех пор счастлив. Хотя дело вкуса, конечно.
0
GCC? Сам хочу наших студиозусов под него перевести.
Тем более, наши западные коллеги в нём по жизни сидят.
Не против вопросов новичка по теме OpenSource?
0
А может напишешь статейку, как в эклипсе этим богатством пользоваться? Судя по всему, у тебя MSPGCC?
0
Я нормально програмирую в Adobe FLEX Builder. Так же получилось прикрутить к нему AVR GCC. Для MSP430 я поставил ещё одну версию еклипса отдельно :) Без проблем научил его дебужить и через LaunchPad. Писать ничео небуду — ТУТ очень подробно и с картинками это всё описано. Только замечу что есть две версии фирмваря для LaunchPada — и чтобы всё работало — надо его заагрейдить… Как это сделать — описано на TI Wiki.
0
IAR, вообще-то, де-факто промышленный стандарт и самый эффективный набор компиляторов под разные процы. Не раз сравнивали с фирменными и GCC-шными — IAR рулез форева. Да, среда немного неудобная после AVRStudio и MPLAB. Да, не симулирует периферию в программной эмуляции.
Но как инструмент для компиляции — цацка.
0
>«Да, среда немного неудобная после AVRStudio и MPLAB»

Ну, не сказал бы. Опять же, кому как, но я с AVR Studio перешел на IAR как на родной.

>«Да, не симулирует периферию в программной эмуляции.»

А оно надо?
0
"- Старшина, стройте взвод!
— А на… я?
— Ну, тогда не надо..."
0
Вшивенькая там среда, особенно после сред под ПК. Правда, в нем обычно и не приходится работать с мегабайтами и десятками мегабайт исходников. Но писать без подсказок, автодополнения и прочих фишек среды — непривычно и неудобно.
0
Это да… <грустно>
Я сам, когда переходил с x86 на контроллеры, плевался и пукал. Потом привык.
Для инженера не имеют значения среда и инструментарий. Главное — решить задачу.
0
Ну как сказать. Хороший специалист и топором SSOP припаяет, но паяльной станцией как-то быстрее и сподручней)
Интересно было бы прикрутить компилятор IAR'а к более вменяемой среде. Желательно к MSVS)
0
Так а кто мешает-то? Он вроде как в IAR IDE не вкручен болтами.

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

А мешают как обычно лень и необходимость некоторого интегрирующего слоя (особенно чтобы в ту же MSVS вкрутить симулятор с дебаггером).
0
Как сказал один мой знакомый: «Я программист, а не пользователь» и нафик отключил подсказки в Delphi.
На вкус и цвет… никого не найдешь.
0
Так же как я понял — CCS сгенерить бинарик неумеет????? Или как??? Так хоть ASM??? Потому что IAR его в той версии тоже не умеет (точнее нехочет) генерить.
0
Дополнил статью, всё, можно читать полностью.
Комментируем, не стесняемся в выражениях.
0
А внешний тактовый сигнал подключить низя чтоль?
0
Вроде ж внешний тактовый можно загнать в любой девайс, где кварцевый генератор есть.
0
Ну у той же меги или STM они конфигурируются по разному. Этож жж не спроста!
0
Артём! Честно признаюсь — БМП. Не пробовал.
Но по логике вещей: первый вход тактового сигнала всегда подключен к "+" встроенного усилителя. Посему, ему хоть кварц, хоть внешний генератор — плевать.
Так что — должно работать.
Главное, согласование сопротивлений.
0
Для внешнего тактирования все то же самое, что и для кварца.

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 (даже при всей моей любви к последним).
0
Немного на STM32 похоже. Там тоже старт на HSI (RC встроенный), настройка софтом (тока доступны кроме двух XT еще один внутренний и PLL) и вылет на HSI при проблемах с внешним источником)
Ну и довольно широкое управление кому клоки дать.
0
AVR стар и мудер. Тогда это было нормой. Сейчас в новых хМега в тактировании тоже черт ногу сломит. В некоторых новых тини тоже. ТАм PLL пяовился и можно некоторую периферию от 50мгц затактовать :)
0
Вот непонятно, нафига 8-ми битную архитектуру было расширять. Им что 16-бит было сложно сделать при той же архитектуре? А то получается серия XMEGA какое-то мертворожденнное создание.
0
Кто его знает. Мож они при настройке на внешку просто лишний усилитель отключают)
Но во всяком случае регулярно видел, как несколько микр с одинаковой тактовой (и полным отсутствием настроек) робят от одного кварца. На одной кварц висит, а остальные с нее сигнал берут. Из последнего — тот мр3 трасмиттер, там проц от кварца работает, а на передатчик с XOUT проца заведено.
0
Примерчик бы простенький. КОнфигурации, например, режима на внешний кварц.
0
Оки, будет.
Заказ принят.
0
Не настаиваю, но хотелось бы отражения или здесь или где-то далее такой фишки как аппаратно-принудительный переход на тактирование от DCO при обработке прерываний.
Не в тему, но пройдусь по CCS, который имеет скверное свойство тереть исходники, созданные другой средой, даже его предшественником ADT430 (оболочка, аналогичная AVR STUDIO ранних версий. Была простая, удобная, шустрая, поддерживала периферию и обрабатывала прерывания). Если кому интересно могу выложить 2,4М архив (free-симулятор, схемы программаторов BSL, программная поддержка программаторов BSL). Для быстрого старта в «железе» самое то, ИМХО.
0
  • avatar
  • akl
  • 18 марта 2011, 07:42
Кстати, о книгах. radiokot.ru/forum/viewtopic.php?p=330761#p330761
+1
Вот они, родимые! Качайте пока ссылки есть.
0
Будет. Кидайте ещё пожелания.
0
Думаю, автору (и соавторам) не надоело еще слушать благодарности. Поэтому позвольте сказать огромное спасибо! И за саму идею, и за великолепный стиль.
Я только несколько дней начал почитывать об MSP430. Пока все очень завлекательно. Как конечная цель, ради которой готов попробовать это семейство «в деле», это заменить атмегу168 в одном девайсе, который сделал не так давно. Весь пафос в том, чтобы использовать сигма-дельта АЦП, выжав из него хоть 15 устойчивых разрядов.
Понимаю, что это несколько в стороне от главного стрима данного цикла статей. И все же, как вы посмотрите на вопрос раскуривания практического использования этого АЦП? У меня пока в башке все смешалось, живого камня типа MSP430F4272, ..F427A, ..FE427A под рукой нет, а то, что вычитал до сих пор, недостаточно даже для оценки «есть ли смысл пробовать».
Через неделю пойду на семинар, который проводит Компел с чуваками из TI как раз по этой серии. Чем больше узнаю до этого, тем больше смогу разузнать от них. Так что можем тут и общие вопросы сформулировать.
0
Вот книга от Компэла (перевод slau144e.pdf, последняя версия от TI — slau144h.pdf): catalog.compel.ru/blog/wp-content/uploads/2011/03/MSP430_Final.pdf
+1
0
хочу продолжения! :) и примеры, если можно лучше на C. Не стоит подсаживаться на ассемблер, имхо.
0
С везде одинаковый же. А для демонстрации особенностей ядра асм само то.
0
Маленькое замечание. Ты пишешь:
XT2 (обведено пунктиром) присутствует только в старших моделях (на 64 и более ног).
Это не совсем так. В манюсенькой на 24 ноги MSP430AFE251 есть этот генератор — а вот XT1, как ни странно, нет.

Второе замечание. У той же MSP430AFE251 (и не только) есть еще генератор четвертого типа — Very Low Frequency Oscillator (VLO). Его в даташите называют very-low-power low-frequency oscillator, что отражает и область его использования.
0
Парни, скажите, а как подсчитать число тактов, которое необходимо на выполнение той или иной инструкции?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.