uint32_t CAN_Init( uint32_t can_btr1, uint32_t can_btr2 ) { CAN1RxDone = CAN2RxDone = FALSE; LPC_SC->PCONP |= ((1<<13)|(1<<14)); /* Enable CAN1 and CAN2 clock */ LPC_PINCON->PINSEL0 &= ~0x0000000F; /* CAN1 is p0.0 and p0.1 */ LPC_PINCON->PINSEL0 |= 0x00000005; // LPC_PINCON->PINSEL4 &= ~0x0003C000; /* CAN2 is p2.7 and p2.8 */ // LPC_PINCON->PINSEL4 |= 0x00014000; LPC_PINCON->PINSEL0 |= (1 << 9); /* Pin P0.4 used as RD2 (CAN2) */ LPC_PINCON->PINSEL0 |= (1 << 11); /* Pin P0.5 used as TD2 (CAN2) */ LPC_CAN1->MOD = LPC_CAN2->MOD = 1; /* Reset CAN */ LPC_CAN1->IER = LPC_CAN2->IER = 0; /* Disable Receive Interrupt */ LPC_CAN1->GSR = LPC_CAN2->GSR = 0; /* Reset error counter when CANxMOD is in reset */ LPC_CAN1->BTR = can_btr1; LPC_CAN2->BTR = can_btr2; LPC_CAN1->MOD = LPC_CAN2->MOD = 0x0; /* CAN in normal operation mode */ NVIC_EnableIRQ(CAN_IRQn); LPC_CAN1->IER = LPC_CAN2->IER = 0x01; /* Enable receive interrupts */ return( TRUE ); } void I2C2Init( void ) { LPC_SC->PCONP |= (1 << 26); /* set PIO0.10 and PIO0.11 to I2C2 SDA and SCL */ /* function to 10 on both SDA and SCL. */ LPC_PINCON->PINSEL0 &= ~((0x03<<20)|(0x03<<22)); LPC_PINCON->PINSEL0 |= ((0x02<<20)|(0x02<<22)); LPC_PINCON->PINMODE0 &= ~((0x03<<20)|(0x03<<22)); LPC_PINCON->PINMODE0 |= ((0x02<<20)|(0x2<<22)); /* No pull-up no pull-down */ LPC_PINCON->PINMODE_OD0 |= ((0x01<<10)|(0x1<<11)); /*--- Clear flags ---*/ LPC_I2C2->CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC; /*--- Reset registers ---*/ LPC_I2C2->SCLL = I2SCLL_SCLL; LPC_I2C2->SCLH = I2SCLH_SCLH; /* Install interrupt handler */ NVIC_EnableIRQ(I2C2_IRQn); LPC_I2C2->CONSET = I2CONSET_I2EN; return; } int main (void){ ... CAN_Init( BITRATE100K18MHZ, BITRATE500K18MHZ ); UARTInit(0, 57600); I2C2Init( ); ...