Таблица 20.22. Перечень команд IAP
Команда IAF |
Код команды |
Описание |
Подготовить сектор(-а) к операции записи |
50 |
Табл. 20.23 |
Копировать оперативную память во Flash-память |
51 |
Табл. 20.24 |
Стереть сектор(-а) |
52 |
Табл. 20.25 |
Заполнить пробелами сектор(-а) |
53 |
Табл. 20.26 |
Читать идентификатор устройства (ID) |
54 |
Табл. 20.27 |
Читать версию загрузчика кода |
55 |
Табл. 20.28 |
Сравнение |
56 |
Табл. 20.29 |
Регистр ARM гО
Регистр ARM г1
Код команды Параметр 0 Параметр 1
Параметр п
Таблица
параметров
команд
Код состояния |
||
Результат 0 |
||
Результат 1 |
||
= «г • = |
||
Результат п |
Таблица
результатов
команд
Рис. 20.4. Блок-схема передачи параметров и возвращения результатов команд IAP
При написании управляющей программы на языке С функцию LAP можно вызвать следующим образом:
1. Определить точку входа в LAP. Для режима THUMB, определение точки входа будет выглядеть так:
#define IAP_L0CATI0N 0x7ffffffl
2. Определить структуру данных или указателей, чтобы передать таблицу команд LAP и таблицу результатов функции LAP:
unsigned long command[5]; unsigned long result[2];
или
unsigned long * command; unsigned long * result;
command=(unsigned long *) Ox......
result= (unsigned long *) Ox......
3. Определить указатель типа функции, который передает два параметра и не возвращает ни одного. Обратите внимание, что IAP возвращает результат в таблице, базовый адрес которого постоянно находится в rl.
typedef void (*IAP)(unsigned int [],unsigned int[]); IAP iap_entry;
4. Установить указатель функции:
iap_entry=(IAP) IAP_LOCATION;
5. Всякий раз, когда требуется вызвать IAP, можно использовать следующую инструкцию:
iap_entry (command, result);
6. Вызов IAP может быть еще более упрощен, если использовать файл определения символов, поддерживаемый компоновщиком (линковщиком) ARM. Можно также вызывать подпрограмму LAP с использованием ассемблерного кода.
Чтобы связать подпрограмму IAP и пользовательское приложение можно использовать следующие определения символов:
#<SYMDEFS># ARM Linker, ADS1.2 [Build 826]: Last Updated: Wed May 08 16:12
:23 2002 |
||
0x7fffff90 |
T |
rm_init_entry |
0x7fffffa0 |
A |
rm_undef_handler |
0x7fffffb0 |
A |
rm_prefetchabort_handler |
Ox7fffffcO |
A |
rm_dataabort_handler |
0x7fffffd0 |
A |
rm_irqhandler |
0x7fffffe0 |
A |
rm_irqhandler2 |
0x7ffffff0 |
T |
iap_entry |
Согласно спецификации ARM («The ARM THUMB Procedure Call Standard SWS ESPC 0002 А-05»), в регистрах rO, rl, r2 и гЗ может быть передано до 4 параметров. Дополнительные параметры передаются в стеке. В регистрах в rO, rl, г2 и гЗ может быть возвращено до 4 параметров. Дополнительные параметры возвращаются косвенно через память. Часть вызовов LAP требует более 4 параметров. Предложенная схема передачи параметров уменьшает риск, связанный с различием используемых компиляторов С.
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |