主站的代码使用最新的策略进行工作,可以编译,仿真有错误,尚未验证
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#error TL2CDR Base address not define!!!
|
||||
#endif
|
||||
|
||||
#ifdef OLD_CODE
|
||||
volatile uint32_t * const cdr_status = (uint32_t*)( TL2CDR_BASE + CDR_ReadStatus ); //read
|
||||
volatile uint32_t * const cdr_txLen = (uint32_t*)( TL2CDR_BASE + CDR_WriteTxLen ); //write
|
||||
volatile uint32_t * const cdr_txFifo = (uint32_t*)( TL2CDR_BASE + CDR_WriteTxFifo ); //write
|
||||
@@ -17,93 +18,32 @@ volatile uint32_t * const cdr_rxFifo = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxF
|
||||
volatile uint32_t * const cdr_IsLast = (uint32_t*)( TL2CDR_BASE + CDR_ReadIsLast ); //read
|
||||
volatile uint32_t * const cdr_rxCrc = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxCrc );
|
||||
volatile uint32_t * const cdr_txCrc = (uint32_t*)( TL2CDR_BASE + CDR_ReadTxCrc);
|
||||
|
||||
|
||||
#if 0
|
||||
void cdr_set_downStream(){
|
||||
*cdr_softReset = 1; //复位脉冲
|
||||
*cdr_direct = 0;
|
||||
}
|
||||
|
||||
void cdr_set_upStream(){
|
||||
*cdr_softReset = 1; //复位脉冲
|
||||
*cdr_direct = 1;
|
||||
}
|
||||
|
||||
|
||||
void cdr_simple_tx( uint32_t txLen, uint8_t operator, uint8_t* data){
|
||||
//发送下行包头
|
||||
assert(txLen < 2^12);
|
||||
assert(txLen > 8 );
|
||||
assert(txLen % 4 == 0 );
|
||||
assert(operator < 2^4);
|
||||
|
||||
*cdr_txLen = txLen;
|
||||
*cdr_txFifo = (uint32_t)( txLen << 20) | ( operator << 16) | 0x0000;
|
||||
*cdr_txFifo = (uint32_t)0x00;
|
||||
|
||||
for( uint32_t i = 0; i < (txLen-8)/4; i ++ ){
|
||||
*cdr_txFifo = data[4*i+3]<< 24 | data[4*i+2]<<16 | data[4*i+1]<< 8 | data[4*i+0] << 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
uint32_t cdr_wait_tx_finish(){
|
||||
// //等待发送完成标志
|
||||
// asm volatile (
|
||||
// "1:\n"
|
||||
// "andi %0, sp, 0x01\n"
|
||||
// "beqz %0, 1b\n"
|
||||
// "andi sp, sp, 0xFE\n"
|
||||
// :"+r"(flag)
|
||||
// );
|
||||
}
|
||||
|
||||
uint32_t cdr_wait_rx_start(){
|
||||
//接收第一个包
|
||||
asm volatile (
|
||||
"1:\n"
|
||||
"andi %0, sp, 0x04\n"
|
||||
"beqz %0, 1b\n"
|
||||
"andi sp, sp, 0xFB\n"
|
||||
:"+r"(flag)
|
||||
);
|
||||
}
|
||||
|
||||
uint32_t cdr_check_rx_fail(){
|
||||
|
||||
}
|
||||
|
||||
void cdr_simple_rx(uint32_t* rxLen, uint8_t* operator, uint8_t* data){
|
||||
|
||||
|
||||
uint32_t readDat;
|
||||
|
||||
readDat = *cdr_rxFifo;
|
||||
*operator = (readDat >> 16) & 0xf;
|
||||
*rxLen = readDat >> 20;
|
||||
readDat = *cdr_rxFifo;
|
||||
|
||||
for( uint32_t i = 0; i < ( *rxLen >> 2); i ++ ){ //一次传4byte
|
||||
readDat = *cdr_rxFifo;
|
||||
data[4*i+1] = (uint8_t)( (readDat >> 0) & 0xFF);
|
||||
data[4*i+0] = (uint8_t)( (readDat >> 8) & 0xFF);
|
||||
data[4*i+2] = (uint8_t)( (readDat >> 16) & 0xFF);
|
||||
data[4*i+3] = (uint8_t)( (readDat >> 24) & 0xFF);
|
||||
}
|
||||
|
||||
//CRC
|
||||
uint32_t crc = *cdr_rxFifo; //CRC
|
||||
|
||||
}
|
||||
|
||||
|
||||
void cdr_slave_function(){
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
volatile uint32_t * const tx0_softReset = (uint32_t*)( TL2CDR_BASE + TX0_WriteSoftReset );
|
||||
volatile uint32_t * const tx0_txLen = (uint32_t*)( TL2CDR_BASE + TX0_WriteTxLen );
|
||||
volatile uint32_t * const tx0_txFifo = (uint32_t*)( TL2CDR_BASE + TX0_WriteTxFifo );
|
||||
volatile uint32_t * const tx0_txCrc = (uint32_t*)( TL2CDR_BASE + TX0_ReadTxCrc );
|
||||
|
||||
volatile uint32_t * const tx1_softReset = (uint32_t*)( TL2CDR_BASE + TX1_WriteSoftReset );
|
||||
volatile uint32_t * const tx1_txLen = (uint32_t*)( TL2CDR_BASE + TX1_WriteTxLen );
|
||||
volatile uint32_t * const tx1_txFifo = (uint32_t*)( TL2CDR_BASE + TX1_WriteTxFifo );
|
||||
volatile uint32_t * const tx1_txCrc = (uint32_t*)( TL2CDR_BASE + TX1_ReadTxCrc );
|
||||
|
||||
volatile uint32_t * const rx0_softReset = (uint32_t*)( TL2CDR_BASE + RX0_WriteSoftReset );
|
||||
volatile uint32_t * const rx0_rxLen = (uint32_t*)( TL2CDR_BASE + RX0_ReadRxLen );
|
||||
volatile uint32_t * const rx0_rxFifo = (uint32_t*)( TL2CDR_BASE + RX0_ReadRxFifo );
|
||||
volatile uint32_t * const rx0_rxCrc = (uint32_t*)( TL2CDR_BASE + RX0_ReadRxCrc );
|
||||
volatile uint32_t * const rx0_rxTimerAim = (uint32_t*)( TL2CDR_BASE + RX0_WrtieLimitTimerAim );
|
||||
volatile uint32_t * const rx0_rxTxPair = (uint32_t*)( TL2CDR_BASE + RX0_WriteLimitTxPair );
|
||||
|
||||
volatile uint32_t * const rx1_softReset = (uint32_t*)( TL2CDR_BASE + RX1_WriteSoftReset );
|
||||
volatile uint32_t * const rx1_rxLen = (uint32_t*)( TL2CDR_BASE + RX1_ReadRxLen );
|
||||
volatile uint32_t * const rx1_rxFifo = (uint32_t*)( TL2CDR_BASE + RX1_ReadRxFifo );
|
||||
volatile uint32_t * const rx1_rxCrc = (uint32_t*)( TL2CDR_BASE + RX1_ReadRxCrc );
|
||||
volatile uint32_t * const rx1_rxTimerAim = (uint32_t*)( TL2CDR_BASE + RX1_WrtieLimitTimerAim );
|
||||
volatile uint32_t * const rx1_rxTxPair = (uint32_t*)( TL2CDR_BASE + RX1_WriteLimitTxPair );
|
||||
|
||||
volatile uint32_t * const HLM_status = (uint32_t*)( TL2CDR_BASE + HLM_ReadStatus );
|
||||
volatile uint32_t * const HLM_isLast = (uint32_t*)( TL2CDR_BASE + HLM_ReadIsLast );
|
||||
|
||||
@@ -5,50 +5,113 @@
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#define TL2CDR_BASE 0x10000000U
|
||||
#define TL2CDR_BASE 0x10000000U
|
||||
|
||||
|
||||
// volatile uint32_t *cdr_status = (uint32_t*)( 0x000 + 0x0 ); //read
|
||||
// volatile uint32_t *cdr_txLen = (uint32_t*)( 0x000 + 0x4 ); //write
|
||||
// volatile uint32_t *cdr_txFifo = (uint32_t*)( 0x000 + 0x8 ); //write
|
||||
// volatile uint32_t *cdr_direct = (uint32_t*)( 0x000 + 0xc ); //write
|
||||
#define OLD_CODE
|
||||
#ifdef OLD_CODE
|
||||
#define CDR_ReadStatus 0x00U
|
||||
#define CDR_WriteTxLen 0x04U
|
||||
#define CDR_WriteTxFifo 0x08U
|
||||
#define CDR_WriteTransDir 0x0cU
|
||||
#define CDR_WriteSoftReset 0x10U
|
||||
#define CDR_ReadRxLen 0x18U
|
||||
#define CDR_ReadRxFifo 0x1cU
|
||||
#define CDR_ReadIsLast 0x20U
|
||||
#define CDR_ReadTxCrc 0x24U
|
||||
#define CDR_ReadRxCrc 0x28U
|
||||
#define CDR_WriteLimitTimer 0x2cU
|
||||
|
||||
// volatile uint32_t *cdr_softReset = (uint32_t*)( 0x000 + 0x10 ); //write
|
||||
// volatile uint32_t *cdr_rxLen = (uint32_t*)( 0x000 + 0x18 ); //read
|
||||
// volatile uint32_t *cdr_rxFifo = (uint32_t*)( 0x000 + 0x1c ); //read
|
||||
#define CDR_INT_TXEND 14U
|
||||
#define CDR_INT_RXERROR 15U
|
||||
#define CDR_INT_RXSTART 16U
|
||||
#define CDR_INT_RXEND 17U
|
||||
#endif
|
||||
|
||||
#define CDR_ReadStatus 0x00
|
||||
#define CDR_WriteTxLen 0x04
|
||||
#define CDR_WriteTxFifo 0x08
|
||||
#define CDR_WriteTransDir 0x0c
|
||||
#define CDR_WriteSoftReset 0x10
|
||||
#define CDR_ReadRxLen 0x18
|
||||
#define CDR_ReadRxFifo 0x1c
|
||||
#define CDR_ReadIsLast 0x20
|
||||
#define CDR_ReadTxCrc 0x24
|
||||
#define CDR_ReadRxCrc 0x28
|
||||
#define CDR_WriteLimitTimer 0x2c
|
||||
|
||||
#define CDR_INT_TXEND 14
|
||||
#define CDR_INT_RXERROR 15
|
||||
#define CDR_INT_RXSTART 16
|
||||
#define CDR_INT_RXEND 17
|
||||
#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
|
||||
|
||||
|
||||
|
||||
#define TX0_WriteSoftReset 0x00U
|
||||
#define TX0_WriteTxLen 0x04U
|
||||
#define TX0_WriteTxFifo 0x08U
|
||||
#define TX0_ReadTxCrc 0x0CU
|
||||
|
||||
#define TX1_WriteSoftReset 0x10U
|
||||
#define TX1_WriteTxLen 0x14U
|
||||
#define TX1_WriteTxFifo 0x18U
|
||||
#define TX1_ReadTxCrc 0x1CU
|
||||
|
||||
#define RX0_WriteSoftReset 0x20U
|
||||
#define RX0_ReadRxLen 0x24U
|
||||
#define RX0_ReadRxFifo 0x28U
|
||||
#define RX0_ReadRxCrc 0x2CU
|
||||
#define RX0_WrtieLimitTimerAim 0x30U
|
||||
#define RX0_WriteLimitTxPair 0x34U
|
||||
|
||||
#define RX1_WriteSoftReset 0x40U
|
||||
#define RX1_ReadRxLen 0x44U
|
||||
#define RX1_ReadRxFifo 0x48U
|
||||
#define RX1_ReadRxCrc 0x4CU
|
||||
#define RX1_WrtieLimitTimerAim 0x50U
|
||||
#define RX1_WriteLimitTxPair 0x54U
|
||||
|
||||
#define HLM_ReadStatus 0x58U
|
||||
#define HLM_ReadIsLast 0x5CU
|
||||
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
extern volatile uint32_t * const cdr_status;// = (uint32_t*)( TL2CDR_BASE + CDR_ReadStatus ); //read
|
||||
extern volatile uint32_t * const cdr_txLen;// = (uint32_t*)( TL2CDR_BASE + CDR_WriteTxLen ); //write
|
||||
extern volatile uint32_t * const cdr_txFifo;// = (uint32_t*)( TL2CDR_BASE + CDR_WriteTxFifo ); //write
|
||||
extern volatile uint32_t * const cdr_direct;// = (uint32_t*)( TL2CDR_BASE + CDR_WriteTransDir ); //write
|
||||
extern volatile uint32_t * const cdr_softReset;// = (uint32_t*)( TL2CDR_BASE + CDR_WriteSoftReset ); //write
|
||||
extern volatile uint32_t * const cdr_rxLen;// = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxLen ); //read
|
||||
extern volatile uint32_t * const cdr_rxFifo;// = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxFifo ); //read
|
||||
extern volatile uint32_t * const cdr_IsLast;// = (uint32_t*)( TL2CDR_BASE + CDR_ReadIsLast ); //read
|
||||
extern volatile uint32_t * const cdr_rxCrc;// = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxCrc );
|
||||
extern volatile uint32_t * const cdr_txCrc;// = (uint32_t*)( TL2CDR_BASE + CDR_ReadTxCrc);
|
||||
// extern uint8_t gpio_read();
|
||||
// extern uint32_t gpio_write( uint32_t data );
|
||||
#ifdef OLD_CODE
|
||||
extern volatile uint32_t * const cdr_status;
|
||||
extern volatile uint32_t * const cdr_txLen;
|
||||
extern volatile uint32_t * const cdr_txFifo;
|
||||
extern volatile uint32_t * const cdr_direct;
|
||||
extern volatile uint32_t * const cdr_softReset;
|
||||
extern volatile uint32_t * const cdr_rxLen;
|
||||
extern volatile uint32_t * const cdr_rxFifo;
|
||||
extern volatile uint32_t * const cdr_IsLast;
|
||||
extern volatile uint32_t * const cdr_rxCrc;
|
||||
extern volatile uint32_t * const cdr_txCrc;
|
||||
#endif
|
||||
|
||||
// void gpio_test();
|
||||
extern volatile uint32_t * const tx0_softReset;
|
||||
extern volatile uint32_t * const tx0_txLen;
|
||||
extern volatile uint32_t * const tx0_txFifo;
|
||||
extern volatile uint32_t * const tx0_txCrc;
|
||||
|
||||
extern volatile uint32_t * const tx1_softReset;
|
||||
extern volatile uint32_t * const tx1_txLen;
|
||||
extern volatile uint32_t * const tx1_txFifo;
|
||||
extern volatile uint32_t * const tx1_txCrc;
|
||||
|
||||
extern volatile uint32_t * const rx0_softReset;
|
||||
extern volatile uint32_t * const rx0_rxLen;
|
||||
extern volatile uint32_t * const rx0_rxFifo;
|
||||
extern volatile uint32_t * const rx0_rxCrc;
|
||||
extern volatile uint32_t * const rx0_rxTimerAim;
|
||||
extern volatile uint32_t * const rx0_rxTxPair;
|
||||
|
||||
extern volatile uint32_t * const rx1_softReset;
|
||||
extern volatile uint32_t * const rx1_rxLen;
|
||||
extern volatile uint32_t * const rx1_rxFifo;
|
||||
extern volatile uint32_t * const rx1_rxCrc;
|
||||
extern volatile uint32_t * const rx1_rxTimerAim;
|
||||
extern volatile uint32_t * const rx1_rxTxPair;
|
||||
|
||||
extern volatile uint32_t * const HLM_status;
|
||||
extern volatile uint32_t * const HLM_isLast;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user