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

📄 co_comm.c

📁 在pic单片机上实现canopen协议通讯
💻 C
📖 第 1 页 / 共 2 页
字号:
			}
			else
//			if (COMM_NETCTL_EMCY_TF) 
//			{
//				if (COMM_NETCTL_EMCY_EN) 
//				{
//					if (!COMM_STATE_STOP) {mCANIsPutReady(COMM_MSGGRP_NETCTL | COMM_NETCTL_EMCY); _CO_COMM_EMCY_TXEvent(); mCANSendMessage();}
//				} 
//				
//				COMM_NETCTL_EMCY_TF = 0;
//			}
//			else 
			//Error, a message was queued in an object that does not exist
			{COMM_NETCTL_TF = 0;}
		}
		else
		
		if (COMM_SDO_TF)
		{
			if (!COMM_STATE_STOP)
			{
				if (COMM_SDO_1_TF) 
				{
					if (COMM_SDO_1_EN) {mCANIsPutReady(COMM_MSGGRP_SDO | COMM_SDO_1); _CO_COMM_SDO1_TXEvent(); mCANSendMessage();} 
					COMM_SDO_1_TF = 0;
				}
				else
//				if (COMM_SDO_2_TF) 
//				{
//					if (COMM_SDO_2_EN) {mCANIsPutReady(COMM_MSGGRP_SDO | COMM_SDO_2); _CO_COMM_SDO2_TXEvent(); mCANSendMessage();} 
//					COMM_SDO_2_TF = 0;
//				}
//				else
//				if (COMM_SDO_3_TF) 
//				{
//					if (COMM_SDO_3_EN) {mCANIsPutReady(COMM_MSGGRP_SDO | COMM_SDO_3); _CO_COMM_SDO3_TXEvent(); mCANSendMessage();} 
//					COMM_SDO_3_TF = 0;
//				}
//				else
//				if (COMM_SDO_4_TF) 
//				{
//					if (COMM_SDO_4_EN) {mCANIsPutReady(COMM_MSGGRP_SDO | COMM_SDO_4); _CO_COMM_SDO4_TXEvent(); mCANSendMessage();} 
//					COMM_SDO_4_TF = 0;
//				}
//				else
			
				//Error, a message was queued in an object that does not exist
				{COMM_SDO_TF = 0;}
			}
		}
		else
		
		if (COMM_PDO_TF)
		{
			if (COMM_STATE_OPER)
			if (!COMM_STATE_STOP)
			{
				if (COMM_PDO_1_TF) 
				{
					if (COMM_TPDO_1_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_1); _CO_COMM_PDO1_TXEvent(); mCANSendMessage();}
					COMM_PDO_1_TF = 0;
				}
				else
				#if CO_NUM_OF_PDO > 1
				if (COMM_PDO_2_TF) 
				{
					if (COMM_TPDO_2_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_2); _CO_COMM_PDO2_TXEvent(); mCANSendMessage();}
					COMM_PDO_2_TF = 0;
				}
				else
				#endif
				#if CO_NUM_OF_PDO > 2
				if (COMM_PDO_3_TF) 
				{
					if (COMM_TPDO_3_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_3); _CO_COMM_PDO3_TXEvent(); mCANSendMessage();}
					COMM_PDO_3_TF = 0;
				}
				else
				#endif
				#if CO_NUM_OF_PDO > 3
				if (COMM_PDO_4_TF) 
				{
					if (COMM_TPDO_4_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_4); _CO_COMM_PDO4_TXEvent(); mCANSendMessage();}
					COMM_PDO_4_TF = 0;
				}
				else
				#endif
//				if (COMM_PDO_5_TF) 
//				{
//					if (COMM_PDO_5_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_5); _CO_COMM_PDO5_TXEvent(); mCANSendMessage();}
//					COMM_PDO_5_TF = 0;
//				}
//				else
//				if (COMM_PDO_6_TF) 
//				{
//					if (COMM_PDO_6_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_6); _CO_COMM_PDO6_TXEvent(); mCANSendMessage();}
//					COMM_PDO_6_TF = 0;
//				}
//				else
//				if (COMM_PDO_7_TF) 
//				{
//					if (COMM_PDO_7_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_7); _CO_COMM_PDO7_TXEvent(); mCANSendMessage();}
//					COMM_PDO_7_TF = 0;
//				}
//				else
//				if (COMM_PDO_8_TF) 
//				{
//					if (COMM_PDO_8_EN) {mCANIsPutReady(COMM_MSGGRP_PDO | COMM_PDO_8); _CO_COMM_PDO8_TXEvent(); mCANSendMessage();}
//					COMM_PDO_8_TF = 0;
//				}
//				else
				//Error, a message was queued in an object that does not exist
				{COMM_PDO_TF = 0;}
			}	
		}		
	}
}



/*********************************************************************
 * Function:        void _CO_COMMTXFinEventManager(void)
 *
 * PreCondition:    
 *
 * Input:       	none
 *                  
 * Output:         	none  
 *
 * Side Effects:    none
 *
 * Overview:        This function dispatches any transmit finish events.
 *
 * Note:          	
 ********************************************************************/
