📄 fesc_5554_daemon.c
字号:
/*====================================================================*/
/* @ */
/* ################################
## ##
## ESCIA ##
## ##
################################ */
void send_c_ESCIA_dpb(uint8_t schar)
{
push_dpb_data(&ESCIA_DP_BUF,schar);
}
void ESCIA_out_daemon(void)
{ uint8_t schar;
if((ESCIA_DP_BUF.n > 0)&&(ESCI_A.SR.B.TDRE ==1))
{ pop_dpb_data(&ESCIA_DP_BUF,&schar);
ESCI_A.SR.R = 0x80000000;
ESCI_A.DR.B.D = (uint8_t) schar;
}
}
/*====================================================================*/
/* @ */
/* ################################
## ##
## FPGA SPI ##
## ##
################################ */
//spi0-5 FPGA SPI, all in Master Mode
void FPGA_SPI_master_daemon(void)
{
uint8_t i;
for(i=0;i<6;i++)
{ //------------------
if(SXC.CH[i].SXC_SR.B.RDF == 1)
{ SBP_Buf[i].cRx = SXC.CH[i].SPI_HOST_DATA_REG.B.DATA;
SXC.CH[i].SXC_CR.B.RDFC = 1;
////
if((SBP_debug_info[i]&SBP_DETAIL_INFO_MASK)!=0)
printp(send_c_ESCIA_dpb,"%d t:%02X r:%02X\n\r",i,SBP_Buf[i].cTx,SBP_Buf[i].cRx);
////
SBP_Buf[i].cTx = SBP_Master_Parser(i,SBP_Buf[i].cRx);
SPI_LED_Refresh[i] = 1;
}
if((SXC.CH[i].SXC_SR.B.BUSY==0)&&(SBP_Buf[i].isFinished == 0))
{ SXC.CH[i].SPI_HOST_DATA_REG.B.DATA = SBP_Buf[i].cTx;
SXC.CH[i].SXC_CR.B.TCFC = 1;
SXC.CH[i].SXC_CR.B.SEND = 1;
}
}
}
/*====================================================================*/
/* @ */
/* ################################
## ##
## SSP LOOP ##
## ##
################################ */
void SYS_TICK_Daemon(void)
{
if(sys_tick) sys_tick--;
if(temp_tick) temp_tick--;
}
/*
--------------------+ +--------------------
本系 | | 对系
| |
|Self_CB| =MT====|=>=================================>=|====MF= |Mate_CB|
| |
|Mate_CB| =MF====|=<=================================<=|====MT= |Self_CB|
| |
--------------------+ +--------------------
*/
/*====================================================================*/
/* @ */
/* ################################
## ##
## Master To ##
## ##
################################ */
void MT_SPI_master_daemon(void)
{
if(SXC.CH[6].SXC_SR.B.RDF == 1)
{ SBP_Buf[6].cRx = SXC.CH[6].SPI_HOST_DATA_REG.B.DATA;
SXC.CH[6].SXC_CR.B.RDFC = 1;
////
if((SBP_debug_info[6]&SBP_DETAIL_INFO_MASK)!=0)
printp(send_c_ESCIA_dpb,"%d t:%02X r:%02X\n\r",6,SBP_Buf[6].cTx,SBP_Buf[6].cRx);
////
SBP_Buf[6].cTx = SBP_Master_Parser(6,SBP_Buf[6].cRx);
SPI_LED_Refresh[6] = 1;
}
if((SXC.CH[6].SXC_SR.B.BUSY==0)&&(SBP_Buf[6].isFinished == 0))
{ SXC.CH[6].SPI_HOST_DATA_REG.B.DATA = SBP_Buf[6].cTx;
SXC.CH[6].SXC_CR.B.TCFC = 1;
SXC.CH[6].SXC_CR.B.SEND = 1;
}
}
/*====================================================================*/
/* @ */
/* ################################
## ##
## Master From ##
## ##
################################ */
void MF_SPI_slave_daemon(void)
{ uint8_t i;
if(SBP_Buf[7].isFinished == 1)
{ SBP_Buf[7].isFinished = 0;
printp(send_c_ESCIA_dpb,"ERROR: new MF data before last packet is processed\n\r");
}
//--------通信协议处理------
if(SXC.CH[7].SXC_SR.B.RDF == 1)
{ SBP_Buf[7].cRx = SXC.CH[7].SPI_HOST_DATA_REG.B.DATA;
SXC.CH[7].SXC_CR.B.RDFC = 1;
////
if((SBP_debug_info[7]&SBP_DETAIL_INFO_MASK)!=0)
printp(send_c_ESCIA_dpb,"%d t:%02X r:%02X\n\r",7,SBP_Buf[7].cTx,SBP_Buf[7].cRx);
////
SBP_Buf[7].cTx = SBP_Slave_Parser(&SBP_Buf[7],SBP_Buf[7].cRx);
SPI_LED_Refresh[7] = 1;
}
///////if((SXC.CH[7].SXC_SR.B.BUSY==0)&&(SBP_Buf[7].isFinished == 0))
{ SXC.CH[7].SPI_HOST_DATA_REG.B.DATA = SBP_Buf[7].cTx;
SXC.CH[7].SXC_CR.B.TCFC = 1;
SXC.CH[7].SXC_CR.B.SEND = 1;
}
//---------通信内容处理-----
if(SBP_Buf[7].returnStat == SBP_RTSTUS_INSTRC_RX_OK)
{
SBP_Buf[7].returnStat = SBP_RTSTUS_UNKNOWN;
if(SBP_Buf[7].InstrBuffer[1] == 'w')
{
SBP_Buf[7].amIWriteData = 0;
SBP_Buf[7].ssSPIStat = spistRxReady;
}
else //对于现在的场合,对系不需要通过这个SPI通道来读取内容
//对系只会往这个通道里写入内容,写入的内容用于刷新Mate_CB结构体
{ printp(send_c_ESCIA_dpb,"ERROR: not suppose to read from MF channel\n\r");
SBP_Buf[7].amIWriteData = 1;
SBP_Buf[7].ssSPIStat = spistTxReady;
////读取数据
for(i=0;i<sizeof(MBCtrlBlock_tag);i++)
SBP_Buf[7].TxBuffer[i] = *(((uint8_t*)(&Self_CB))+i);
SBP_Buf[7].iTxBufferLen = sizeof(MBCtrlBlock_tag);
}
}
//-------------------------
if(SBP_Buf[7].isFinished == 1)
{ SXC.CH[7].SXC_CR.B.self_packet_done = 1;
}
}
void MF_SPI_ALL_DONE_daemon(void)
{ uint8_t i;
if(SXC.CH[7].SXC_SR.B.both_packet_done == 1)
{
if((SBP_debug_info[7]&SXC_ENABLE_MASK) != 0 )
{
if( SXC.CH[7].SXC_SR.B.slave_fail_first
|| SXC.CH[7].SXC_SR.B.master_fail_first
||(SXC.CH[7].SELF_WCR.B.CNT != SXC.CH[7].MATE_WCR.B.CNT)
||(SXC.CH[7].SELF_PCR.B.CNT != SXC.CH[7].MATE_PCR.B.CNT)
)
{ SBP_Buf[7].returnStat += SBP_RTSTUS_SXC_Veto;
Mate_CB.alive = 1; //even the transmition wrong, mate is still alive
dump_SXC_CH_info(7);
}
}
if((SBP_debug_info[7]&SBP_GENERAL_INFO_MASK)!=0)
dump_SBP_lastPack(7);
if( (SBP_Buf[7].returnStat == SBP_RTSTUS_OK)
&&(SBP_Buf[7].iRxBufferLen==sizeof(MBCtrlBlock_tag))
)
{ //对系发送数据成功
for(i=0;i<sizeof(MBCtrlBlock_tag);i++)
*(((uint8_t*)(&Mate_CB))+i) = SBP_Buf[7].RxBuffer[i];
}
init_SBP_Buf(7);
SBP_Buf[7].iRxBufferLen = 0;
SBP_Buf[7].isFinished = 0; //acctivate
SXC.CH[7].SXC_CR.B.PACKET_START = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -