//----CAN接收函数------------------------------------- //功能: CAN发送函数 //参数: // byChip: CAN控制器选择 0~4(为兼容项目组代码,保留此参数,在SR5333中该参数 // 为0,SR5333 V1.01版本中只使用了一个CAN控制器) // txBuf: 报文的接收缓冲区 // len: 请求读取的长度 // pRd: 缓冲区读指针 //返回: 成功读取数据的长度 //----------------------------------------------------------------------------- uint32_t CAN_ReadData(uint8_t byChip, uint8_t* rxBuf, uint32_t len, uint32_t *pRd) { uint32_t rdLen=0x0000,ringlen,pkgnum,r_len; CAN_DevCtrl *CAN_DevCtrlTempptr=NULL; struct RingBuf *rxRingBuf=NULL; atom_low_t atom; //先作参数检查 if(rxBuf==NULL) return 0; if(byChip>=2) return 0; CAN_DevCtrlTempptr=CAN_DevCtrlPtr+byChip; rxRingBuf=CAN_DevCtrlTempptr->RcvRing; atom = Int_LowAtomStart(); ringlen=Ring_Check(rxRingBuf); Int_LowAtomEnd(atom); if(len>ringlen) { r_len=ringlen; } else { r_len=len; } rdLen=Ring_Read(rxRingBuf,rxBuf,r_len); pkgnum=rdLen/13; gs_u64AppRcvCnt[byChip]+=pkgnum; return rdLen; }
//----串口设备左手读函数------------------------------------------------------ //功能: 左手读用于上层设备,读取串口接收环形缓冲区的数据 //参数: uart_dev,被操作的设备的左手指针. // dst_buf,读缓冲区 // len,读入长度, //返回: 实际读出长度 //---------------------------------------------------------------------------- ptu32_t cmd_DriverRead(ptu32_t PrivateTag,u8 *buf, u32 len,u32 offset,u32 timeout) { u32 result; if(buf == NULL) return 0; // Lock_SempPend(&tg_cmd_buf_semp,timeout); result = Ring_Read(&recv_ring_buf,(u8*)buf,len); MplCmdStatus &= (~CN_MULTIPLEX_SENSINGBIT_READ); Multiplex_Set(pMultiplexCmd,MplCmdStatus); return result; }