37 #define INTERNAL_TEST // Внутренний тест 38 #define MKPD_MAX_WORD_IN_PACKET 32 39 #define MKPD_EP_SUBADDR_COUNT 32 41 unsigned int EP1_addr; 59 #if (FREQ != SYS_FREQ) 60 #error Manchester frequency has not correct value (speed will not be equal to 2 Mbit/s) 107 volatile unsigned short FEP1:1;
108 volatile unsigned short MAN:1;
109 volatile unsigned short FEP0:1;
110 volatile unsigned short BUSY:1;
111 volatile unsigned short Group_rx:1;
112 volatile unsigned short RES:3;
113 volatile unsigned short SREQ:1;
114 volatile unsigned short Reply_tx:1;
115 volatile unsigned short Data_err:1;
116 volatile unsigned short EP_addr:5;
124 volatile unsigned short all;
133 #define INPORT_MUX ((INPORT_MUX_t*) 0xA0FF0000) 134 #define OUTPORT_MUX ((OUTPORT_MUX_t*) 0xA0FF1000) 140 unsigned int NUM_FUNC :8;
141 unsigned int rsrv1 :8;
142 unsigned int LOOPBACK :1;
143 unsigned int rsrv2 :14;
152 volatile unsigned int all;
161 volatile unsigned int MCU_PORT[144];
169 unsigned int NUM_PORT :8;
170 unsigned int rsrv1 :23;
179 volatile unsigned int all;
188 volatile unsigned int FPGA_PORT[250];
214 for (uint8_t index = 0; index < 4; index++)
272 PRINT(
"Error in subtest\n");
281 PRINT(
"\t\t\tSubtest complete - OK\n");
307 for (
unsigned int port = 55; port < 250; port++)
334 for (uint8_t index = 0; index < 4; index++)
403 for (
int i=0; i < MKPD_EP_SUBADDR_COUNT * 2; i++)
406 BC_RX_Buffer[i] = 0xFF;
409 unsigned char stop_test = 0;
415 for (uint32_t EP_subaddr = 1; EP_subaddr < MKPD_EP_SUBADDR_COUNT - 1; EP_subaddr++)
428 PRINT(
"Error: BC busy timeout\n");
445 if (BC_RX_Buffer[i] != EP1_Buffer[i+(EP_subaddr-1)*64])
458 #warning в тесте важен порядок запуска режимов - сначала mode == 0, и только потом mode == 1. Иначе нужно по другому настраивать RAM_DATA 479 CMN_REG->ALT_FUNCTION_CTRL[4] &= 0x000000FF;
480 CMN_REG->ALT_FUNCTION_CTRL[5] = 0x00000000;
481 CMN_REG->ALT_FUNCTION_CTRL[6] &= 0xFFFFFF00;
484 GPIO_E->ALTFUNCSET = 0xFFF0;
485 GPIO_F->ALTFUNCSET = 0xFFFF;
486 GPIO_G->ALTFUNCSET = 0x000F;
488 for (
int i = 0; i < 32; i++)
490 INPORT_MUX->MCU_PORT[68 + i] = (68 + i) | (1 << 31);
491 OUTPORT_MUX->FPGA_PORT[68 + i] = (68 + i) | (1 << 31);
499 #define TEST_CHANNEL_A 500 #define TEST_CHANNEL_B 504 PRINT(
"\n********** MKPD test start **********\n");
516 PRINT(
"\t\tTest blocks in pairs\n");
519 for (uint8_t BC_index = 0; BC_index < 4; BC_index++)
520 for (uint8_t EP_index = 0; EP_index < 4; EP_index++)
521 if (EP_index != BC_index)
523 #ifdef TEST_CHANNEL_A 524 PRINT(
"\t\t\tBC = %d, EP = %d, Channel A\n", BC_index, EP_index);
529 #ifdef TEST_CHANNEL_B 530 PRINT(
"\t\t\tBC = %d, EP = %d, Channel B\n", BC_index, EP_index);
static void MKPD_Set_NoActivity_Time(MKPD_T *pMKPD, unsigned int Noacttime)
Настройка времени ожидания отсутствия активности на линии, не менее 1.3 мкс
static unsigned int MKPD_StartMessage(MKPD_T *pMKPD, MKPD_TX_T index, unsigned int type_trans, unsigned int ep_addr0, unsigned int sub_addr0, unsigned int ep_addr1, unsigned int sub_addr1, unsigned int num, unsigned int timeout, unsigned int manage_code)
Передача сообщения от КШ
uint8_t BC_RX_Buffer[MKPD_MAX_WORD_IN_PACKET *2]
Буфер слов данных для приёма на КШ
#define PRINT(...)
Макросы для использования отладочного выхода
volatile uint16_t Command_word_mark
Структура для доступа к командному слову (КС)
void MKPD_Set_Interpacket_Time(MKPD_T *pMKPD, uint32_t time)
Установка временного интервала между передачей пакетов
void PWR_RST_Enable(CTRL_T CTRLn)
Ввод модуля в асинхронный сброс
Структура для доступа к регистрам МКПД.
static void MKPD_Set_Endpoint_Attributes(MKPD_T *pMKPD, uint32_t attributes)
Установка признаков в ОС ОУ
void NVIC_EnableIRQ(IRQn_T IRQn, uint32_t vec)
Разрешение прерывания
uint32_t MKPD_Get_Endpoint_Command_Word(MKPD_T *pMKPD)
Возвращает командное слово, принятое ОУ
Этот файл содержит структуры, макросы и функции необходимые необходимые для тестовой программы для ап...
Содержимое ответного слова (ОС)
volatile unsigned int irq_counter[4]
volatile unsigned short BUSY
static void MKPD_Set_Clk_1750NS(MKPD_T *pMKPD, unsigned int Clk)
Тонкая настройка количества тактов системной частоты в 1750 нс
#define MKPD4
Указатель на структуру MKPD4.
volatile unsigned short FEP1
static void MKPD_Set_Clk_500NS(MKPD_T *pMKPD, unsigned int Clk)
Тонкая настройка количества тактов системной частоты в 500 нс
union Reply_Word Reply_Word_T
Структура для доступа к ОС побитово и в целом
void MKPD_configure_time()
void MKPD_Set_InvTX(MKPD_T *pMKPD, unsigned int invTX)
Установка инвертирования дифференциального сигнала на передаче
void MKPD_Set_Wait_Time(MKPD_T *pMKPD, uint32_t rwait)
Установка времени ожидания ОС или СД в режиме работы КШ и ОУ
volatile unsigned short Group_rx
static void MKPD_Set_BCWaitReply_Time(MKPD_T *pMKPD, unsigned int Bcwaitreply)
Настройка времени ожидания ОС в режиме КШ
#define GPIO_G
Указатель на структуру GPIO_G.
void PWR_CLK_Disable(CTRL_T CTRLn)
Отключение тактового сигнала от модуля
void MKPD_Set_Edge_Time(MKPD_T *pMKPD, uint32_t edge)
Установка времени запрещенного состояния дифференциального сигнала
const uint32_t sys_freq
Системная частота
Структура для доступа к ОС побитово и в целом
static void MKPD_Set_DecoderDisable(MKPD_T *pMKPD, unsigned int Disable_mask)
Программное отключение декодеров
static void MKPD_Set_Clk_1250NS(MKPD_T *pMKPD, unsigned int Clk)
Тонкая настройка количества тактов системной частоты в 1250 нс
char dbg_buffer[256]
Отладочный буфер
volatile unsigned short EP_addr
void PWR_RST_Disable(CTRL_T CTRLn)
Вывод модуля из асинхронного сброса
volatile unsigned short SREQ
void PWR_CLK_Enable(CTRL_T CTRLn)
Подача тактового сигнала на модуль
volatile uint16_t Subaddr__Manage_mode
void Init_ports_Manchester(unsigned int mode)
volatile unsigned short Data_err
void CheckReplyWord(uint32_t ep_addr, uint32_t group_rx)
volatile unsigned int all
void FPGA_MUX_Disable_all()
void CheckCommandWord(Command_Word_T command, uint32_t ep_addr, uint32_t tx_rx, uint32_t ep_subaddr, uint32_t word_count)
uint32_t MKPD_BC_Reply_Word(MKPD_T *pMKPD, MKPD_TX_T index)
Возвращает ответное слово, полученное от ОУ
#define MKPD1
Указатель на структуру MKPD1.
static void MKPD_Set_Clk_2250NS(MKPD_T *pMKPD, unsigned int Clk)
Тонкая настройка количества тактов системной частоты в 2250 нс
static void MKPD_Set_IncWith(MKPD_T *pMKPD, unsigned int IncWith)
Настройка сигнала разрешения передачи
void MKPD_Set_System_Clock(MKPD_T *pMKPD, uint32_t sys_clk)
Установка значения системной частоты
struct Command_Word_Bits bit
#define MKPD2
Указатель на структуру MKPD2.
struct Reply_Word_Bits bit
volatile unsigned short Reply_tx
volatile unsigned short MAN
#define GPIO_E
Указатель на структуру GPIO_E.
#define CMN_REG
Указатель на структуру CMN_REG.
volatile unsigned short all
void DBG_TX_Flush(void)
Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART.
volatile unsigned int all
uint8_t BC_TX_Buffer[MKPD_MAX_WORD_IN_PACKET *2]
Буфер слов данных для передачи с КШ
volatile uint16_t Tx_rx_mark
Command_Word_T ep_command1
Содержимое командного слова, принимаемого оконечным устройством 1.
volatile unsigned short FEP0
#define SYS_FREQ
Системная частота для использования в библиотечных функциях для MKPD.
static void MKPD_ConfigBusController(MKPD_T *pMKPD, uint32_t address_one, uint32_t address_two, uint32_t channel)
Настройка контроллера шины
unsigned int reply_error1
static void MKPD_ConfigEndpoint(MKPD_T *pMKPD, uint32_t address, uint32_t ep_address)
Настройка оконечного устройства
volatile uint16_t EP_addr
#define MKPD3
Указатель на структуру MKPD3.
volatile uint16_t Data_size__Command_code
#define MKPD_MAX_WORD_IN_PACKET
#define GPIO_F
Указатель на структуру GPIO_F.
#define MKPD_EP_SUBADDR_COUNT
uint8_t TestTwoBlocks2(MKPD_T *ManBC, MKPD_T *ManEP, MKPD_SETTING0_CHANNEL_T Channel)
static void MKPD_Set_Clk_1500NS(MKPD_T *pMKPD, unsigned int Clk)
Тонкая настройка количества тактов системной частоты в 1500 нс