Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Низкоуровневая запись в EEPROM на Си ⇐ ПредыдущаяСтр 5 из 5
Рассмотрим вариант низкоуровневой работы с EEPROM, то есть без использования встроенных макросов/функций компиляторов. Процедура записи в EEPROM состоит из следующих шагов: 1. Ожидаем готовности EEPROM, опрашивая бит EEWE регистра EECR. 2. Устанавливаем адрес в регистре EEAR. 3. Записываем байт данных в регистр EEDR. 4. Устанавливаем основной флаг разрешения записи EEMWE регистра EECE. 5. Устанавливаем флаг разрешения записи EEWE регистра EECE. Необходимо учитывать, что запись в EEPROM не может производиться одновременно с записью во флэш-память. Если в проекте микроконтроллер обращается к флэш-памяти, то перед записью данных в EEPROM, необходимо проверить флаг SPMEN регистра SPMCR. Он должен быть сброшен в ноль. Также необходимо учесть, что флаг EEWE должен быть установлен в течение 4 циклов после флага EEMWE. Если в проекте используются прерывания, то на каком-то из этапов, этой последовательности, их нужно запрещать. Это можно сделать или в самом начале или перед установкой флага EEMWE. В Си коде описанная последовательность будет выглядеть так: while (EECR & (1< < EEWE)); EEAR = adr; EEDR = value; EECR |= (1< < EEMWE); EECR |= (1< < EEWE); где adr- это адрес байта в EEPROM, value - данные для записи, EEAR - 16-ти разрядный регистр адреса. Использовать абсолютный адрес байтов EEPROM неудобно и чаще всего адрес берется у переменной, объявленной в EEPROM. Код в этом случае будет таким: while (EECR & (1< < EEWE)); EEAR = (int) & data; EEDR = value; EECR |= (1< < EEMWE); EECR |= (1< < EEWE); Низкоуровневое чтение из EEPROM на Си Процедура чтения EEPROM состоит из следующих шагов: 1. Ожидаем готовность EEPROM, опрашивая бит EEWE регистра EECR. 2. Устанавливаем адрес в регистре EEAR. 4. Устанавливаем флаг разрешения чтения EERE регистра EECR. 5. Считываем содержимое регистра данных EEDR. На Си описанная последовательность будет выглядеть так: while (EECR & (1< < EEWE)); EEAR = adr; EECR |= (1< < EERE); value = EEDR; Доступ к объявленной в EEPROM переменной: while (EECR & (1< < EEWE)); EEAR = (int) & data; EECR |= (1< < EERE); value = EEDR;
Упражнение 1. Задача. К выводу 0 порта B микроконтроллера ATmega32 подключен светодиод. Написать программу мигания светодиода с задержкой 250 мс и запустить программу на отладку в AVR Studio. Рабочая частота МК 4 МГц. Создать новый проект в среде программирования Code Vision AVR. Рис. 1.9. Создание проекта в Code Vision AVR Воспользоваться Code Wizard AVR для автоматической генерации кода. Рис. 1.10. Использовать мастер генерации кода Рис. 1.11. Тип МК – ATmega
Указать мастеру устройство ATmega32. Рис. 1.12. Выбор чипа МК Вывод 0 порта B определить как Output. Рис. 1.13. Конфигурация порта В Сгенерировать данные настройки. Рис. 1.14. Генерация настроек Сохраняем сгенерированные файлы: < Name>.c, < Name>.prj, < Name>.cwp Рис. 1.15. Сохранение *.c файла Рис. 1.16. Сохранение *.prj файла Рис. 1.17. Сохранение *.cwp файла В появившемся сгенерированном коде добавить подключение библиотеки прерываний, то есть дописать строку #include < delay.h>. В бесконечном цикле добавить строки: PORTB.0 = 1; delay_ms(250); PORTB.0 = 0; delay_ms(250); Скомпилировать проект, нажав кнопку – Build all project files.
Если нет ошибок, то запустить отладку, нажав кнопку – Run the debugger. В открывшемся окне AVR Studio 4, нажать кнопку “Open”. В нужной директории выбрать файл с расширением.COFF. Затем появится окно, в котором будет предложено сохранить файл отладки с именем < Имя_файла> _cof. Нажать кнопку «Сохранить». Далее, будет предложено выбрать отладочную платформу и устройство. Выбрать AVRSimulator и ATmega32 соответственно. Нажать кнопку “Finish”. Задачи на самостоятельную работу: 1. Реализовать побитовую конъюнкцию числа, записанного в порт А, и «1», сдвинутой влево на пять разрядов. Инвертировать результат и записать в порт С. Порт А сконфигурировать как вход, порт С – как выход. Использовать МК ATmega32 с частотой кварца 4МГц. 2. Число, поступающее в порт В записать в память EEPROM. Из памяти это число передать в порт С, а EEPROM-адрес этого числа записать в порт А. Порт В сконфигурировать как вход, порты А и С – как выходы. Использовать МК ATmega32 с частотой кварца 4МГц. Контрольные вопросы: 1) Какое ПО (программное обеспечение) используется для написания кода и получения.hex файла в данной лабораторной работе? 2) Какие файлы формируются после компиляции программы? Какие из них нам необходимы в данной лабораторной работе? 3) Что такое МК, сфера его применения? 4) Регистры портов МК. Назначение. 5) Виды ПО для МК 6) Виды эмуляторов для тестирования программ МК. Отличия. 7) RAM/ROMпамять. Назначение. 8) SRAMпамять. Назначение. 9) FLASHпамять. Назначение. 10) EEPROMпамять. Назначение. Регистры EEPROM. Какой регистр используется для записи/чтения из EEPROM? 11) Регистровая память. Назначение.
Список использованных источников: 1. Радио-ежегодник, PROTEUS по-русски, 2013 г. 2. Моршнев В.В., Оценка и анализ эффективности архитектуры микроконтроллеров. - «Числом гармонию измерить». – 28 с. 3. Белов А.В., Создаем устройства на микроконтроллерах. – СПб.: Наука и Техника, 2007. – 304 с.: ил. 4. Лебедев М.Б., CodeVisionAVR: пособие для начинающих. – М.: Додэка – ХХI, 2008. – 592 с.: ил. 5. Роман Абраш, Справочный материал «Книга по работе с WinAVR и AVR Studio» г. Новочеркасск. Выпуск № 4, 2010. – 5 с. 6. Роман Абраш, Справочный материал «Книга по работе с WinAVR и AVR Studio» г. Новочеркасск. Выпуск № 5, 2010. – 4 с. 7. Роман Абраш, Справочный материал «Книга по работе с WinAVR и AVR Studio» г. Новочеркасск. Выпуск № 8, 2010. – 5 с.
|
Последнее изменение этой страницы: 2019-10-05; Просмотров: 333; Нарушение авторского права страницы