2024-11-04 16:07:06 +08:00
|
|
|
#include <stdint.h>
|
2025-01-15 11:44:30 +08:00
|
|
|
#include "tl2cdr.h"
|
2025-02-10 00:08:30 +08:00
|
|
|
#include "system_cfg.h"
|
2025-02-09 01:17:17 +08:00
|
|
|
#include "sysDef.h"
|
2025-02-10 14:38:49 +08:00
|
|
|
#include "halfLvdsMacSvr.h"
|
2024-11-04 16:07:06 +08:00
|
|
|
|
2025-02-10 14:38:49 +08:00
|
|
|
|
|
|
|
|
#ifdef __riscv_i
|
|
|
|
|
#define USING_POLL_STRATEGY
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------
|
2025-02-10 00:03:16 +08:00
|
|
|
volatile uint32_t *const plic_priority = (uint32_t *)(0xc000000U);
|
2025-01-15 17:58:12 +08:00
|
|
|
|
2025-01-15 15:44:29 +08:00
|
|
|
volatile uint32_t *plic_pending_0_31 = (uint32_t*)( 0xc000000U + 0X001000 );
|
|
|
|
|
volatile uint32_t *plic_enable_0_31 = (uint32_t*)( 0xc000000U + 0X002000 );
|
2025-01-15 17:58:12 +08:00
|
|
|
|
|
|
|
|
volatile uint32_t *plic_threshold_0 = (uint32_t*)( 0xc000000U + 0X200000 );
|
2025-01-15 15:44:29 +08:00
|
|
|
volatile uint32_t *plic_claim = (uint32_t*)( 0xc000000U + 0X200004 );
|
|
|
|
|
|
2024-11-04 16:07:06 +08:00
|
|
|
|
2025-02-10 14:38:49 +08:00
|
|
|
//-------------------------------------------------------------------
|
|
|
|
|
//internal function
|
|
|
|
|
static uint32_t init_plic(void);
|
2024-11-04 16:07:06 +08:00
|
|
|
|
2025-02-10 14:38:49 +08:00
|
|
|
static void error() ;
|
2024-11-04 16:07:06 +08:00
|
|
|
|
|
|
|
|
void main()
|
|
|
|
|
{
|
2025-02-09 01:17:17 +08:00
|
|
|
int i;
|
|
|
|
|
|
2025-02-10 14:38:49 +08:00
|
|
|
//初始化plic
|
|
|
|
|
init_plic();
|
|
|
|
|
|
|
|
|
|
//延迟等待从机复位,初始化
|
|
|
|
|
for (i = 0; i < 100; i++)
|
|
|
|
|
asm volatile("nop");
|
|
|
|
|
|
|
|
|
|
#ifdef USING_POLL_STRATEGY
|
|
|
|
|
//使用查询策略 POLL_STRATEGY 操作 half lvds mac
|
|
|
|
|
HLM_poll(WORKMODE_MASTER);
|
|
|
|
|
#else
|
|
|
|
|
//使用中断策略操作half lvds mac
|
|
|
|
|
HLM_work_with_isr(WORKMODE_MASTER);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
while (1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t init_plic(void)
|
|
|
|
|
{
|
|
|
|
|
|
2025-02-09 01:17:17 +08:00
|
|
|
/*初始化plic*/
|
|
|
|
|
*plic_enable_0_31 = 1 << CDR_INT_TX0END
|
|
|
|
|
//| 1 << CDR_INT_TX1END
|
|
|
|
|
|
|
|
|
|
//| 1 << CDR_INT_RX0ERROR
|
|
|
|
|
| 1 << CDR_INT_RX1ERROR
|
|
|
|
|
|
|
|
|
|
//| 1 << CDR_INT_RX0START
|
|
|
|
|
| 1 << CDR_INT_RX1START
|
|
|
|
|
|
|
|
|
|
//| 1 << CDR_INT_RX0END
|
|
|
|
|
| 1 << CDR_INT_RX1END
|
|
|
|
|
|
|
|
|
|
| 1 << CDR_INT_TX0_FIFO_DEQ
|
|
|
|
|
//| 1 << CDR_INT_TX1_FIFO_DEQ
|
|
|
|
|
|
|
|
|
|
//| 1 << CDR_INT_RX0_FIFO_ENQ
|
|
|
|
|
| 1 << CDR_INT_RX1_FIFO_ENQ
|
|
|
|
|
;
|
|
|
|
|
|
2025-02-10 00:03:16 +08:00
|
|
|
plic_priority[CDR_INT_TX0END] = 1;
|
|
|
|
|
plic_priority[CDR_INT_TX1END] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX0ERROR] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX1ERROR] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX0START] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX1START] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX0END] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX1END] = 1;
|
|
|
|
|
plic_priority[CDR_INT_TX0_FIFO_DEQ] = 1;
|
|
|
|
|
plic_priority[CDR_INT_TX1_FIFO_DEQ] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX0_FIFO_ENQ] = 1;
|
|
|
|
|
plic_priority[CDR_INT_RX1_FIFO_ENQ] = 1;
|
|
|
|
|
|
2025-01-15 17:58:12 +08:00
|
|
|
*plic_threshold_0 = 0;
|
2025-01-15 15:44:29 +08:00
|
|
|
|
2024-11-05 11:09:40 +08:00
|
|
|
|
2025-02-10 14:38:49 +08:00
|
|
|
return 0;
|
|
|
|
|
}
|
2025-02-09 01:17:17 +08:00
|
|
|
|
2025-02-10 14:38:49 +08:00
|
|
|
void error() {
|
|
|
|
|
while(1);
|
|
|
|
|
}
|
2025-02-09 01:17:17 +08:00
|
|
|
|
|
|
|
|
|