Example #1
0
//----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;
}
Example #2
0
//----串口设备左手读函数------------------------------------------------------
//功能: 左手读用于上层设备,读取串口接收环形缓冲区的数据
//参数: 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;
}