⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 candrv.c

📁 vxWorks下的can总线驱动
💻 C
📖 第 1 页 / 共 4 页
字号:

	case CAN_RXID_SET:
	    if (CanRxIDSet(pChan, arg) != OK)
			result = ERROR;
	    break;

	case CAN_RXID_GET:
	    *(int *)arg = pChan->RxID;
	    return (OK);

	default:
	    return (ERROR);
	}
	printf("CanIoctl funtion has been set \n");
    return (result);
}
/******************************************************************************
*
* CanBaudSet - 改变can设备的波特率
*设置can的波特率,设置时不使能中断
*波特率只能为1M 500K 250K 125K 100K 75K 50K 
*
* 返回:OK或者ERROR
* 
******************************************************************************/

LOCAL STATUS CanBaudSet
    (
    Can_DEV *	pcan_chan,
    UINT32		baud
    )
{
	register int i;
	i = 0;
    if (!baud)
	return (ERROR);
    if (baud != pcan_chan->baudRate)
	{
		UINT32 val;
		int oldlevel;
		
		switch(baud)
		{
		case 1000000:
			val = 0x045B2005;
			break;
		case 500000:
			val = ((PRESDIV1(baud)) << 24)| CTRL_RJW | CTRL_PSEG1 | CTRL_PSEG2 | CTRL_CLK_SRC | CTRL_SMP | CTRL_PROPSEG;
			break;
		case 125000:
			val = ((PRESDIV1(baud)) << 24)| CTRL_RJW | CTRL_PSEG1 | CTRL_PSEG2 | CTRL_CLK_SRC | CTRL_SMP | CTRL_PROPSEG;
			break;
		case 100000:
			val = ((PRESDIV1(baud)) << 24)| CTRL_RJW | CTRL_PSEG1 | CTRL_PSEG2 | CTRL_CLK_SRC | CTRL_SMP | CTRL_PROPSEG;
			break;
		case 75000:
			val = ((PRESDIV1(baud)) << 24)| CTRL_RJW | CTRL_PSEG1 | CTRL_PSEG2 | CTRL_CLK_SRC | CTRL_SMP | CTRL_PROPSEG;
			break;
		case 50000:
			val = ((PRESDIV1(baud)) << 24)| CTRL_RJW | CTRL_PSEG1 | CTRL_PSEG2 | CTRL_CLK_SRC | CTRL_SMP | CTRL_PROPSEG;
			break;
		default:
			return ERROR;
		}
		
		oldlevel = intLock ();
		
		/*设置FRZ和HALT位,使CAN进入Freeze模式,进入管理模式*/
		CANDEV_WRITE(pcan_chan->mcr,
			MCR_MENE | MCR_FRZ | MCR_HALT | MCR_SUPV | MCR_MAXMB);
		
		while((CANDEV_READ(pcan_chan->mcr) & 0x01000000) == 0x00000000) //等待can进入Freeze模式
		{
			i++;
			if(i >= 40000)
			{
				return ERROR;
			}
		}
		
		CANDEV_WRITE(pcan_chan->ctrl,val);
		
		/*退出FREEZE模式,退出管理模式*/
		CANDEV_WRITE(pcan_chan->mcr,
			MCR_MENE | MCR_MAXMB);
		
		pcan_chan->baudRate = baud;
		intUnlock (oldlevel);
	}
    return (OK);
}
/******************************************************************************
*
* CanIDTxSet - 改变can信息缓冲区MB0的ID
*设置信息缓冲区ID,设置时理论上可以不用使该CAN进入FREEZE模式
*但为了安全起见,还是考虑进入FREEZE模式并且不使能中断
*
* 返回:OK或者ERROR
* 
******************************************************************************/
LOCAL STATUS CanTxIDSet 
(
 Can_DEV *pcan_chan,
 UINT32 Id
 )
{
	register int i;
	UINT32 MbufId;
	int oldlevel;
	i = 0;
	if((Id ==0) || (Id > 2047))
	{
		printf("The TXID number is too large!\n");
		return ERROR;
	}
	if(Id != pcan_chan->TxID)
	{
		
		MbufId = Id << 18;

		oldlevel = intLock ();
		
		/*设置FRZ和HALT位,使CAN进入Freeze模式,进入管理模式*/
		CANDEV_WRITE(pcan_chan->mcr,
			MCR_MENE | MCR_FRZ | MCR_HALT | MCR_SUPV | MCR_MAXMB);
		
		while((CANDEV_READ(pcan_chan->mcr) & 0x01000000) == 0x00000000) //等待can进入Freeze模式
		{
			i++;
			if(i >= 40000)
			{
				printf("CAN didn't enter into freeze mode!");
				return ERROR;
			}
		}
		
		CANDEV_WRITE(pcan_chan->txcode,
		TX_NOTENABLE | DEFAULT_LENGTH);
		CANDEV_WRITE(pcan_chan->txID,MbufId); //写发送缓冲区ID
		


		/*退出FREEZE模式,退出管理模式*/
		CANDEV_WRITE(pcan_chan->mcr,
			MCR_MENE | MCR_MAXMB);

		pcan_chan->TxID = Id;
		intUnlock (oldlevel);
	}
	
	return OK;
}

