F40-43a (1041604), страница 33
Текст из файла (страница 33)
рис. 15.31) представляет собой функцию защиты, котораязащищает патентованный программный код и данные от прочтения программой, запущенной на МКC8051F040/1/2/3. Эта функция обеспечивает поддержку ОЕМ-производителей, которые передраспространением МК желают запрограммировать их дополнительным программным обеспечением,являющимся собственностью фирмы.
При этом фирменное программное обеспечение будет защищено, а воставшееся пространство памяти программ можно позднее запрограммировать дополнительный код.Граница области, доступной для программного чтения (Software Read Limit - SRL), представляет собой16-битный адрес, который делит пространство памяти программ на два логических раздела. Первый из нихявляется верхним разделом и состоит из всех ячеек памяти программ, находящихся выше адреса SRL (включаяи сам адрес SRL).
Второй является нижним разделом и состоит из всех ячеек памяти программ с адресами от0x0000 до SRL адреса (не включая сам адрес SRL). Программа, запущенная в верхнем разделе, можетисполнять код из нижнего раздела, но ей запрещено читать ячейки из нижнего раздела, используя командуMOVC. (Выполнение команды MOVC из верхнего раздела с адресом источника, указывающим на нижнийраздел, всегда в качестве результата будет возвращать значение 0x00.) Программа, запущенная в нижнемразделе, может обращаться к ячейкам памяти как из верхнего, так и из нижнего разделов без ограничений.Дополнительные встроенные фирменные программы следует размещать в нижнем разделе.
При сбросеуправление передается этим программам через вектор сброса. Как только завершится процесс начальнойинициализации, произойдет переход по предопределенному адресу в верхнем разделе. Программа, запущеннаяв верхнем разделе, может выполнять программный код из нижнего раздела, если известны точки входа, но неможет прочитать содержимое нижнего раздела. Программному коду, запущенному в нижнем разделе,параметры могут передаваться следующим образом:- параметры размещаются в стеке до вызова программного кода из нижнего раздела;- параметры размещаются в регистрах внутреннего ОЗУ до вызова программного кода из нижнегораздела;- параметры размещаются в определенных ячейках памяти в верхнем разделе.Адрес SRL задается в регистре ограничения доступа к Flash-памяти (FLACL).
16-разрядный SRL адресвычисляется как 0xNN00, где NN представляет собой содержимое регистра FLACL. Таким образом, адрес SRLможно задать в любом месте пространства памяти программ на границах 256-байтных секторов. Однако, 512байтный размер сектора стирания требует использовать в качестве адреса SRL границы 512-байтных секторов.При сбросе в регистр FLACL по умолчанию записывается 0x00, устанавливая тем самым адрес SRL 0x0000 иразрешая доступ по чтению ко всем ячейкам памяти программ.Рисунок 15.2. FLACL: Регистр ограничения доступа к Flash-памятиR/WR/WR/WR/WR/WR/WR/WR/WБит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:00000000Бит 7SFR Адрес: 0xB7SFR страница: FБиты 7-0: FLACL: Адрес границы программно-доступной области Flash-памяти.Этот регистр содержит старший байт 16-разрядного адреса границы области памяти программ, доступнойдля операций чтения/записи/стирания.
Значение полного 16-разрядного адреса ограничения доступарассчитывается как 0xNN00, где NN заменяется содержимым регистра FLACL. Запись в этот региструстанавливает адрес границы программно-доступной области Flash-памяти. Этот регистр может бытьзаписан только один раз после сброса. Все последующие попытки записать этот регистригнорируются до следующего сброса.Ред. 1.3172C8051F040/1/2/3Рисунок 15.3. FLSCL: Регистр управления контроллером Flash-памятиR/WFOSER/WFRAER/WЗарезерв.R/WЗарезерв.R/WЗарезерв.R/WЗарезерв.Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2R/WЗарезерв.Бит 1R/WFLWEБит 0Значениепри сбросе:10000000SFR Адрес: 0xB7SFR страница: 0Бит 7: FOSE: Включение ждущего таймера модуля Flash-памятиЭто таймер, который отключает усилитель считывания после операций чтения Flash-памяти.0: Ждущий таймер модуля Flash-памяти выключен.1: Ждущий таймер модуля Flash-памяти включен.Бит 6: FRAE: Разрешение постоянного чтения Flash-памяти0: Чтением Flash-памяти управляет ждущий таймер.1: Flash-память всегда в режиме чтения.Биты 5-1: Зарезервированы.
Читаются как 00000b. В эти биты следует записать значение 00000b.Бит 0: FLWE: Разрешение записи/стирания Flash-памяти.Чтобы разрешить запись/стирание Flash-памяти из программы пользователя, необходимоустановить этот бит в 1.0: Операции записи/стирания Flash-памяти запрещены.1: Операции записи/стирания Flash-памяти разрешены.173Ред. 1.3C8051F040/1/2/3Рисунок 15.4. PSCTL: Регистр управления записью/стиранием памяти программR/WБит 7R/W-R/W-R/W-R/W-R/WSFLER/WPSEER/WPSWEБит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:00000000SFR Адрес: 0x8FSFR страница: 0Биты 7-3: Не используются.
Читаются как 00000b.Бит 2: SFLE: Разрешение доступа к сверхоперативному сектору Flash-памяти.Когда этот бит установлен в 1, операции чтения и записи Flash-памяти, выполняемые из программыпользователя, относятся к 128-байтному сверхоперативному сектору Flash-памяти. Если SFLE = 1, тоне следует пытаться обращаться по адресам Flash-памяти за пределами диапазона 0x00 – 0x7F.Чтение/запись ячеек памяти за пределами этого диапазона приведет к неопределенному результату.0: При обращении к Flash-памяти из программы пользователя происходит обращение к 64-Кбайтномусектору Flash-памяти программ/данных.1: При обращении к Flash-памяти из программы пользователя происходит обращение к 128-байтномусверхоперативному сектору Flash-памяти.Бит 1: PSEE: Разрешение стирания памяти программ.Установка этого бита разрешает стереть целую страницу Flash-памяти программ при условии,что бит PSWE также установлен.
После установки этого бита запись во Flash-память сиспользованием команды MOVX сотрет целую страницу, которая содержит ячейку, адресуемуюкомандой MOVX (значение записываемого байта данных не важно).0: Стирание Flash-памяти программ запрещено.1: Стирание Flash-памяти программ разрешено.Бит 0: PSWE: Разрешение записи памяти программ.Установка этого бита разрешает запись байта данных во Flash-память программ, используякоманду MOVX .
Адресуемая в команде MOVX ячейка памяти должна быть стертой.0: Запись во Flash-память программ запрещена.1: Запись во Flash-память программ разрешена.Ред. 1.3174C8051F040/1/2/316. ИНТЕРФЕЙС ВНЕШНЕЙ ПАМЯТИ И ВСТРОЕННАЯ ПАМЯТЬXRAM.МК C8051F040/1/2/3 включают 4 Кбайт встроенного ОЗУ, отображенные в пространстве внешнейпамяти данных, а также интерфейс внешней памяти данных (external memory interface – EMIF), который можетиспользоваться для доступа к внешней (не встроенной) памяти и отображенным на память устройствам,подсоединенным к портам ввода/вывода общего назначения.
Доступ к пространству внешней памятиосуществляется либо с использованием команды MOVX и указателя данных DPTR, либо с использованиемкоманды MOVX с косвенным режимом адресации (используя регистры R0 и R1). Если команда MOVXиспользуется с 8-битным операндом адреса (например, @R1), то старший байт 16-битного адреса берется изрегистра управления интерфейсом внешней памяти EMI0CN (см. рис.16.1). Примечание: команда MOVXтакже используется для записи во Flash-память (см. раздел 15). По умолчанию команда MOVXобращается к памяти XRAM.
EMIF можно настроить таким образом, чтобы сигналыадреса/данных/управления появлялись либо на младших портах ввода/вывода (Р0 – Р3), либо на старшихпортах ввода/вывода (Р4 – Р7).16.1. Доступ к памяти XRAMДля доступа к пространству памяти XRAM используется команда MOVX. Команда MOVX имеет двеформы, причем обе используют косвенный режим адресации. В первой форме используется 16-разрядныйуказатель данных (DPTR), содержащий полный адрес ячейки памяти XRAM, которую требуется прочитать илизаписать.
Во второй форме для получения полного адреса ячейки памяти XRAM используются регистры R0 илиR1 в комбинации с регистром EMI0CN. Ниже приведены примеры использования команды MOVX в обоихформах.16.1.1. Пример использования команды MOVX с 16-разрядным адресомКоманда MOVX в 16-разрядной форме обращается к ячейке памяти, на которую указывает содержимоерегистра DPTR. Следующая последовательность команд осуществляет чтение байта по адресу 0х1234 ваккумулятор А:MOV DPTR, #1234h ; загрузка в DPTR 16-разрядного адреса 0х1234MOVX A, @DPTR; загрузка содержимого ячейки памяти с адресом 0х1234 в аккумулятор АВ приведенном выше примере регистр DPTR загружается сразу 16-разрядным значением адреса(используя команду MOV).
Кроме этого, к регистру DPTR можно обращаться через SFR регистры DPH,который содержит старшие 8 бит DPTR, и DPL, который содержит младшие 8 бит DPTR.16.1.2. Пример использования команды MOVX с 8-разрядным адресомКоманда MOVX в 8-разрядной форме использует содержимое регистра EMI0CN, чтобы определитьстаршие 8 бит полного адреса, по которому происходит обращение, и содержимое регистров R0 или R1, чтобыопределить младшие 8 бит полного адреса.