Example how we use hardware CAN Acceptance Mask capability on LPC1768. Documentation is not clear !!!!! Polytech PAris SUd Orsay France
main.cpp
- Committer:
- bouaziz
- Date:
- 2011-03-20
- Revision:
- 0:01ac4cd13c69
- Child:
- 1:168415f9f4f0
File content as of revision 0:01ac4cd13c69:
#include "mbed.h" #include "CAN.h" // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD). CAN can2(p30, p29); Serial pc(USBTX, USBRX); // tx, rx DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); void init_AF( void ) { uint32_t address = 4; //off mode LPC_CANAF->AFMR = 0x00000001; // Set explicit standard Frame LPC_CANAF->SFF_sa = address;// word 1 // CAN2 IDENT FORCE1 LPC_CANAF_RAM->mask[1]=(0X001 << 29) | (0X400 << 16)| (1<<27)| (0X001 << 13)| (0X500 ) | (1<<11); // Only Frame ID 0x400 and 0x500 are received in MBED. address+=4;//add 4 bytes (1 long word) to point to none used word. // Set group standard Frame LPC_CANAF->SFF_GRP_sa = address; // Set explicit extended Frame LPC_CANAF->EFF_sa = address; // Set group extended Frame LPC_CANAF->EFF_GRP_sa = address; // Set End of Table LPC_CANAF->ENDofTable = address; // All have ENDofTable address means are not used. //normal mode LPC_CANAF->AFMR = 0x00000000; return; } // ISR to read frame but don't work beacause no interrupts CANMessage can_MsgRx; bool recmess; void lecture(void){ can2.read(can_MsgRx); pc.printf("REC %u\n\r",can_MsgRx.id); recmess=1; } // Main program int main() { // 500kbit can2.frequency(500000); // Prepare MASK init_AF(); while (1) { pc.printf("%8x %8x ",LPC_CAN2->RFS,LPC_CANAF->LUTerr); pc.printf("%8x %8x %8x %8x\n\r", LPC_CANAF->LUTerrAd,LPC_CAN2->ICR,LPC_CAN2->IER,LPC_CAN2->GSR); wait(0.5); if(recmess){ led4=!led4; recmess=0; } if(can2.read(can_MsgRx)){ pc.printf("REC %x\n\r",can_MsgRx.id); } } }