/** * @file bios_dsp.h * @brief Команды сервисного BIOS и API удалённой работы с памятью. * * Объявляет номера команд загрузчика и обработчики, работающие с RS_DATA. * Интерфейс предоставляет прямые операции с адресным пространством DSP и * предназначен только для доверенных, уже проверенных протокольных запросов. */ /****************************************************************/ /* TMS320C32 */ /* ====== BIOS, КЛАИН, КЛВСП ====== */ /* ЦНИИ СЭТ (с) 1998-2000 г. */ /****************************************************************/ /* Bios_dsp.h */ /****************************************************************/ /* Основные комманды BIOS */ /****************************************************************/ #ifndef _BIOS_DSP #define _BIOS_DSP #ifdef __cplusplus extern "C" { #endif #define BM_PACKED 1 #define BM_CHAR32 0 #define CHIEF 1 #define SLAVE 0 #define ADR_FOR_SPECIAL 0x100 #define CMD_MODBUS_3 3 #define ANS_MODBUS_4 4 #define CMD_MODBUS_15 5 #define CMD_MODBUS_6 6 #define ANS_MODBUS_6 7 #define CMD_MODBUS_16 16 /* CMD_MODBUS_3 = 3, ANS_MODBUS_3 = 4, CMD_MODBUS_15 = 5, CMD_MODBUS_6 = 6, ANS_MODBUS_6 = 7, CMD_MODBUS_16 = 16, */ enum { CMD_LOAD=51, CMD_UPLOAD, CMD_RUN, CMD_XFLASH, CMD_TFLASH, CMD_PEEK, CMD_POKE, CMD_INITLOAD, CMD_INIT,CMD_EXTEND, CMD_VECTOR=61, CMD_IMPULSE, /* стандартные команды */ CMD_STD=65, CMD_STD_ANS }; enum {false=0, true}; /** Возвращает номер комманды, если есть или -1 если транзакций не было */ /** Проверяет кадр и выполняет содержащуюся в нём сервисную команду. */ int get_command(RS_DATA *rs_arr); /** Стандартный ответ, без параметров */ /** Формирует и отправляет ответ длиной n слов через заданный порт. */ void Answer(RS_DATA *rs_arr,int n); /* начальные установки (не работает)*/ /** Сбрасывает состояние текущей сессии загрузчика. */ void init(RS_DATA *rs_arr); /**@name Комманды * Комманды, вызываемые через последовательный канал*/ //@{ /** Инициировать загрузку блока. Настраивает прием блока данных */ /** Подготавливает диапазон памяти к приёму нового образа. */ void initload(RS_DATA *rs_arr); /** Загрузка блока. Вызываетса после загрузки блока через RS */ /** Записывает очередной проверенный блок образа в память. */ void load(RS_DATA *rs_arr); /** Выполнить программу в формате Serial Boot. @precondition Должна быть произведена загрузка блока Адрес программы беретса из заголовка и сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load @see load */ /** Передаёт управление по адресу, заданному сервисной командой. */ void run (RS_DATA *rs_arr); /** Прочитать ачейку памати */ /** Читает запрошенный диапазон памяти и возвращает его ведущему узлу. */ void peek(RS_DATA *rs_arr); /** Записать в ачейку памати */ /** Записывает одно или несколько слов по адресу из команды. */ void poke(RS_DATA *rs_arr); /** Передать блок памати */ /** Передаёт ведущему узлу очередной блок содержимого памяти. */ void upload(RS_DATA *rs_arr); /** Прошить XILINX. @precondition Должна быть произведена загрузка блока Адрес и длина прошивки беретса из заголовка и сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load, так же смотрит магическое слово в начале прошивки @see load */ /** Обрабатывает команду доступа к внешней Flash-памяти. */ void xflash(RS_DATA *rs_arr); /** Прошить TMS. @precondition Должна быть произведена загрузка блока Адрес и длина прошивки беретса из заголовка и сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load @see load */ /** Обрабатывает команду доступа к целевой Flash-памяти. */ void tflash(RS_DATA *rs_arr); /* расширенные команды дла биоса */ /** Обрабатывает расширенную сервисную команду BIOS. */ void extendbios(RS_DATA *rs_arr); /** Записывает слово по физическому адресу; адрес обязан быть допустимым. */ void write_memory(unsigned long addr, unsigned int data); /** Читает слово по физическому адресу; адрес обязан быть допустимым. */ unsigned int read_memory(unsigned long addr); //@} #ifdef __cplusplus } #endif #endif/* _BIOS_DSP */