Автор работы: Пользователь скрыл имя, 24 Декабря 2012 в 22:23, курс лекций
К началу 70-х годов были созданы сложные системы. Возникла потребность в передаче части функций управления периферийным устройствам, расположенным рядом с объектом управления. К концу 60-х годов в технике стала проявляться тенденция к децентрализации управления. Для этого требовались недорогие, малогабаритные и надежные вычислители. С другой стороны электрическая промышленность к этому времени способна была производить интегральные микросхемы (ИМС) до 3-го уровня интеграции.
1. Введение, цели и задачи курса ……………………………………………………………… 3
2. Историческая справка …………………………………………………………………………. 4
3. Структурная организация типового микроконтроллера МК51 …………………………….. 7
4. Методология проектирования систем на основе МП и МЭВМ ……………………………. 8
Описание микроконтроллера C8051F310/311 ……………………………………………… 12
1. Краткий обзор ……………………………………………………………………………… 12
2. Предельно допустимые параметры ……………………………………………………… 24
3. Основные электрические параметры …………………………………………………… . 25
4. Описание корпусов и выводов …………………………………………………………… 26
5. 10-разрядный АЦП ………………………………………………………………………… 30
6. Источник опорного напряжения ………………………………………………………… 44
7. Компараторы …………………….………………………………………………………… 46
8.4. Режимы управления электропитанием ……………………………………………… 53
9. Источники сброса ………………………….……………………………………………… 55
10. Flash-память ……………………………………………………………………………… 60
11. Встроенная память XRAM ……………………………………………………………… 70
12. Генераторы …………………………………………………………….………………… 72
13. Порты ввода/вывода ……………………..……………………………………………… 76
14. SMBus ……………………………………..……………………………………………… 87
15. UART0 ……………………………………..……………………………………………… 103
16. Модуль расширенного SPI (SPI0) ……..……………………………………………… 111
17. Таймеры ……………………………………………………………………………………… 122
18. Программируемый массив счетчиков ……………………………………………………… 137
Список использованных источников ……………………………………………………………
9.7. Сброс от контроллера Flash-памяти
Если операции чтения/записи/стирания Flash-памяти или чтения памяти программ обращаются по некорректному адресу, то генерируется системный сброс. Это может быть вызвано одной из следующих причин:
- Попытка записать
или стереть Flash-память выше
пользовательского кодового
- Попытка прочитать
Flash-память выше
- Попытка прочитать память программ выше пользовательского кодового пространства. Это происходит в том случае, когда в программе пользователя встречается переход по адресу, расположенному выше адреса блокировки (0x7BFF).
- Доступ к Flash-памяти для операций чтения, записи или стирания ограничен с помощью опций защиты Flash-памяти (см. раздел «13.2. Защита Flash-памяти» на стр. 144).
- Попытка записи или стирания Flash-памяти осуществляется в тот момент, когда монитор питания отключен.
После сброса, вызванного некорректным обращением к Flash-памяти, устанавливается в 1 бит FERROR (RSTSRC.6). Этот сброс не влияет на состояние вывода /RST.
9.8. Программный сброс
Программа может вызвать сброс установкой в 1 бита SWRSF (RSTSRC.4). После сброса, вызванного программой, бит SWRSF будет читаться как ‘1’. Этот сброс не влияет на состояние вывода /RST.
10. Flash-память
Все МК содержат 16/8 Кб встроенной перепрограммируемой Flash-памяти, предназначенной для хранения программного кода и долговременного хранения данных. Flash-память может программироваться внутрисистемно по одному байту за раз через C2- интерфейс или программно с помощью команды MOVX. Если какой-либо бит Flash-памяти сброшен в 0, то для того, чтобы установить его в 1, его необходимо стереть. Байты перед программированием обычно стираются (устанавливаются в 0xFF). Временные интервалы операций записи и стирания, необходимые для корректной работы, устанавливаются автоматически аппаратными средствами (контроллером Flash-памяти). Во время выполнения операции записи или стирания Flash-памяти бит FLBUSY регистра FLSTAT устанавливается в 1 (см. SFR-описание 14.5). В течение этого времени команды, расположенные в буфере упреждающей выборки или в кэш-памяти программных ветвлений, могут выполняться, однако, если потребуется извлечь команду из Flash-памяти, то процессор будет остановлен до завершения операции записи или стирания.
Прерывания, которые уже загружены в кэш-память программных ветвлений, тоже могут быть обслужены в течение этого времени, но только в том случае, если текущий код также выполняется из буфера упреждающей выборки или из кэш-памяти программных ветвлений. Любые прерывания, которые не были предварительно загружены в кэш-память или которые произошли в то время, пока процессорное ядро было остановлено, будут удерживаться в отложенном состоянии в течение выполнения операций записи/стирания Flash-памяти и будут обслужены сразу же после окончания этих операции в порядке, определяемом их уровнями приоритета.
10.1. Программирование Flash-памяти
Самый простой способ программирования Flash-памяти заключается в использовании С2-интерфейса и средств программирования, предлагаемых фирмой Silicon Labs или независимыми производителями. Это единственный способ программирования неинициализированного МК. Подробная информация об использовании С2-команд для программирования Flash-памяти приведена в разделе « Интерфейс С2». Подробные указания, касающиеся записи/стирания Flash-памяти из программы, приведены в разделе «10.3. Указания относительно записи/стирания Flash-памяти».
Flash-память можно программировать программным путем, используя команду MOVX с адресом и байтом данных в качестве обычных операндов. Перед записью во Flash-память с использованием команды MOVX операции записи Flash-памяти необходимо разрешить установкой в 1 бита разрешения записи памяти программ PSWE (PSCTL.0). Это приведет к тому, что операции записи с помощью команды MOVX будут относиться не к памяти XRAM (как устанавливается по умолчанию), а к Flash-памяти. Бит PSWE остается установленным в 1 до сброса его программным путем. Чтобы предотвратить случайную запись во Flash-память, рекомендуется запрещать прерывания на все время, пока бит PSWE установлен в 1.
Для чтения данных Flash-памяти следует использовать команду MOVC. Считывать данные из Flash- памяти с помощью команды MOVX нельзя: чтение с использованием команды MOVX всегда относится к памяти XRAM, независимо от состояния бита PSWE.
Примечание: Для обеспечения целостности содержимого Flash-памяти встроенный монитор питания должен быть включен в любых системах, которые содержат процедуры, осуществляющие стирание и/или запись Flash-памяти из программы. Кроме того, не должно быть задержки между включением монитора питания и выбором монитора питания в качестве источника сброса. Любая попытка записать или стереть Flash-память в тот момент, когда монитор питания отключен, вызовет системный сброс по некорректному обращению к Flash-памяти.
С помощью операций записи во Flash-память можно сбросить в 0 биты, но нельзя установить их в 1. Только операция стирания может установить в 1 биты во Flash-памяти. Поэтому ячейку памяти, которую требуется запрограммировать, необходимо предварительно стереть, чтобы можно было записать в нее новое значение.
Управление временными интервалами операций записи и стирания осуществляется автоматически аппаратными средствами. Следует иметь ввиду, что в МК с Flash-памятью объемом 32 Кб зарезервирован блок памяти объемом 1024 байт, начинающийся с адреса 0x7C00. Операции записи/стирания ячеек Flash-памяти, расположенных в этой зарезервированной области, недопустимы.
10.1.1. Блокировка Flash-памяти и ключевой код
Функции блокировки и ключевого кода защищают Flash-память от операций записи и стирания из программы пользователя. Операции с Flash-памятью невозможны, если перед их выполнением не записать в регистр блокировки и ключевого кода Flash-памяти (FLKEY) корректные ключевые коды в определенной последовательности. Эти коды следующие: 0xA5, 0xF1. Длительность временного интервала между записью этих кодов не ограничена, но эти коды должны быть записаны в правильной последовательности. Если эти коды записаны в неверном порядке или если записаны неверные коды, то операции записи и стирания Flash- памяти будут запрещены до следующего системного сброса. Операции записи и стирания Flash-памяти будут запрещены также в том случае, если попытка записать или стереть Flash-память была произведена до корректной записи ключевых кодов. Блокировка Flash-памяти восстанавливается после каждой операции записи или стирания; следующая операция записи или стирания Flash-памяти возможна только после повторной записи ключевых кодов. Подробное описание регистра FLKEY приведено в SFR-описании 10.2.
10.1.2. Стирание страниц Flash-памяти из программы
Flash-память можно
с помощью команды MOVX будут относиться не к памяти XRAM, а к Flash-памяти);
последовательности. Бит PSWE остается установленным в 1 до сброса его программным путем.
С помощью операций записи во Flash-память можно сбросить в 0 биты, но нельзя установить их в 1; только операция стирания может установить в 1 биты во Flash-памяти. Поэтому ячейку памяти, которую требуется запрограммировать, необходимо предварительно стереть, чтобы можно было записать новое значение. Flash-память организована секторами (страницами) по 1024 байта. Операция стирания применяется ко всему сектору целиком (все байты в секторе устанавливаются в 0xFF). Ниже приведен алгоритм стирания 1024-байтной страницы Flash-памяти:
1. Запретить прерывания (рекомендуется).
2. Записать первый ключевой код в регистр FLKEY: 0xA5.
3. Записать второй ключевой код в регистр FLKEY: 0xF1.
4. Установить в 1 бит PSEE (PSCTL.1), чтобы разрешить стирание Flash-памяти.
5.Установить в 1 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на запись Flash-
памяти.
6. Используя команду MOVX, записать
байт данных в любую ячейку
внутри 1024-байтного сектора,
7. Сбросить в 0 бит PSEE, чтобы запретить стирание Flash-памяти.
8. Сбросить в 0 бит PSWE, чтобы перенаправить команды MOVX на память данных XRAM.
9. Снова разрешить прерывания.
10.1.3. Запись Flash-памяти из программы
Байты во Flash-память могут записываться по одному за раз или небольшими блоками. Бит CHBLKW в регистре CCH0CN (см. SFR-описание 14.1) определяет, сколько байт будет записываться во Flash-память в процессе операции записи: один байт или блок из нескольких байт. Если CHBLKW = 0, то Flash-память будет записываться по одному байту за раз. Если CHBLKW = 1, то Flash-память будет записываться четырехбайтными блоками. Блочная операция записи выполняется столько же времени, сколько и операция побайтной записи. Это позволяет сэкономить время при сохранении во Flash-памяти больших объемов данных. В ходе операции побайтной записи во Flash-память байты записываются индивидуально и запись во Flash-память будет выполняться после каждой команды записи MOVX.
Ниже приведен рекомендуемый алгоритм программирования Flash-памяти в побайтном режиме:
1. Запретить прерывания.
2. Сбросить в 0 бит CHBLKW (в регистре CCH0CN) для выбора побайтного режима записи.
3. Записать первый ключевой код в регистр FLKEY: 0xA5.
4. Записать второй ключевой код в регистр FLKEY: 0xF1.
5. Установить в 1 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на запись Flash-памяти.
6. Сбросить в 0 бит PSEE (PSCTL.1).
7. Используя команду MOVX, записать один байт данных в требуемую ячейку памяти.
8. Сбросить в 0 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на память данных XRAM.
9. Снова разрешить прерывания.
Шаги 3-8 необходимо повторять для каждого записываемого байта.
В ходе операции блочной записи во Flash-память процедура записи Flash-памяти будет выполняться только после записи (с помощью команды MOVX) последнего байта каждого блока. Размер записываемого во Flash-память блока составляет четыре байта (начиная с адресов, оканчивающихся на 00b, и заканчивая адресами, оканчивающимися на 11b). Операции записи должны выполняться последовательно (т.е. ячейки памяти с адресами, оканчивающимися на 00b, 01b, 10b и 11b, должны записываться подряд одна за другой).
Запись во Flash-память будет выполняться только после команды записи MOVX, которая адресует ячейку памяти с адресом, оканчивающимся на 11b. Если какие-либо ячейки в блоке не требуется обновлять при записи Flash-памяти, то следует записывать в них значение 0xFF.
Ниже приведен рекомендуемый алгоритм программирования Flash-памяти в блочном режиме:
1. Запретить прерывания.
2. Установить в 1 бит CHBLKW (в регистре CCH0CN) для выбора блочного режима записи.
3. Записать первый ключевой код в регистр FLKEY: 0xA5.
4. Записать второй ключевой код в регистр FLKEY: 0xF1.
5. Установить в 1 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на запись Flash-памяти.
6. Сбросить в 0 бит PSEE (PSCTL.1).
7. Используя команду MOVX, записать первый байт данных в первую ячейку блока (т.е. в ячейку с адресом, оканчивающимся на 00b).
8. Сбросить в 0 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на память данных XRAM.
9. Записать первый ключевой код в регистр FLKEY: 0xA5.
10. Записать второй ключевой код в регистр FLKEY: 0xF1.
11. Установить в 1 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на запись Flash-памяти.
12. Сбросить в 0 бит PSEE (PSCTL.1).
13. Используя команду MOVX, записать второй байт данных во вторую ячейку блока (т.е. в ячейку с адресом, оканчивающимся на 01b).
14. Сбросить в 0 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на память данных XRAM.
15. Записать первый ключевой код в регистр FLKEY: 0xA5.
16. Записать второй ключевой код в регистр FLKEY: 0xF1.
17. Установить в 1 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на запись Flash-памяти.
18. Сбросить в 0 бит PSEE (PSCTL.1).
19. Используя команду MOVX, записать третий байт данных в третью ячейку блока (т.е. в ячейку с адресом, оканчивающимся на 10b).
20. Сбросить в 0 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на память данных XRAM.
21. Записать первый ключевой код в регистр FLKEY: 0xA5.
22. Записать второй ключевой код в регистр FLKEY: 0xF1.
23. Установить в 1 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на запись Flash-памяти.
24. Сбросить в 0 бит PSEE (PSCTL.1).
25. Используя команду MOVX, записать
четвертый байт данных в
26. Сбросить в 0 бит PSWE (PSCTL.0), чтобы перенаправить команды MOVX на память данных XRAM.
27. Снова разрешить прерывания.