Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Кроме записи констант, наиболее часто EEPROM служит для хранения, например, заводского номера и названия прибора, фамилии конструктора-программиста или названия фирмы-изготовителя, и всякой другой полезной информации (ср. с данными, которые извлекает операционная система ПК при подсоединении plug&play устройства, например, через USB, в спецификациях которого наличие энергонезависимой памяти небольшого объема специально предусмотрено). Можно заполнять поле серийного номера, и вести базу выпущенных экземпляров.

Записывать все эти данные при начальной загрузке не всегда удобно. Кроме того, не забудем, что у нас осталась задача замены калибровочных констант после проведения калибровки. Во всех этих случаях данные для записи нужно получать извне (например, через последовательный порт UART) и записывать по мере их поступления. Напомним, что запись в EEPROM может протекать медленнее, чем получение данных через UART, поэтому правильная организация такой процедуры предусматривает буферизацию: полученные данные сначала всем массивом записываются в SRAM, а потом переносятся в EEPROM.

ГЛАВА 11
Программирование SPI
Общие принципы обмена по трехпроводному интерфейсу SPI мы уже разбирали в главе 3, и там же выяснили, что для различных по назначению устройств могут не совпадать не только названия выводов или самого интерфейса, но и протоколы обмена. На самом деле SPI, несмотря на все эти тонкости, самый простой из всех последовательных интерфейсов, т. к. реализует в чистом виде главную их идею: передавать в каждый момент времени один бит по одной последовательной линии. Идея восходит еще к телеграфу Морзе — наиболее помехоустойчивой линии связи из всех придуманных. SPI отличается тем, что это синхронный протокол: в нем по отдельной линии передаются тактовые импульсы, которые служат для точного определения момента отсчета бита данных. Простота его обуславливается еще и тем, что, как правило, SPI ведомых устройств могут работать на тактовых частотах от единиц мегагерц и выше, что сравнимо с тактовой частотой МК, поэтому в процессе передачи никаких специальных задержек не требуется. Использование интерфейса SPI описано, например, в "аппноте" 151 (правда, с примерами на IAR С, а не на ассемблере). Заметим, что универсальный последовательный интерфейс USI (которым снабжают некоторые модели Tiny) устроен еще проще, но мы его здесь разбирать не будем: дело в том, что в принципе любой последовательный протокол обмена может быть имитирован программно, и нередко это оказывается целесообразнее, чем применение штатных средств, даже если они присутствуют. И если имитировать UART без крайней необходимости не стоит (штатные средства управления им достаточно удобны и просты в использовании — см. главу 13), то в случае SPI программная имитация конкурирует по простоте с использованием аппаратных средств, и зачастую удобнее из-за совпадения выводов SPI программирования и обмена с устройствами, что может, например, помешать отладке системы.

Листинг 11.2 :
ldi temp, (1«SPE) + (1«MSTR)
out SPCR,temp
ldi temp, (1«SCK) + (1«M0SI) + (1«CS) + (1«PB4)
out DDRB,temp ;SCK,MOSI,CS, SS - выходы
sbi PORTB,CS ;сразу устанавливаем в 1
Листинг 11.3 иллюстрирует инициализацию в режиме 3 ("мастер", DORD = О — старший бит первым, SPRI и SPR0 = 0 — скорость f9J4).

Листинг 11.3
ldi temp, (l«SPE) + (l«MSTR) + (l«CPOL) + (l«CPHA)
out SPCR,temp
ldi temp, (l«SCK) + (l«MOSI) + (l«CS) + (l«PB4)
out DDRB,temp ;SCK,MOSI,CS,SS - выходы
/ ser temp ;OxFF
out PORTB,temp ;PB7..0 — высокий уровень, весь порт В

Процедура записи-чтения тогда будет выглядеть очень просто (листинг 11.4).

ЛИСТИНГ 11,4
WR_spi: ;запись-чтение SPI, в temp данные на входе и на выходе
out SPDR,temp /начать передачу wait_spi:
sbis SPSR,SPIF ;ожидаем конца передачи rjmp wait_spi
in temp,SPDR /чтение данных

ret



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru