РадиоКот :: Что такое контроллер, и с чем его едят?
Например TDA7294

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Микроконтроллеры AVR - пишем, компилируем, прошиваем... >

Теги статьи: Добавить тег

Что такое контроллер, и с чем его едят?

Автор:
Опубликовано 01.01.1970

Ура, свершилось! Открываем раздел по микроконтроллерам!
Я знаю, что все вы, дорогие товарищи, давно держите в своих пытливых умах целый список вопросов про контроллеры. Но не знаете, кому их задать… Теперь жить вам должно стать чуть-чуть проще, ибо мы ответим на все (почти все) ваши вопросы.

Микроконтроллер – это такая хитрая микросхема, внутри которой находится самый настоящий компьютер. В этом компьютере есть все, что необходимо для самостоятельной работы:

  • процессор
  • оперативная память - ОЗУ
  • постоянная память - ПЗУ
  • генератор тактовой частоты
  • таймеры
  • порты ввода/вывода
  • последовательные интерфейсы
  • и много чего еще...

Например, в более «навороченных» контроллерах может быть АЦП (аналого-цифровой преобразователь), ЦАП (наоборот) и прочие прибамбасы. Чего только ни придумают! Но мы с вами, для начала, рассмотрим более простой вариант. Для примера возьмем контроллер фирмы Atmel, AT90s2313.

Чтобы понять, как работает контроллер, надо знать, что у него внутри. Ниже я нарисовал как мог сильно упрощенную схему контроллера – без таймеров, генераторов и прочей фигни – все только самое необходимое.

Упрощенная структурная схема контроллера

Самый главный элемент любого процессора – арифметико-логический узел (АЛУ). Кстати, по буржуйски он называется так-же – ALU (ariphmetic-logical unit). В нем-то, как вы уже догадались, и происходят все мыслимые и немыслимые арифметические и логические операции над числами. Кстати, насчет чисел: контроллер, как и любая другая цифровая система, работает с двоичными числами. О том, что это такое, я подробно распинался в статье "Что такое digital".

Тот контроллер, который мы сейчас мучаем, работает с 8-разрядными двоичными числами, иными словами – он 8-битный. То есть, АЛУ может захавать два 8-битных слова, произвести над ними какую то арифметическую или логическую операцию, и выплюнуть ответ – опять же, 8-битное слово.

Вопрос: а какие бывают арифметические и логические операции? И че эт ваще такое?

Ну, арифметическим операциям нас всех учили еще в 1 классе – это сложение, вычитание, сравнение :)
Логические операции – это операции алгебры логики. Вот некоторые из них: «И», «ИЛИ», «НЕ», «исключающее ИЛИ», сдвиг влево, сдвиг вправо.
Также существуют операции, которые ни относятся ни к тем ни к другим: сброс в «0», установка в «1» и т.п.

Чтобы произвести операцию, АЛУ должен взять откуда-то два числа. Выполнив операцию, опять же, должен положить куда-то ответ. Для этих целей служат регистры общего назначения – РОН. Их у нас 16. Каждый регистр – это ячейка памяти емкостью 8 бит. Иначе говоря – 1 Байт. Именно в них и хранятся числа, с которыми работает АЛУ.

Для каждой команды, которую выполняет АЛУ, необходимо назвать те регистры, с которыми он будет в данный момент работать.

Пример:
add R16,R17 - сложить значение регистров R16 и R17 и положить ответ в R16
sub R16,R18 - вычесть из R16, R18 и положить ответ в R16
and R24,R17 - произвести операцию «И» с R24 и R17, ответ – в R24
eor R16,R24 - произвести «исключающее ИЛИ» с R16 и R24, ответ – в R16.

Как вы могли заметить, ответ всегда помещается в тот регистр, который назван первым.
Естественно, старое содержимое регистра при этом затирается. Если нам нужно сохранить изначальное содержимое регистра, то перед операцией надо скопировать его в какой-нибудь другой регистр. Иначе – никак.

Оператор копирования – mov

Пример:
mov R16,R17
add R17,R24

Кроме РОН, на схеме присутствует ОЗУ – оперативная память контроллера. Для чего она?
Да для того, чтобы хранить данные при выполнении программы. Регистров ведь – всего 16. Для полноценной работы этого явно недостаточно. В регистрах хранится обычно только те данные, которые будут использоваться непосредственно прямо сейчас. Все остальное удобнее положить в память. Позднее мы поговорим о таких вещах как стек, указатели и пр. Пока что запомним, что память есть.

Ну вот. Откуда АЛУ берет данные для вычислений – разобрались. Теперь разберемся, откуда он берет команды.

А все очень просто!
Для этого существует регистр команд. В этот регистр постепенно выводятся команды той программы, которую выполняет контроллер. Эти команды касаются всего контроллера, а не только АЛУ (как мы помним, в контроллере просто тьма всего). Чтобы «выудить» из общей кучи «свою» команду, АЛУ постоянно заглядывает в регистр команд на предмет, нет ли там что-нить для него. И как только видит – стрелой мчится выполнять.

В регистр команд, команды попадают из программной памяти. Программная память – это ПЗУ (постоянное запоминающее устройство), в котором по каждому адресу записана одна команда. Вместе, все эти команды и составляют программу, и записаны в той последовательности, в какой они стоят в программе.

Размещение команд в ПЗУ

Чтобы «достать» команду из ПЗУ, надо сказать ему адрес ячейки памяти, в которой лежит эта команда. В ответ, ПЗУ выдаст содержимое этой ячейки. Команды записываются в ячейки в той последовательности, в которой стоят в программе. Поэтому, для того чтобы последовательно «перебирать» команды, достаточно просто каждый раз прибавлять к адресу «1».

Именно этим и занимается счетчик команд.



Однако же, программа, выполняющаяся внутри микросхемы и ни коим образом не связанная с внешним миром была бы просто никому не нужна. Для полноценной работы, контроллеру необходимо обмениваться данными с внешним миром.

Для этого существуют порты ввода/вывода (ПВВ).

Порт – это пачка однобитных каналов, каждый из которых может быть независимо настроен либо на ввод, либо на вывод.

В контроллере AT90s2313 два ПВВ – PortB и PortD.
PortB состоит из 8-ми каналов,
Portd – из 7-ми.

Эта «культяпость» порта D объясняется простой нехваткой ножек микросхемы. Просто разработчики очень хотели запихнуть все это дело в 20-ножный корпус, и поэтому урезали PortD на один канал.

Любая программа для контроллера начинается именно с настройки портов. Мы должны определить, какие каналы будут работать на ввод, какие – на вывод. По умолчанию, все каналы включены на ввод. Но это мы обсудим чуть позже...

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

--Поехали дальше-->>




Как вам эта статья?

Заработало ли это устройство у вас?

80 0 0
25 2 0