/****************************************************************/
/*			    	  		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_3 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);

/** Стандартный ответ, без параметров */
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 */
void xflash(RS_DATA *rs_arr); 

/** Прошить TMS.
 @precondition Должна быть произведена загрузка блока
 Адрес и длина прошивки беретса из заголовка и 
 сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
 @see load */
void tflash(RS_DATA *rs_arr); 


/* расширенные команды дла биоса */
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 */    
