Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Результаты опроса: Запуск "на коленке" часть 2. Что дальше будем обсмакивать?
RTC (часы реального времени) 119 11.41%
USB 540 51.77%
Базовые навыки работы с портами ввода-вывода 247 23.68%
АЦП 108 10.35%
ЦАП 29 2.78%
Голосовавшие: 1043. Вы ещё не голосовали в этом опросе

 
Опции темы
Непрочитано 13.11.2009, 23:23  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
Стрелка Re: Здравствуй, ARM. Запуск "на коленке"

Здравствуй, ARM. Запуск "на коленке". Часть 2
ARM и операции ввода-вывода

__________________________________________________ _________


Я открываю новую серию отчетов, в которых расскажу об устройстве адресного пространства ARM микроконтроллеров и операциях ввода-вывода.

Начнем с маленького введения.

Микроконтроллер — это составное устройство, которое помимо процессора содержит множество вкусной переферии прямо "на борту", всё в одной микросхеме.

Процессор в микроконтроллере занимается тем, что выполняет вычисления. Естественно, вычисления имеют смысл, только если они выполняются над данными. Следовательно, чтобы заставить процессор выполнять полезную работу нужно как-то эти данные уметь вводить в процессор и выводить из него.

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

Операции ввода-вывода кроме того, что должны уметь передавать данные, также должны знать откуда и куда эти данные получать. Поэтому одним из параметров при вызове операций ввода-вывода выступает порт. Порт — это адрес в системе ввода-вывода. Каждое внешнее для процессора устройство имеет свой "адрес". В "железе" под портом подразумевается совокупность ножек контроллера, которые доступны по соответствующему "адресу".

В следующем отчете я расскажу о том, как процессор АRM "видит" порты ввода-вывода и обменивается данными с ними.


Познавательная информация

Подобная концепция с портами свойственна не только процессорам, а носит ключевую роль в информационном мире. Например, если посмотреть на наручные механические часы, то можно сказать что табло это "порт" вывода, с помощью которого мы можем получать информацию о текущем времени. Ползунок — это "порт" ввода, покрутив который мы можем установить текущее время. Если бы часы были без табло и ползунка, то они были бы настолько же бесполезны с точки зрения их пользователя как и процессор без возможности выполнения операций ввода-вывода.
Миниатюры:
Нажмите на изображение для увеличения
Название: Watches_IO.png
Просмотров: 148
Размер:	100.6 Кб
ID:	2022  
Реклама:

Последний раз редактировалось alexgap; 14.11.2009 в 04:47.
alexgap вне форума  
Эти 20 пользователя(ей) сказали Спасибо alexgap за это сообщение:
aleksfas (22.10.2010), alexseyp (08.11.2010), ASU1956 (05.05.2010), bugmenot (02.12.2009), Djakovskij (07.01.2012), gdtron (28.09.2010), ibiza11 (18.08.2010), Maxim39 (15.02.2011), Monyak (27.11.2009), mousew1 (16.04.2010), muravskiy (14.11.2009), NurAnion (19.09.2010), revector (13.09.2010), trid'or (28.11.2009), ua4nfx (11.12.2009), Uz_Sleep_Walker (16.11.2009), ZED® (05.08.2010)
Непрочитано 14.11.2009, 19:54  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Рассматриваемые мной ARM процессоры принадлежат к ARM7TDMI семейству и с точки зрения программного обеспечения имеют архитектуру фон-Неймана*. Это означает, что и программа (флэш) и данные (ОЗУ) разделяют одно и то же адресное пространство. Т.е. инструкции доступа к любой памяти одни и те же.

Это очень контрастирует со многими 8-ми битными процессорами, такими как AVR, где эти инструкции различны для разных типов памяти. Такие процессоры имеют гарвардскую ахитектуру.

