增加从站回环的代码,仅加了一个,但是仿真结果有错误,需要检查

This commit is contained in:
2025-02-10 00:03:16 +08:00
parent fd74e07123
commit 9943b5c044
6 changed files with 273 additions and 501 deletions

View File

@@ -6,60 +6,13 @@
#include "tl2cdr.h"
volatile uint32_t *plic_priority_3 = (uint32_t*)( 0xc000000U + 0X000004 * 3);
volatile uint32_t *plic_priority_4 = (uint32_t*)( 0xc000000U + 0X000004 * 4);
volatile uint32_t *plic_priority_5 = (uint32_t*)( 0xc000000U + 0X000004 * 5);
volatile uint32_t *plic_priority_6 = (uint32_t*)( 0xc000000U + 0X000004 * 6);
volatile uint32_t *plic_priority_TxEnd = (uint32_t*)( 0xc000000U + 0X000004 * CDR_INT_TXEND);
volatile uint32_t *plic_priority_RxError = (uint32_t*)( 0xc000000U + 0X000004 * CDR_INT_RXERROR);
volatile uint32_t *plic_priority_RxStart = (uint32_t*)( 0xc000000U + 0X000004 * CDR_INT_RXSTART);
volatile uint32_t *plic_priority_RxEnd = (uint32_t*)( 0xc000000U + 0X000004 * CDR_INT_RXEND);
volatile uint32_t *plic_priority_18 = (uint32_t*)( 0xc000000U + 0X000004 * 18);
volatile uint32_t *plic_priority_19 = (uint32_t*)( 0xc000000U + 0X000004 * 19);
volatile uint32_t *plic_priority_20 = (uint32_t*)( 0xc000000U + 0X000004 * 20);
volatile uint32_t *plic_priority_21 = (uint32_t*)( 0xc000000U + 0X000004 * 21);
volatile uint32_t *const plic_priority = (uint32_t *)(0xc000000U);
volatile uint32_t *plic_pending_0_31 = (uint32_t*)( 0xc000000U + 0X001000 );
volatile uint32_t *plic_enable_0_31 = (uint32_t*)( 0xc000000U + 0X002000 );
volatile uint32_t *plic_threshold_0 = (uint32_t*)( 0xc000000U + 0X200000 );
volatile uint32_t *plic_claim = (uint32_t*)( 0xc000000U + 0X200004 );
volatile uint32_t flag_intTxEnd = 0;
volatile uint32_t flag_intRxError = 0;
volatile uint32_t flag_intRxStart = 0;
volatile uint32_t flag_intRxEnd = 0;
void plic_handle(){
// 从 PLIC 中获取中断源 ID
uint32_t claim = *plic_claim;
if( claim == CDR_INT_TXEND ){
flag_intTxEnd = 1;
} else if( claim == CDR_INT_RXERROR ){
flag_intRxError = 1;
} else if( claim == CDR_INT_RXSTART ){
flag_intRxStart = 1;
} else if( claim == CDR_INT_RXEND ){
flag_intRxEnd = 1;
}
// 通知 PLIC 完成中断处理
*plic_claim = claim;
return;
}
static inline void error() {
while(1);
@@ -68,12 +21,70 @@ static inline void error() {
extern const uint8_t int_svr_code[];
uint32_t (*sys_call)(uint32_t no, ...);
void main()
{
int i;
/*初始化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
;
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;
*plic_threshold_0 = 0;
sys_call = (void *)int_svr_code;
//复位脉冲
*tx0_softReset = 1;
*tx1_softReset = 1;
*rx0_softReset = 1;
*rx1_softReset = 1;
//tx0 下行
//tx1 上行
//rx0 下行
//rx1 上行
while (1);
#if 0
register uint32_t readDat;
register uint32_t operator;
register uint32_t downRecvLen;
@@ -447,7 +458,7 @@ void main()
// error();
}
}
#endif
}