F20-23 (1041603), страница 28
Текст из файла (страница 28)
Например, если требуется частота 100кГц, томожно взять R = 246кОм и C = 50пФ:f = 1.23(103)/RC = 1.23(103) / [246 * 50] = 0.1МГц = 100кГцXFCN ≥ log2(f/25кГц)XFCN ≥ log2(100кГц/25кГц) = log2(4)XFCN ≥ 2, или код 01014.3. Пример использования внешнего генератора с конденсаторомЕсли бы для генерации системной тактовой частоты МК использовался внешний конденсатор, то схемабыла бы такой, как показано на рис.14.1, вариант 3. Емкость конденсатора должна быть не более 100пФ, однакоиспользование конденсатора с очень маленькой емкостью (менее 20пФ) приведет к увеличению погрешностиустановки частоты вследствие влияния паразитной емкости печатной платы. Чтобы определить значение битовуправления частотой внешнего генератора (XFCN) регистра OSCXCN, сначала необходимо выбрать емкостьиспользуемого конденсатора и вычислить частоту генерации из уравнения, приведенного ниже.
Например, дляAV+ = 3.0В и C = 50пФ получим:f = KF / (C * AV+) = KF / (50 * 3)f = KF / 150Если требуется получить частоту около 90кГц, то из таблицы на рис.14.3 необходимо выбрать KF = 13:f = 13 /150 = 0.087МГц, или 87кГцПоэтому, значение битов XFCN для этого примера составляет 011b.Ред. 1.4138C8051F020/1/2/315. FLASH-ПАМЯТЬМК C8051F020/1/2/3 содержат 64k + 128 байт встроенной перепрограммируемой Flash-памяти дляхранения программного кода и долговременного хранения данных. Flash-память может программироватьсявнутрисистемно по одному байту за раз посредством JTAG-интерфейса или из программы. Если Flash-битсброшен в 0, то для того, чтобы установить его в 1, его необходимо стереть. Байты перед программированиемобычно стираются (устанавливаются в 0xFF). Временные интервалы операций записи и стирания, необходимыедля корректной работы, устанавливаются автоматически аппаратными средствами.
Опрос данных дляопределения завершения операции записи/стирания не требуется. Электрические параметры Flash-памятиприведены в таблице 15.1.15.1. Программирование Flash-памятиСамый простой способ программирования Flash-памяти заключается в использовании JTAGинтерфейса и средств программирования, предлагаемых фирмой Silicon Labs или независимымипроизводителями. Это единственный способ программирования неинициализированного МК. Подробнаяинформация об использовании JTAG команд для программирования Flash-памяти приведена в разделе 24.2.Flash-память можно программировать программным путем, используя команду MOVX с адресом ибайтом данных в качестве обычных операндов.
Перед записью во Flash-память с использованием командыMOVX операции записи Flash-памяти необходимо разрешить установкой в 1 бита разрешения записи памятипрограмм PSWE (PSCTL.0). Это приведет к тому, что операции записи с помощью команды MOVX будутотноситься не к памяти XRAM, а к Flash-памяти. Бит PSWE остается установленным в 1 до сброса егопрограммным путем. Чтобы предотвратить случайную запись во Flash-память, рекомендуется запрещатьпрерывания на все время, пока бит PSWE установлен в 1.Для чтения Flash-памяти можно использовать команду MOVC.
Чтение с использованием командыMOVX всегда относится к памяти XRAM, независимо от состояния бита PSWE.Чтобы гарантировать целостность содержимого Flash-памяти, строго рекомендуется включитьсхему слежения за напряжением питания, соединив вывод MOVEN с шиной питания VDD. Это касаетсялюбых систем, которые содержат код, осуществляющий запись/стирание Flash-памяти программнымпутем.Запись во Flash-память может сбросить в 0 биты, но не может установить их в 1. Только операциястирания может установить в 1 биты во Flash-памяти.
Поэтому ячейку памяти, которую требуетсязапрограммировать, необходимо предварительно стереть, чтобы можно было записать новое значение.64-Кбайтная Flash-память организована секторами по 512 байт. Операция стирания применяется ко всемусектору целиком (все байты в секторе устанавливаются в 0xFF). Ниже приведен алгоритм программированияFlash-памяти программным путем:1. Запретить прерывания.2. Установить в 1 бит FLWE (FLSCL.0) для разрешения записи/стирания Flash-памяти программным путем.3. Установить в 1 бит PSEE (PSCTL.1) для разрешения стирания Flash-памяти.4. Установить в 1 бит PSWE (PSCTL.0) для перенаправления действия команд MOVX на запись Flash-памяти.5.
Использовать команду MOVX для записи байта данных в любую ячейку внутри 512-байтного сектора,который таким образом будет стерт.6. Сбросить в 0 бит PSEE (PSCTL.1) для запрещения стирания Flash-сектора7. Использовать команду MOVX для записи байта данных по нужному адресу внутри стертого 512-байтногосектора. Повторять этот байт до тех пор, пока все необходимые байты не будут записаны (внутри данногосектора).8. Сбросить в 0 бит PSWE (PSCTL.0) для перенаправления действия команд MOVX на пространство памятиданных XRAM.9.
Разрешить прерывания.139Ред. 1.4C8051F020/1/2/3Управление временными интервалами операций записи и стирания осуществляется автоматическиаппаратными средствами. Следует иметь в виду, что во время программирования или стирания Flash-памятивыполнение программы приостанавливается. Прерывания, возникающие во время записи/стирания Flashпамяти, будут обработаны после окончания операций с Flash-памятью в порядке, определяемым их уровнямиприоритета.Таблица 15.1.
Электрические параметры FLASH-памятиVDD = 2.7 - 3.6В, Т = -40ºC … +85ºC, если не указано иное.ПАРАМЕТРУСЛОВИЯМин.Число циклов программирования20000Время цикла стирания10Время цикла записи40Тип.1000001250Макс.1460Ед. изм.Стирание/Записьмсмкс15.2. Долговременное хранение данныхFlash-память может использоваться не только для программного кода, но и для долговременногохранения данных. Это позволяет рассчитывать и сохранять во время выполнения программы такие данные, каккалибровочные коэффициенты. Данные записываются с использованием команды MOVX (как описано впредыдущем разделе) и считываются с использованием команды MOVC.МК данного семейства содержат дополнительный 128-байтный сектор Flash-памяти, предназначенныйдля долговременного хранения данных.
По причине небольшого размера этого сектора его особенно выгодноиспользовать в качестве долговременной сверхбыстродействующей памяти общего назначения. Несмотря на то,что во Flash-память можно записывать по одному байту за раз, сначала необходимо стереть весь сектор. Чтобыизменить один байт в многобайтном наборе данных, необходимо поместить данные на временное хранение вкакую-либо память. После того, как сектор стерт, данные обновляются и возвращаются в исходный сектор. 128байтный размер сектора позволяет организовать процесс обновления данных без расходования пространствапамяти программ или ОЗУ. Этот 128-байтный сектор отображен (в режиме дублирования) на 64-КбайтнуюFlash-память и занимает диапазон адресов 0x00 - 0x7F (см. рис.15.1). Доступ к этому 128-байтному секторувозможен только тогда, когда бит SFLE регистра PSCTL установлен в 1.
Выполнение программного кода изэтого 128-байтного сектора сверхоперативной памяти не допускается.15.3. Защита FLASH-памятиCIP-51 имеет опции защиты, позволяющие защитить Flash-память от случайной модификации состороны программы и исключить возможность просмотра патентованного программного кода и констант. Битыразрешения записи памяти программ (PSCTL.0) и разрешения стирания памяти программ (PSCTL.1) защищаютFlash-память от случайной модификации со стороны программы.
Эти биты должны быть явно установлены в 1,чтобы программа могла модифицировать Flash-память. Дополнительные функции защиты предотвращаютчтение и изменение патентованного программного кода и констант посредством JTAG-интерфейса илипрограммы, запущенной на системном контроллере.Установка байтов блокировки защиты по адресам 0xFDFE и 0xFDFF защищает Flash-память от чтенияи изменения посредством JTAG-интерфейса. Каждый бит в байте блокировки защиты защищает один8Кбайтный блок памяти. Сброс бита в 0 в байте блокировки чтения защищает соответствующий блок Flashпамяти от чтения посредством JTAG-интерфейса.
Сброс бита в 0 в байте блокировки записи/стираниязащищает блок от записи и/или стирания посредством JTAG-интерфейса. 128-байтный секторсверхоперативной памяти блокируется только тогда, когда заблокированы все другие секторы.Байт блокировки чтения находится по адресу 0xFDFF. Байт блокировки записи/стирания находится поадресу 0xFDFE. На рис.15.1 показано, какую область памяти защищает каждый бит байтов защиты.512-байтный сектор, содержащий байты защиты, можно программно записывать, но нельзя программностирать. Операция чтения заблокированных для чтения байт возвратит в качестве результата неопределенныеданные. Отладка кода в заблокированном для чтения секторе с помощью JTAG-интерфейса невозможна.Ред.
1.4140C8051F020/1/2/3Рисунок 15.1. Карта распределения Flash-памяти программ и байты защитыБиты защиты чтенияи записи/стирания(бит 7 – старший)БитБлок памяти765432100xE000 - 0xFDFD0xC000 - 0xDFFF0xA000 - 0xBFFF0x8000 - 0x9FFF0x6000 - 0x7FFF0x4000 - 0x5FFF0x2000 - 0x3FFF0x0000 - 0x1FFFSFLE = 0SFLE = 10xFFFFЗарезервировано0xFE00Байт блокировки чтения0xFDFFБайт блокировкизаписи/стирания0xFDFEСверхоперативная память(только данные)0x007F0x00000xFDFDАдресное пространствопамяти программ/данныхГраница области, доступнойдля чтения из программы0x0000Байт блокировки чтения FLASH-памятиБиты 7-0: Каждый бит блокирует соответствующий блок памяти (бит 7 - старший).0: Операции чтения через JTAG-интерфейс для соответствующего блока заблокированы (запрещены).1: Операции чтения через JTAG-интерфейс для соответствующего блока разблокированы(разрешены).Байт блокировки записи/стирания FLASH-памятиБиты 7-0: Каждый бит блокирует соответствующий блок памяти.0: Операции записи/стирания через JTAG-интерфейс для соответствующего блока заблокированы(запрещены).1: Операции записи/стирания через JTAG-интерфейс для соответствующего блока разблокированы(разрешены).ПРИМЕЧАНИЕ: Когда заблокирован самый старший блок памяти, байты защиты можно записывать,нельзя стирать.Регистр ограничения доступа к FLASH-памяти (FLACL)Содержимое этого регистра используется как старший байт 16-разрядного адреса границы области,доступной для чтения из программы.
Значение этого 16-разрядного адреса рассчитывается как 0xNN00,где NN заменяется содержимым регистра FLACL при сбросе. Программе, запущенной на выполнение вадресном пространстве выше этого адреса (т.е. в верхнем разделе), запрещено использовать командыMOVX или MOVC для чтения, записи или стирания ячеек области памяти, расположенной ниже этогоадреса (т.е. в нижнем разделе). Любая такая попытка прочитать ячейки памяти из нижнего разделавозвратит в качестве результата 0x00.Биты блокировки всегда могут быть прочитаны и сброшены в 0 независимо от параметров защитыблока, содержащего байты защиты.