194 lines
3.3 KiB
C
194 lines
3.3 KiB
C
|
|
#include "system_cfg.h"
|
||
|
|
#include "sysDef.h"
|
||
|
|
#include "tl2cdr.h"
|
||
|
|
#include "halfLvdsMacSvr.h"
|
||
|
|
|
||
|
|
//-------------------------------------------------------------------
|
||
|
|
uint8_t MST_TX_BUF[TX_BUF_NUM * TX_BUF_MAX_LEN] __attribute__((aligned(32)));
|
||
|
|
uint8_t MST_RX_BUF[RX_BUF_NUM * RX_BUF_MAX_LEN] __attribute__((aligned(32)));
|
||
|
|
|
||
|
|
|
||
|
|
//-------------------------------------------------------------------
|
||
|
|
extern const uint8_t int_svr_code[];
|
||
|
|
uint32_t (*sys_call)(uint32_t no, ...);
|
||
|
|
|
||
|
|
|
||
|
|
uint32_t HLM_work_with_isr(uint32_t mode)
|
||
|
|
{
|
||
|
|
int i;
|
||
|
|
|
||
|
|
sys_call = (void *)int_svr_code;
|
||
|
|
|
||
|
|
//复位脉冲
|
||
|
|
*tx0_softReset = 1;
|
||
|
|
*tx1_softReset = 1;
|
||
|
|
*rx0_softReset = 1;
|
||
|
|
*rx1_softReset = 1;
|
||
|
|
|
||
|
|
|
||
|
|
//tx0 下行
|
||
|
|
//tx1 上行
|
||
|
|
//rx0 下行
|
||
|
|
//rx1 上行
|
||
|
|
if (mode == WORKMODE_MASTER)
|
||
|
|
{
|
||
|
|
uint32_t tx_len;
|
||
|
|
|
||
|
|
tx_len = 32;
|
||
|
|
|
||
|
|
for (i = 0; i < tx_len - 1; i++)
|
||
|
|
{
|
||
|
|
MST_TX_BUF[i] = i;
|
||
|
|
}
|
||
|
|
|
||
|
|
sys_call(SYS_SET_RECV_INFO, MST_RX_BUF);
|
||
|
|
sys_call(SYS_SEND_DATA, MST_TX_BUF, tx_len);
|
||
|
|
}
|
||
|
|
else if (mode == WORKMODE_SLAVE)
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
#define CDR_INT_TX0END 14U
|
||
|
|
#define CDR_INT_TX1END 15U
|
||
|
|
#define CDR_INT_RX0ERROR 16U
|
||
|
|
#define CDR_INT_RX1ERROR 17U
|
||
|
|
#define CDR_INT_RX0START 18U
|
||
|
|
#define CDR_INT_RX1START 19U
|
||
|
|
#define CDR_INT_RX0END 20U
|
||
|
|
#define CDR_INT_RX1END 21U
|
||
|
|
#define CDR_INT_TX0_FIFO_DEQ 22U
|
||
|
|
#define CDR_INT_TX1_FIFO_DEQ 23U
|
||
|
|
#define CDR_INT_RX0_FIFO_ENQ 24U
|
||
|
|
#define CDR_INT_RX1_FIFO_ENQ 25U
|
||
|
|
*/
|
||
|
|
volatile uint32_t isr_flag[32] = {0};
|
||
|
|
uint32_t HLM_poll(uint32_t mode)
|
||
|
|
{
|
||
|
|
if (mode == WORKMODE_MASTER)
|
||
|
|
{
|
||
|
|
uint32_t pkt_len = 32;
|
||
|
|
uint32_t i;
|
||
|
|
uint32_t *data_ptr = (uint32_t *)MST_TX_BUF;
|
||
|
|
|
||
|
|
|
||
|
|
//准备数据
|
||
|
|
for (i = 0; i < pkt_len; i++)
|
||
|
|
MST_TX_BUF[i] = i;
|
||
|
|
|
||
|
|
|
||
|
|
//开始发送工作
|
||
|
|
*tx0_txLen = pkt_len + 8;
|
||
|
|
*tx0_txFifo = (pkt_len << 20) | (0 << 16) | 0;
|
||
|
|
|
||
|
|
uint32_t tx_index = 0;
|
||
|
|
uint32_t rx_index = 0;
|
||
|
|
while (1)
|
||
|
|
{
|
||
|
|
if (isr_flag[CDR_INT_TX0_FIFO_DEQ])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_TX0_FIFO_DEQ] = 0;
|
||
|
|
if (tx_index < pkt_len / 4)
|
||
|
|
{
|
||
|
|
*tx0_txFifo = data_ptr[tx_index];
|
||
|
|
tx_index++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isr_flag[CDR_INT_RX1START])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_RX1START] = 0;
|
||
|
|
MST_RX_BUF[rx_index] = *rx1_rxFifo;
|
||
|
|
rx_index++;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isr_flag[CDR_INT_RX1_FIFO_ENQ])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_RX1_FIFO_ENQ] = 0;
|
||
|
|
MST_RX_BUF[rx_index] = *rx1_rxFifo;
|
||
|
|
rx_index++;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isr_flag[CDR_INT_RX1END])
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if (mode == WORKMODE_SLAVE)
|
||
|
|
{
|
||
|
|
uint32_t rx_index = 0;
|
||
|
|
while (1)
|
||
|
|
{
|
||
|
|
if (isr_flag[CDR_INT_TX0_FIFO_DEQ])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_TX0_FIFO_DEQ] = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
//tx1 上行
|
||
|
|
if (isr_flag[CDR_INT_TX1_FIFO_DEQ])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_TX1_FIFO_DEQ] = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//rx0 下行
|
||
|
|
if (isr_flag[CDR_INT_RX0START])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_RX0START] = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isr_flag[CDR_INT_RX0_FIFO_ENQ])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_RX0_FIFO_ENQ] = 0;
|
||
|
|
if (rx_index == 0)
|
||
|
|
{
|
||
|
|
uint32_t first = *rx0_rxFifo;
|
||
|
|
uint32_t len;
|
||
|
|
|
||
|
|
len = (first >> 20U);
|
||
|
|
*tx1_txLen = len + 8U;
|
||
|
|
*tx1_txFifo = first;
|
||
|
|
rx_index += 4U;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
*tx1_txFifo = *rx0_rxFifo;
|
||
|
|
rx_index += 4U;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isr_flag[CDR_INT_RX0END])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_RX0END] = 0;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isr_flag[CDR_INT_RX1END])
|
||
|
|
{
|
||
|
|
isr_flag[CDR_INT_RX1END] = 0;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|