Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 1 2. Интерфейс SPI 333 ключить через резистивные делители 3 : 2 (например, 3 ,3 кОм + 6, 8 кОм) или микро схему-согласователь уровней (о них говорилось в главе 4). Как вы знаете, выводы аппаратного SPI практически во всех моделях МК АVR сов падают с SРI-интерфейсом программирования . Поэтому запускать даже в прове рочном режиме работу SPI сразу после включения было бы неправильно - нужно хотя бы дать возможность отключить программатор. В нашем случае мы сделаем так, чтобы работа начиналась при нажатии кнопки Кн 1 . Отметьте, что выводы WP (Write Protection, защита от записи) и RESET микро схемы 45DB0 1 1 B в рассматриваемом случае не задействованы и присоединены к высокому уровню напряжения . П рограмма о б мена с памятью 45DB01 1 В по SPI Полностью текст программы обмена с памятью 45DB0 1 1 B по SPI вы можете найти в архиве, адрес которого указан во введении (файл rw45DB01 1 B.asm ). Программа на писана на основе примера (модифицированного и с исправленными неточностями), описанного в [ 1 7] . Программа громоздкая, потому приводить ее здесь даже фраг ментами я не буду, рассмотрим только основные моменты, остальное вы найдете в комм�нтариях в тексте программы. По прерыванию от кнопки Кн l мы запускаем ТimerO, который будет служить сред ством антидребезга и одновременно защиты от слишком частых нажатий на кноп ку: прерывания от кнопки будут сразу запрещаться, а в прерывании таймера по ис течении времени в 1 с разрешаться опять (для отсчета одной секунды мы заведем счетчик переполнений, который при тактовой частоте 4 МГц и коэффициенте 1 :256 должен считать до 6 1 ) . В этом же прерывании будем запускать процедуры записи (write) и чтения ( read) с последующей выдачей результата «наружу» через UART (операция out_com, она рассмотрена в главе 15) . Процедуры эти здесь в значительной степени демонстрационные : мы будем запол нять 256 байтов в буфере, начиная с нулевого адреса, значением счетчика ( count ) этих же байтов, т. е. последовательными возрастающими значениями, начиная с нуля. На схеме рис. 1 2 .2 указаны для подключения к адаптеру оба вывода UART (RxD и TxD) - на случай, если вы захотите попробовать модифицировать про грамму так, чтобы она работала в более приближенном к практике режиме : записы вала во флеш-память данные из последовательного порта. После операции записи в буфер всех 256 байтов следует операция переноса буфера в страницу памяти (для примера произвольно выберем страницу с адресом 1 0 0) . Для проверки бита 7 (RDY/BUSY) в регистре статуса микросхемы 45DB0 1 1 B мы орга низуем замкнутый цикл чтения этого регистра до момента установки этого бита в единичное состояние . ЗАМЕТКИ НА ПОЛЯХ Это весьма опасный момент - если связь с памятью прервется , то программа «по виснет» , - но, как мы говорили ранее, такое часто встречается в практике програм мирования МК. Ведь если память окажется с дефектом, то, скорее всего, и все уст-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==