/******************************************************************************
*
* CanIDRxSet - 改变can信息缓冲区MB1的ID
*设置信息缓冲区ID,设置时理论上可以不用使该CAN进入FREEZE模式
*但为了安全起见,还是考虑进入FREEZE模式并且不使能中断
*
* 返回:OK或者ERROR
* 
******************************************************************************/
LOCAL STATUS CanRxIDSet 
(
 Can_DEV *pcan_chan,
 UINT32 Id
 )
{
	register int i;
	i = 0;
	if((Id ==0) || (Id > 2047))
	{
		printf("The RXID number is too large!\n");
		return ERROR;
	}
	if(Id != pcan_chan->RxID)
	{
		UINT32 MbufId;
		int oldlevel;
		MbufId = Id << 18;

		oldlevel = intLock ();
		
		/*设置FRZ和HALT位,使CAN进入Freeze模式,进入管理模式*/
		CANDEV_WRITE(pcan_chan->mcr,
			MCR_MENE | MCR_FRZ | MCR_HALT | MCR_SUPV | MCR_MAXMB);
		
		while((CANDEV_READ(pcan_chan->mcr) & 0x01000000) == 0x00000000) //等待can进入Freeze模式
		{
			i++;
			if(i >= 40000)
			{
				printf("CAN didn't enter into freeze mode!");
				return ERROR;
			}
		}

		CANDEV_WRITE(pcan_chan->rxcode,
		RX_NOTENABLE | DEFAULT_LENGTH);
		CANDEV_WRITE(pcan_chan->rxID,MbufId);//写接收缓冲区ID

		CANDEV_WRITE(pcan_chan->rxcode,
		RX_ENABLE | DEFAULT_LENGTH);
		/*退出FREEZE模式,退出管理模式*/
		CANDEV_WRITE(pcan_chan->mcr,
			MCR_MENE | MCR_MAXMB);

		pcan_chan->RxID = Id;
		intUnlock (oldlevel);
	}
	return OK;
}
/******************************************************************************
*
* CanDevInit - can设备初始化程序
*初始化CAN设备结构寄存器地址,并调用Initcan函数对CAN寄存器进行初始化
*
*返回:无
* 
*参数:无
******************************************************************************/
void CanDevInit (void)
{
	int i;
	for(i=0;i<NUM_CAN;i++)
	{
		can_chan_dev[i].clkRate = MASTER_CLOCK;/*默认系统主频为150MHz*/
		can_chan_dev[i].baudRate = CAN_DEFAULT_BAUD;
		if(i == 0)
		{
			can_chan_dev[i].TxID = 1;
			can_chan_dev[i].RxID = 2;
		}
		else
		{
			can_chan_dev[i].TxID = 2;
			can_chan_dev[i].RxID = 1;
		}
		can_chan_dev[i].Flag_canOpen  = CAN_NO;

		/*初始化发送缓冲区指针及发送计数器*/
		can_chan_dev[i].ptx = can_chan_dev[i].tx_Buff;
		can_chan_dev[i].tx_number = 0;
		can_chan_dev[i].tx_length =0;

		/*初始化接收缓冲区指针及接收计数器*/
		can_chan_dev[i].prx_write = can_chan_dev[i].rx_Buff;
		can_chan_dev[i].prx_read = can_chan_dev[i].rx_Buff;
		can_chan_dev[i].rx_number = 0;
		can_chan_dev[i].rx_length = 0;
		
		if(i == 0)/* Initialize Port FECI2C PAR to have Can 0 TX/RX signals enabled */
		{
#if 0
			(*M523X_GPIO_PAR_FECI2C(IPS_BASE)) &= 0xF0;
			(*M523X_GPIO_PAR_FECI2C(IPS_BASE)) |= 0x0A;
#endif

			(*M523X_GPIO_PAR_UART(IPS_BASE)) &= 0xF0FF;
			(*M523X_GPIO_PAR_UART(IPS_BASE)) |= 0x0A00;
		}
		else/* Initialize Port UART PAR to have Can 1 TX/RX signals enabled */
		{
			(*M523X_GPIO_PAR_UART(IPS_BASE)) |= 0x4000;
		}
		
		/*初始化Flex_can设备结构寄存器*/
		can_chan_dev[i].mcr = M523X_CAN_CANMCR(IPS_BASE,i);
		can_chan_dev[i].ctrl = M523X_CAN_CANCTRL(IPS_BASE,i);        
		can_chan_dev[i].timer = M523X_CAN_TIMER(IPS_BASE,i);       
		can_chan_dev[i].rxgmask = M523X_CAN_RXGMASK(IPS_BASE,i);     
		can_chan_dev[i].rx14mask = M523X_CAN_RX14MASK(IPS_BASE,i);    
		can_chan_dev[i].rx15mask = M523X_CAN_RX15MASK(IPS_BASE,i);    
		can_chan_dev[i].errcnt = M523X_CAN_ERRCNT(IPS_BASE,i);      
		can_chan_dev[i].errstat = M523X_CAN_ERRSTAT(IPS_BASE,i);     
		can_chan_dev[i].imask = M523X_CAN_IMASK(IPS_BASE,i);       
		can_chan_dev[i].iflag = M523X_CAN_IFLAG(IPS_BASE,i);       
		
		can_chan_dev[i].txcode = M523X_CAN_MBUF0_CTRL(IPS_BASE,i);      
		can_chan_dev[i].txlength = M523X_CAN_MBUF0_CTRL(IPS_BASE,i);    
		can_chan_dev[i].txtimestamp = M523X_CAN_MBUF0_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].txID = M523X_CAN_MBUF0_ID(IPS_BASE,i);        
		can_chan_dev[i].txdata0 = M523X_CAN_MBUF0_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].txdata1 = M523X_CAN_MBUF0_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].txdata2 = M523X_CAN_MBUF0_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].txdata3 = M523X_CAN_MBUF0_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].txdata4 = M523X_CAN_MBUF0_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].txdata5 = M523X_CAN_MBUF0_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].txdata6 = M523X_CAN_MBUF0_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].txdata7 = M523X_CAN_MBUF0_BYTE7(IPS_BASE,i);     
		
		can_chan_dev[i].rxcode = M523X_CAN_MBUF1_CTRL(IPS_BASE,i);      
		can_chan_dev[i].rxlength = M523X_CAN_MBUF1_CTRL(IPS_BASE,i);    
		can_chan_dev[i].rxtimestamp = M523X_CAN_MBUF1_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].rxID = M523X_CAN_MBUF1_ID(IPS_BASE,i);        
		can_chan_dev[i].rxdata0 = M523X_CAN_MBUF1_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].rxdata1 = M523X_CAN_MBUF1_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].rxdata2 = M523X_CAN_MBUF1_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].rxdata3 = M523X_CAN_MBUF1_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].rxdata4 = M523X_CAN_MBUF1_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].rxdata5 = M523X_CAN_MBUF1_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].rxdata6 = M523X_CAN_MBUF1_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].rxdata7 = M523X_CAN_MBUF1_BYTE7(IPS_BASE,i);
		
		can_chan_dev[i].mb2code = M523X_CAN_MBUF2_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb2length = M523X_CAN_MBUF2_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb2timestamp = M523X_CAN_MBUF2_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb2ID = M523X_CAN_MBUF2_ID(IPS_BASE,i);        
		can_chan_dev[i].mb2data0 = M523X_CAN_MBUF2_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb2data1 = M523X_CAN_MBUF2_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb2data2 = M523X_CAN_MBUF2_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb2data3 = M523X_CAN_MBUF2_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb2data4 = M523X_CAN_MBUF2_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb2data5 = M523X_CAN_MBUF2_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb2data6 = M523X_CAN_MBUF2_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb2data7 = M523X_CAN_MBUF2_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb3code = M523X_CAN_MBUF3_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb3length = M523X_CAN_MBUF3_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb3timestamp = M523X_CAN_MBUF3_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb3ID = M523X_CAN_MBUF3_ID(IPS_BASE,i);        
		can_chan_dev[i].mb3data0 = M523X_CAN_MBUF3_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb3data1 = M523X_CAN_MBUF3_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb3data2 = M523X_CAN_MBUF3_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb3data3 = M523X_CAN_MBUF3_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb3data4 = M523X_CAN_MBUF3_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb3data5 = M523X_CAN_MBUF3_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb3data6 = M523X_CAN_MBUF3_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb3data7 = M523X_CAN_MBUF3_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb4code = M523X_CAN_MBUF4_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb4length = M523X_CAN_MBUF4_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb4timestamp = M523X_CAN_MBUF4_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb4ID = M523X_CAN_MBUF4_ID(IPS_BASE,i);        
		can_chan_dev[i].mb4data0 = M523X_CAN_MBUF4_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb4data1 = M523X_CAN_MBUF4_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb4data2 = M523X_CAN_MBUF4_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb4data3 = M523X_CAN_MBUF4_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb4data4 = M523X_CAN_MBUF4_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb4data5 = M523X_CAN_MBUF4_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb4data6 = M523X_CAN_MBUF4_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb4data7 = M523X_CAN_MBUF4_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb5code = M523X_CAN_MBUF5_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb5length = M523X_CAN_MBUF5_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb5timestamp = M523X_CAN_MBUF5_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb5ID = M523X_CAN_MBUF5_ID(IPS_BASE,i);        
		can_chan_dev[i].mb5data0 = M523X_CAN_MBUF5_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb5data1 = M523X_CAN_MBUF5_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb5data2 = M523X_CAN_MBUF5_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb5data3 = M523X_CAN_MBUF5_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb5data4 = M523X_CAN_MBUF5_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb5data5 = M523X_CAN_MBUF5_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb5data6 = M523X_CAN_MBUF5_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb5data7 = M523X_CAN_MBUF5_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb6code = M523X_CAN_MBUF6_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb6length = M523X_CAN_MBUF6_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb6timestamp = M523X_CAN_MBUF6_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb6ID = M523X_CAN_MBUF6_ID(IPS_BASE,i);        
		can_chan_dev[i].mb6data0 = M523X_CAN_MBUF6_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb6data1 = M523X_CAN_MBUF6_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb6data2 = M523X_CAN_MBUF6_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb6data3 = M523X_CAN_MBUF6_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb6data4 = M523X_CAN_MBUF6_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb6data5 = M523X_CAN_MBUF6_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb6data6 = M523X_CAN_MBUF6_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb6data7 = M523X_CAN_MBUF6_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb7code = M523X_CAN_MBUF7_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb7length = M523X_CAN_MBUF7_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb7timestamp = M523X_CAN_MBUF7_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb7ID = M523X_CAN_MBUF7_ID(IPS_BASE,i);        
		can_chan_dev[i].mb7data0 = M523X_CAN_MBUF7_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb7data1 = M523X_CAN_MBUF7_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb7data2 = M523X_CAN_MBUF7_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb7data3 = M523X_CAN_MBUF7_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb7data4 = M523X_CAN_MBUF7_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb7data5 = M523X_CAN_MBUF7_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb7data6 = M523X_CAN_MBUF7_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb7data7 = M523X_CAN_MBUF7_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb8code = M523X_CAN_MBUF8_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb8length = M523X_CAN_MBUF8_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb8timestamp = M523X_CAN_MBUF8_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb8ID = M523X_CAN_MBUF8_ID(IPS_BASE,i);        
		can_chan_dev[i].mb8data0 = M523X_CAN_MBUF8_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb8data1 = M523X_CAN_MBUF8_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb8data2 = M523X_CAN_MBUF8_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb8data3 = M523X_CAN_MBUF8_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb8data4 = M523X_CAN_MBUF8_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb8data5 = M523X_CAN_MBUF8_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb8data6 = M523X_CAN_MBUF8_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb8data7 = M523X_CAN_MBUF8_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb9code = M523X_CAN_MBUF9_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb9length = M523X_CAN_MBUF9_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb9timestamp = M523X_CAN_MBUF9_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb9ID = M523X_CAN_MBUF9_ID(IPS_BASE,i);        
		can_chan_dev[i].mb9data0 = M523X_CAN_MBUF9_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb9data1 = M523X_CAN_MBUF9_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb9data2 = M523X_CAN_MBUF9_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb9data3 = M523X_CAN_MBUF9_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb9data4 = M523X_CAN_MBUF9_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb9data5 = M523X_CAN_MBUF9_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb9data6 = M523X_CAN_MBUF9_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb9data7 = M523X_CAN_MBUF9_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb10code = M523X_CAN_MBUF10_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb10length = M523X_CAN_MBUF10_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb10timestamp = M523X_CAN_MBUF10_TMSTP(IPS_BASE,i); 
		can_chan_dev[i].mb10ID = M523X_CAN_MBUF10_ID(IPS_BASE,i);        
		can_chan_dev[i].mb10data0 = M523X_CAN_MBUF10_BYTE0(IPS_BASE,i);     
		can_chan_dev[i].mb10data1 = M523X_CAN_MBUF10_BYTE1(IPS_BASE,i);     
		can_chan_dev[i].mb10data2 = M523X_CAN_MBUF10_BYTE2(IPS_BASE,i);     
		can_chan_dev[i].mb10data3 = M523X_CAN_MBUF10_BYTE3(IPS_BASE,i);     
		can_chan_dev[i].mb10data4 = M523X_CAN_MBUF10_BYTE4(IPS_BASE,i);     
		can_chan_dev[i].mb10data5 = M523X_CAN_MBUF10_BYTE5(IPS_BASE,i);     
		can_chan_dev[i].mb10data6 = M523X_CAN_MBUF10_BYTE6(IPS_BASE,i);     
		can_chan_dev[i].mb10data7 = M523X_CAN_MBUF10_BYTE7(IPS_BASE,i);

		can_chan_dev[i].mb11code = M523X_CAN_MBUF11_CTRL(IPS_BASE,i);      
		can_chan_dev[i].mb11length = M523X_CAN_MBUF11_CTRL(IPS_BASE,i);    
		can_chan_dev[i].mb11timestamp = M523X_CAN_MBUF11_TMSTP(IPS_BASE,i); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -