Update CCS12 peripheral firmware and documentation
This commit is contained in:
@@ -1,11 +1,20 @@
|
||||
/**
|
||||
* @file RS485.h
|
||||
* @brief Состояние портов SCI/RS-485, ограничения буферов и API обмена.
|
||||
*
|
||||
* RS_DATA объединяет регистры SCI, буферы, счётчики и состояние конечного
|
||||
* автомата. Память буферов принадлежит вызывающему коду и должна оставаться
|
||||
* доступной до завершения операции. MAX_RECEIVE_LENGTH/MAX_SEND_LENGTH задают
|
||||
* жёсткую границу, которую необходимо проверить до помещения данных в буфер.
|
||||
*/
|
||||
/****************************************************************/
|
||||
/* TMS320C32 */
|
||||
/* ====== BIOS, КЛАИН, КЛВСП ====== */
|
||||
/* ЦНИИ СЭТ (с) 1998-2000 г. */
|
||||
/* ====== BIOS, КЛАИН, КЛВСП ====== */
|
||||
/* ЦНИИ СЭТ (с) 1998-2000 г. */
|
||||
/****************************************************************
|
||||
RS485.h
|
||||
****************************************************************
|
||||
* Процедуры работы с UART *
|
||||
* Процедуры работы с UART *
|
||||
****************************************************************/
|
||||
#ifndef _RS485
|
||||
#define _RS485
|
||||
@@ -38,30 +47,30 @@ typedef struct
|
||||
{
|
||||
volatile struct SCI_REGS *SciRegs;
|
||||
|
||||
unsigned int commnumber; // Номер порта
|
||||
unsigned long RS_Length; // Длина пакета
|
||||
unsigned int commnumber; // Номер порта
|
||||
unsigned long RS_Length; // Длина пакета
|
||||
|
||||
unsigned int *pRS_RecvPtr; // Буфер приема
|
||||
unsigned int *pRS_SendPtr; // Буфер посылки
|
||||
unsigned int *pRS_RecvPtr; // Буфер приема
|
||||
unsigned int *pRS_SendPtr; // Буфер посылки
|
||||
unsigned int *pRecvPtr;
|
||||
|
||||
unsigned int RS_PrevCmd; // Предыдущаа комманда
|
||||
unsigned int RS_Cmd; // Текущаа комманда
|
||||
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
|
||||
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
|
||||
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
|
||||
unsigned int RS_DataReady; // Флаг готовности RS данных
|
||||
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
|
||||
unsigned int RS_PrevCmd; // Предыдущаа комманда
|
||||
unsigned int RS_Cmd; // Текущаа комманда
|
||||
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
|
||||
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
|
||||
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
|
||||
unsigned int RS_DataReady; // Флаг готовности RS данных
|
||||
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
|
||||
|
||||
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
|
||||
unsigned int addr_recive; // адрес по которому нас запросили
|
||||
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
|
||||
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
|
||||
unsigned int addr_recive; // адрес по которому нас запросили
|
||||
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
|
||||
unsigned long RS_RecvLen;
|
||||
unsigned long RS_SLength; // Длина пакета дла посылки
|
||||
unsigned long RS_SendLen; // Количество байт уже передали
|
||||
char RS_SendBlockMode; // Режим передачи
|
||||
char RS_Flag9bit; // дла RS485????????
|
||||
int BS_LoadOK; // Флаг успешности приема блока
|
||||
unsigned long RS_SLength; // Длина пакета дла посылки
|
||||
unsigned long RS_SendLen; // Количество байт уже передали
|
||||
char RS_SendBlockMode; // Режим передачи
|
||||
char RS_Flag9bit; // дла RS485????????
|
||||
int BS_LoadOK; // Флаг успешности приема блока
|
||||
int RS_FlagBegin;
|
||||
int RS_HeaderCnt;
|
||||
int RS_FlagSkiping;
|
||||
@@ -73,61 +82,72 @@ typedef struct
|
||||
extern RS_DATA rs_a,rs_b;
|
||||
|
||||
extern unsigned int
|
||||
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
|
||||
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
|
||||
|
||||
/** ISR приёма и передачи SCI-A/SCI-B; вызывают общий автомат соответствующего порта. */
|
||||
interrupt void RSA_RX_Handler(void);
|
||||
interrupt void RSA_TX_Handler(void);
|
||||
interrupt void RSB_RX_Handler(void);
|
||||
interrupt void RSB_TX_Handler(void);
|
||||
|
||||
/* иницилизациа переменных rs_a,rs_b*/
|
||||
/* иницилизациа переменных rs_a,rs_b*/
|
||||
/** Создаёт исходное состояние обоих RS_DATA и задаёт размер команды 15. */
|
||||
void create_uart_vars(char size_cmd15);
|
||||
|
||||
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
|
||||
/** Настройка режима приема/передачи */
|
||||
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
|
||||
/** Настройка режима приема/передачи */
|
||||
void RS_SetBitMode(RS_DATA *rs_arr, int n);
|
||||
|
||||
/** Посылка блока байтов.
|
||||
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество байт
|
||||
/** Посылка блока байтов.
|
||||
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param rs_arr Состояние выбранного порта.
|
||||
@param pBuf Адрес массива слов, каждое из которых содержит один байт.
|
||||
@param len количество байт
|
||||
@return Ненулевое значение, если передача принята драйвером.
|
||||
@see RS_BSend, RS_TRANSMIT_INTR
|
||||
*/
|
||||
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
|
||||
|
||||
/** Посылка блока упакованных байтов.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество 8-битных байт
|
||||
/** Посылка блока упакованных байтов.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param rs_arr Состояние выбранного порта.
|
||||
@param pBuf Адрес массива с упакованными байтами.
|
||||
@param len количество 8-битных байт
|
||||
@return Ненулевое значение, если передача принята драйвером.
|
||||
@see RS_Send, RS_TRANSMIT_INTR
|
||||
*/
|
||||
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
|
||||
|
||||
/** Инициализациа последовательного порта */
|
||||
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
|
||||
/** Инициализациа последовательного порта */
|
||||
/** @param commnumber COM_1 или COM_2. @param speed_baud Скорость линии в бодах. */
|
||||
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
|
||||
|
||||
/** Настраивает число бит данных, чётность и число стоп-битов выбранного SCI. */
|
||||
void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop);
|
||||
/** Меняет скорость уже созданного порта и обновляет curr_baud. */
|
||||
void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
|
||||
|
||||
// Transmit a character from the SCI'
|
||||
#define SCI_send(x,y) x->SciRegs->SCITXBUF=(unsigned char)(y)
|
||||
|
||||
// Ожидание завершениа передачи UART
|
||||
// Ожидание завершениа передачи UART
|
||||
// wait for TRDY =1 for empty state
|
||||
#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY))
|
||||
|
||||
/** Переключение линии на прием */
|
||||
/** Переключение линии на прием */
|
||||
#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;
|
||||
|
||||
/** Переключение линии на передачу */
|
||||
/** Переключение линии на передачу */
|
||||
#define RS_Line_to_send(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0;
|
||||
|
||||
/** Разрешение прерываний по получению символа и ошибкам от UART */
|
||||
/** Разрешение прерываний по получению символа и ошибкам от UART */
|
||||
#define enableUARTInt(x) x->SciRegs->SCICTL2.all=2
|
||||
#define enableUARTIntW(x) x->SciRegs->SCICTL2.all=1
|
||||
|
||||
/** Сбрасывает таймер контроля активности после корректного обмена. */
|
||||
void clear_timer_rs_live(RS_DATA *rs_arr);
|
||||
/** Обновляет признак потери связи по тайм-ауту RS_TIME_OUT. */
|
||||
void test_rs_live(RS_DATA *rs_arr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user