Разработчики ARM процессоров пошли еще дальше и сделали область ввода-вывода прямо в основном адресном пространстве. Т.е. доступ к портам ввода-вывода можно делать как и к обычной памяти, не нужно никаких специальных инструкций. Это прямое архитектурное наследие от процессора 6502 (который также использовался в приставках NES/Dendy, уверен, многие из вас в них играли ).

Полная карта адресного пространства для LPC2368 показана на картинке внизу. Размер пространства составляет 4 ГБ.

Должен сказать, что с точки зрения человека, пишущего программу, архитектура фон-Неймана и отображение портов ввода-вывода прямо в "память" — это большое облегчение! Кроме этого, компиляторам намного легче выполнять оптимизации по размещению данных в памяти, что часто приводит к более эффективным программам, по сравнению, скажем, с AVR.

Для наглядности я хочу привести пример кода, который показывает все, что нужно сделать чтобы обратится к порту в "голом" языке С для моего процессора LPC2368:

Код:
#define IOSET1 (*(volatile unsigned long *)(0xE0028014))
IOSET1 = 0x1;

Выглядит очень просто: устанавливается 32-х битное беззнаковое значение (unsigned long) по адресу памяти 0xE0028014. Ключевое слово volatile говорит компилятору, чтобы он знал, что значение в данной ячейке "памяти" может изменится без его ведома и не делал оптимизаций по этому поводу.

Объявление портов не нужно делать самому, обычно они уже доступны в заготовленном заголовочном файле. Вот как обычно выглядит программа, которая хочет обращаться к портам:

Код:
#include ‹LPC23xx.h›  /* Заготовленные определения для LPC23хх */

int main()
{
    IOSET1 = 0x1;  /* Записываем 1 в порт IOSET1 */
    return 0;
}

В следущем отчете я расскажу о вводе-выводе общего назначения (GPIO / General Purpose Input-Output).

___________________________

* Формально ARM процессоры имеют модифицированную гарвардскую архитектуру, которая позволяет в себе сочетать удобство архитектуры фон-Неймана для программиста, и высокую скорость обработки данных, которая изначально была присуща классической гарвардской архитектуре.

_
Миниатюры:
Нажмите на изображение для увеличения
Название: LPC23xx_Memory_Map.png
Просмотров: 655
Размер:	24.8 Кб
ID:	2033  

Последний раз редактировалось alexgap; 15.11.2009 в 00:39.
alexgap вне форума  
Эти 21 пользователя(ей) сказали Спасибо alexgap за это сообщение:
bosco (26.01.2010), bugmenot (02.12.2009), Daddy_Karlo (28.12.2009), Djakovskij (07.01.2012), FreshManGood (03.01.2015), gdtron (28.09.2010), mousew1 (19.04.2010), muratik (14.11.2009), muravskiy (14.11.2009), nnmkayf (08.12.2009), Pavel55 (14.01.2011), savarez (14.11.2009), sytyi (20.02.2011), ua4nfx (17.11.2009), Uz_Sleep_Walker (16.11.2009), xerox2 (14.11.2009)
Непрочитано 16.11.2009, 10:09  
Gerbicid
Прописка
 
Аватар для Gerbicid
 
Регистрация: 04.08.2008
Сообщений: 203
Сказал спасибо: 33
Сказали Спасибо 75 раз(а) в 58 сообщении(ях)
Gerbicid на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Уважаемые!
Этот топик для начинающих армоводов. Здесь не место для обсуждения какой контроллер лучше или хуже. Заведите ветку про сравнение и применение различных конроллеров там и обсуждайте. Лично мне было бы здорово сделать миникомп на ARM с небольшим LCD монитором, флэш памятью и зашитым интерпретатором Бейсик.
Что бы без компа можно было написать простейшую прогу на бейсике.
Нужен АЦП, написал что то типа A=InputADC(...) и получил результат. Нужен шим, OpenPWM(....), и т.д. по устройствам. Производительности и памяти долджно хватить.