void _CO_COMMTXFinEventManager(void)
{
	// Call the driver to determine if a message has been place on the bus
	mCANIsPutFin();
	
	// If a message has been placed on the bus, then who's message
	// was it and generate an appropriate event
	if (COMM_STATE_PREOP)
	if (mCANFetchRetHandle())
	{	
		// Test the group of the message 
		switch(mCANFetchRetHandle() & COMM_MSGGRP_MASK)
		{
			case COMM_MSGGRP_NETCTL:		// Network management
				switch(mCANFetchRetHandle() & COMM_MSG_MASK)
				{
//					case COMM_NETCTL_NMTE: 
//						if (COMM_NETCTL_NMTE_EN) _CO_COMM_NMTE_TXFinEvent();
//						break;
//					case COMM_NETCTL_EMCY: 
//						if (COMM_NETCTL_EMCY_EN) {if (!COMM_STATE_STOP) _CO_COMM_EMCY_TXFinEvent();}
//						break;
					default:
						// Driver error: driver sent a message that has no endpoint	
						/*call func*/
						break;
				}
				break;
							
			case COMM_MSGGRP_SDO:		// Addressed messages
				if (!COMM_STATE_STOP)
				{
					switch(mCANFetchRetHandle() & COMM_MSG_MASK)
					{
//						case COMM_SDO_1:	//SDO1
//							if (COMM_SDO_1_EN) _CO_COMM_SDO1_TXFinEvent();
//							break;
//						case COMM_SDO_2:	//SDO1
//							if (COMM_SDO_2_EN) _CO_COMM_SDO2_TXFinEvent();
//							break;
//						case COMM_SDO_3:	//SDO1
//							if (COMM_SDO_3_EN) _CO_COMM_SDO3_TXFinEvent();
//							break;
//						case COMM_SDO_4:	//SDO1
//							if (COMM_SDO_4_EN) _CO_COMM_SDO4_TXFinEvent();
//							break;			
						default:
							// not valid, driver error	
							/*call func*/
							break;
					}
				}
				break;
										
			case COMM_MSGGRP_PDO:		// Direct messages
				if (COMM_STATE_OPER)
				if (!COMM_STATE_STOP)
				{
					switch(mCANFetchRetHandle() & COMM_MSG_MASK)
					{
						case COMM_PDO_1:	//TPDO1
							if (COMM_TPDO_1_EN){CO_PDO1TXFinEvent();}
							break;
						#if CO_NUM_OF_PDO > 1
						case COMM_PDO_2:	//RPDO1
							if (COMM_TPDO_2_EN){CO_PDO2TXFinEvent();}
							break;
						#endif
						#if CO_NUM_OF_PDO > 2
						case COMM_PDO_3:	//TPDO2
							if (COMM_TPDO_3_EN){CO_PDO3TXFinEvent();}
							break;
						#endif
						#if CO_NUM_OF_PDO > 3
						case COMM_PDO_4:	//RPDO2
							if (COMM_TPDO_4_EN){CO_PDO4TXFinEvent();}
							break;
						#endif
//						case COMM_PDO_5:	//RPDO2
//							if (COMM_PDO_5_EN){CO_PDO5TXFinEvent();}
//							break;
//						case COMM_PDO_6:	//RPDO2
//							if (COMM_PDO_6_EN){CO_PDO6TXFinEvent();}
//							break;
//						case COMM_PDO_7:	//RPDO2
//							if (COMM_PDO_7_EN){CO_PDO7TXFinEvent();}
//							break;
//						case COMM_PDO_8:	//RPDO2
//							if (COMM_PDO_8_EN){CO_PDO8TXFinEvent();}
//							break;
						default:
							// not valid, driver error
							/*call func*/		
							break;
					}
				}
				break;
			
			default:
				// not valid, driver error
				/*call func*/
				break;
		}
	}
}




/*********************************************************************
 * Function:        void _CO_COMMLSTimeEventManager(void)
 *
 * PreCondition:    
 *
 * Input:       	none
 *                  
 * Output:         	none  
 *
 * Side Effects:    none
 *
 * Overview:        This function dispatches any time events.
 *
 * Note:          	
 ********************************************************************/
void _CO_COMMLSTimeEventManager(void)
{		
	// If in at least a pre-operational state
	if (COMM_STATE_PREOP)
	{
		// PDO object time events
		if (COMM_TPDO_EN)
		{	
			if (COMM_TPDO_1_EN){CO_PDO1LSTimerEvent();}
			#if CO_NUM_OF_PDO > 1
			if (COMM_TPDO_2_EN){CO_PDO2LSTimerEvent();}
			#endif
			#if CO_NUM_OF_PDO > 2
			if (COMM_TPDO_3_EN){CO_PDO3LSTimerEvent();}
			#endif
			#if CO_NUM_OF_PDO > 3
			if (COMM_TPDO_4_EN){CO_PDO4LSTimerEvent();}
			#endif
//			if (COMM_PDO_5_EN){}
//			if (COMM_PDO_6_EN){}
//			if (COMM_PDO_7_EN){}
//			if (COMM_PDO_8_EN){}
		}
		
		// Network related object time events
		if (COMM_NETCTL_EN)
		{
//			if (COMM_NETCTL_NMT_EN){/*call func*/;} 	// NMT
//			if (COMM_NETCTL_SYNC_EN){/*call func*/;} 	// SYNC
//			if (COMM_NETCTL_TMSTP_EN){/*call func*/;} 	// Time Stamp
			if (COMM_NETCTL_NMTE_EN){_CO_COMM_NMTE_LSTimerEvent();} 	// NMT boot, heartbeat, node guard
//			if (COMM_NETCTL_EMCY_EN){/*call func*/;} 	// Emergency
		}
		
		// SDO object time events
		if (COMM_SDO_EN)
		{
			if (COMM_SDO_1_EN){_CO_COMM_SDO1_LSTimerEvent();}
//			if (COMM_SDO_2_EN){_CO_COMM_SDO2_LSTimerEvent();}
//			if (COMM_SDO_3_EN){_CO_COMM_SDO3_LSTimerEvent();}
//			if (COMM_SDO_4_EN){_CO_COMM_SDO4_LSTimerEvent();}
		}
	}
}































⌨️ 快捷键说明

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