 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		Hi Pete,
I am working on a new board with a LPC1517. I found this thread and your post where you say the project is attached but I don't see the file. Maybe because this was moved. Would it be possible to get your sample project.
Thanks,
Gary
 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		| .... void CAN_IRQHandler(void) .... | 
 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		| 
//transmit message #1
[color=#f00]    while(LPC_CAN->TXREQ1 & (1<<0)){}//read pending transmission request of object 0[/color]
    msg_obj.msgobj  = 0;
    msg_obj.mode_id = 0x700+ NODE_ID;
    msg_obj.mask    = 0x0;
    msg_obj.dlc     = 0x4;
    msg_obj.data[0] = 0x11;
    msg_obj.data[1] = 0x11;
    msg_obj.data[2] = 0x11;
    msg_obj.data[3] = 0x11;
    LPC_CAND_API->hwCAN_MsgTransmit(pCanHandle, &msg_obj);
//transmit message #2
[color=#f00]    while(LPC_CAN->TXREQ1 & (1<<0)){}//read pending transmission request of object 0[/color]
    msg_obj.msgobj  = 0;
    msg_obj.mode_id = 0x700 + NODE_ID+1;
    msg_obj.mask    = 0x0;
    msg_obj.dlc     = 3;
    msg_obj.data[0] = 0x22;
    msg_obj.data[1] = 0x22;
    msg_obj.data[2] = 0x22;
    LPC_CAND_API->hwCAN_MsgTransmit(pCanHandle, &msg_obj); | 
 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		| #define NODE_ID 0x20//own node id //message #1 msg_obj.msgobj = 0; [color=#f00]msg_obj.mode_id = 0x700+ NODE_ID[/color]; msg_obj.mask = 0x0; [color=#f00]msg_obj.dlc = 0x4;[/color] msg_obj.data[0] = 0x11; msg_obj.data[1] = 0x11; msg_obj.data[2] = 0x11; [color=#f00]msg_obj.data[3] = 0x11;[/color] LPC_CAND_API->hwCAN_MsgTransmit(pCanHandle, &msg_obj); //message #2 msg_obj.msgobj = 0; msg_obj.mode_id = 0x700 + NODE_ID+1; msg_obj.mask = 0x0; msg_obj.dlc = 3; [color=#30f]msg_obj.data[0] = 0x22; msg_obj.data[1] = 0x22; msg_obj.data[2] = 0x22;[/color] LPC_CAND_API->hwCAN_MsgTransmit(pCanHandle, &msg_obj); | 
| 
//wait 5ms before CAN_Fail
#define CAN_TX_TIME 5 
//CAN State
enum CAN_STATE
{
 CAN_Success,
 CAN_TX,
 CAN_Fail
};
//CAN
typedef struct _CAN_STATE
{
 volatile uint16_t timeout; //tx timeout
 volatile uint8_t  state;//CAN state
}CAN_STATE_t;
CAN_STATE_t can_state;
...
static void CAN_tx(uint8_t msg_obj)
{
 Board_LED_Toggle(1);//show TX
 can_state.state = CAN_Success;//success, ready to transmit next message
}
...
//CAN timer, call every ms in SysTick...
__attribute__((always_inline)) __INLINE void CAN_1ms_timer(void)
{
 //timer to control tx
 if(can_state.state == CAN_TX)
 {
  //timeout to fail
  if(can_state.timeout)
  {
   can_state.timeout--;
   if(can_state.timeout==0) can_state.state = CAN_Fail;
  }
 }
}
//transmit message #1
   while(!((can_state.state == CAN_Success) || (can_state.state == CAN_Fail))){}; //wait
    can_state.timeout = CAN_TX_TIME;//can timeout
    can_state.state = CAN_TX; //set tx busy flag
    msg_obj.msgobj  = 0;
    msg_obj.mode_id = 0x700+ NODE_ID;
    msg_obj.mask    = 0x0;
    msg_obj.dlc     = 0x4;
    msg_obj.data[0] = 0x11;
    msg_obj.data[1] = 0x11;
    msg_obj.data[2] = 0x11;
    msg_obj.data[3] = 0x11;
    LPC_CAND_API->hwCAN_MsgTransmit(pCanHandle, &msg_obj);
//transmit message #2
   while(!((can_state.state == CAN_Success) || (can_state.state == CAN_Fail))){}; //wait
    can_state.timeout = CAN_TX_TIME; //can timeout
    can_state.state = CAN_TX; //set tx busy flag
    msg_obj.msgobj  = 0;
    msg_obj.mode_id = 0x700 + NODE_ID+1;
    msg_obj.mask    = 0x0;
    msg_obj.dlc     = 3;
    msg_obj.data[0] = 0x22;
    msg_obj.data[1] = 0x22;
    msg_obj.data[2] = 0x22;
    LPC_CAND_API->hwCAN_MsgTransmit(pCanHandle, &msg_obj);
 | 
