Предыдущая Следующая

Таблица 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 параметров. Предложенная схема передачи параметров уменьшает риск, связанный с различием используемых компиляторов С.


Предыдущая Следующая






Warning: include(./news.php) [function.include]: failed to open stream: No such file or directory in /var/www/picprof/data/www/picprof.com/book/book4_228.html on line 442

Warning: include(./news.php) [function.include]: failed to open stream: No such file or directory in /var/www/picprof/data/www/picprof.com/book/book4_228.html on line 442

Warning: include() [function.include]: Failed opening './news.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/picprof/data/www/picprof.com/book/book4_228.html on line 442