Последний раз редактировалось Gerbicid; 16.11.2009 в 19:50.
Gerbicid вне форума  
Сказали "Спасибо" Gerbicid
Dmitri_256 (11.03.2011)
Непрочитано 16.11.2009, 15:36  
Snacker
Временная регистрация
 
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
Snacker на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Сообщение от Andreisela Посмотреть сообщение
Народ, а есть чтото под эти МК типа как CodeVisionAVR под AVRки? тоесть конкретно - интересует генератор начального кода, поначалу им пользовался направо и налево и оч привык - да и это сильно уменьшает время зарзаботки ПО.
В Keil я чтото этого найти несмог, если оно там есть - просто ткните носом

Да я себе взял плату с LPC2388 на борту
Блин, постил же ссылку на примеры кодов. Ладно, еще раз запощу - зип архив с примерами. Качайте, и начинайте свой проект комбинируя код из различных примеров. Все примеры под Кейл. Особой надобности именно в генераторе кода не вижу, все равно код придется ручками править под свои нужды.

Сообщение от Roman_V Посмотреть сообщение
...Хотелось бы хотелось видеть четкие примеры кода работы с портами, периферии...
См. выше в этом посте.

Последний раз редактировалось Snacker; 16.11.2009 в 15:50.
Snacker вне форума  
Сказали "Спасибо" Snacker
dimka11 (16.11.2009)
Непрочитано 16.11.2009, 17:46  
ua4nfx
Частый гость
 
Аватар для ua4nfx
 
Регистрация: 15.09.2008
Сообщений: 26
Сказал спасибо: 33
Сказали Спасибо 16 раз(а) в 1 сообщении
ua4nfx на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Статья автора ветки в формате ебук
http://www.alanta.su/ircstat/arm/ARM_Help.rar
будет пополняться, периодически проверяйте обновление архива
__________________
73! Алексей

Последний раз редактировалось ua4nfx; 17.11.2009 в 10:16.
ua4nfx вне форума  
Эти 16 пользователя(ей) сказали Спасибо ua4nfx за это сообщение:
CERGEI1982 (16.11.2009), eitch (20.11.2009), gdtron (28.09.2010), gogin79 (04.12.2009), makser1 (25.08.2011), Mike_ELC (17.11.2009), Mixer79 (17.11.2009), movel22 (26.11.2010), nikcher-65 (31.08.2010), realadmin666 (16.11.2009), revector (13.09.2010), Snacker (16.11.2009), surf148 (21.11.2009), wasp (17.11.2009), Wlad1 (16.11.2009)
Непрочитано 17.11.2009, 04:37  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

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

Аббревиатурой GPIO в архитектуре ARM принято обозначать все порты ввода-вывода, которые доступны в виде ножек микроконтроллера и могут делать две вещи:
  1. Быть входом для цифрового сигнала, который можеть иметь значениe "0" или "1"
  2. Служить выходом для цифрового сигнала, т.е. выдавать "0" или "1"

Те, кто знаком с микроконтроллерами вроде PIC и AVR, уже знают что такое GPIO, несмотря на то, что там этот термин не используется.

Вообщем, GPIO - это совокупность самых простых портов ввода-вывода, которые оперируют только цифровыми сигналами. Эти порты могут как получать сигнал, так и выдавать его, т.е. они могут работать как и на вход, так и на выход.

В 1980-х годах был широко распространен чип КР580ВВ55, который является интерфейсной микросхемой ввода-вывода, и его сейчас смело можно было бы назвать "драйвером GPIO". Это было давненько и многое изменилось с тех пор. Современные микроконтроллеры уже содержат подобие такого чипа внутри, и наружу выходят ножки, которые непосредственно готовы к работе в роли портов.

Микроконтроллеры ARM содержат некоторое количество ножек GPIO, зависящее от "размера" и предназначения микроконтроллера. Например, в моем 100-пиновом LPC2368 таких ножек 70. Это означает, например, что я могу к нему подключить 70 светодиодов и произвольно мигать ими без какой-либо дополнительной переферии (ну разве что гасящие резисторы чтобы ограничить ток через светодиоды).

В следующем отчете я обязательно расскажу о нумерации портов в микроконтроллерах LPC2XXX и о регистре направления ввода-вывода.
alexgap вне форума  
Эти 14 пользователя(ей) сказали Спасибо alexgap за это сообщение:
Djakovskij (07.01.2012), FreshManGood (03.01.2015), gdtron (28.09.2010), Highlander (22.12.2010), lanceloth (22.02.2010), mousew1 (19.04.2010), NurAnion (19.09.2010), savarez (18.11.2009), ua4nfx (17.11.2009), Uz_Sleep_Walker (17.11.2009), ZED® (05.08.2010), Zeman1979 (07.10.2010)
Непрочитано 18.11.2009, 11:24  
hostel6psu
Частый гость
 
Регистрация: 23.08.2007
Сообщений: 27
Сказал спасибо: 1
Сказали Спасибо 28 раз(а) в 13 сообщении(ях)
hostel6psu на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Если кому FAQ по Keil нужен на русском
http://onembedding.bialix.com/tools/keil/faq/
hostel6psu вне форума  
Эти 15 пользователя(ей) сказали Спасибо hostel6psu за это сообщение:
Alexey_1811 (18.11.2009), Andreisela (19.11.2009), Beduin (23.11.2009), bugmenot (02.12.2009), Gn0me (18.11.2009), gogin79 (04.12.2009), Mixer79 (18.11.2009), mousew1 (19.04.2010), muravskiy (19.11.2009), noxyucm (27.11.2012), rear (18.11.2009), ua4nfx (19.11.2009)
Непрочитано 19.11.2009, 11:55  
kobzar
Частый гость
 
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
kobzar на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Доброго времени суток форумчанам. Прочитал ветку и загорелся - давно собирался пощупать АРМ. Посидел немного и слепил в кейле проектик на 2138 камне с симуляцией в протеусе 7.5-3: собственно камень с прикрученным ЖКИ от 3310 (портировал с пиков). Как рыба (заготовка) - можно лепить свой код и комментить на жки. Если кому интересно - могу выложить
kobzar вне форума  
Непрочитано 19.11.2009, 11:59  
Andreisela
Прописка
 
Регистрация: 21.10.2006
Сообщений: 147
Сказал спасибо: 66
Сказали Спасибо 24 раз(а) в 10 сообщении(ях)
Andreisela на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Сообщение от kobzar Посмотреть сообщение
Доброго времени суток форумчанам. Прочитал ветку и загорелся - давно собирался пощупать АРМ. Посидел немного и слепил в кейле проектик на 2138 камне с симуляцией в протеусе 7.5-3: собственно камень с прикрученным ЖКИ от 3310 (портировал с пиков). Как рыба (заготовка) - можно лепить свой код и комментить на жки. Если кому интересно - могу выложить
Обязательно выкладывайте, очень интересно, кстати, попробовал переделать прогу Александра(моргание светиком) тока под камень 2388 - заработало
Andreisela вне форума  
Непрочитано 19.11.2009, 12:07  
kobzar
Частый гость
 
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
kobzar на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Собственно в архиве все. Исходник и модель. Изначально лежало в папке C:\Keil\ARMwork\Proba1\. Исходник на Си - интуитивно понятен С помошью putstr() можно писать чего угодно.
ЗЫ: слеплено быстро, просьба не пинать
Вложения:
Тип файла: rar Proba1.rar (104.4 Кб, 513 просмотров)
kobzar вне форума  
Эти 11 пользователя(ей) сказали Спасибо kobzar за это сообщение:
Andreisela (20.11.2009), bugmenot (02.12.2009), gogin79 (04.12.2009), mousew1 (19.04.2010), nikcher-65 (31.08.2010), noxyucm (27.11.2012), ua4nfx (19.11.2009), werty_063 (23.02.2010)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:49.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot