Example how we use hardware CAN Acceptance Mask capability on LPC1768. Documentation is not clear !!!!! Polytech PAris SUd Orsay France

Dependencies:   mbed

Committer:
bouaziz
Date:
Sun Mar 20 20:41:53 2011 +0000
Revision:
0:01ac4cd13c69
Child:
1:168415f9f4f0
Using CAN ACCEPTANCE MASK example without Interrupt.
Polytech PAris SUd Orsay France

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bouaziz 0:01ac4cd13c69 1 #include "mbed.h"
bouaziz 0:01ac4cd13c69 2 #include "CAN.h"
bouaziz 0:01ac4cd13c69 3
bouaziz 0:01ac4cd13c69 4 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
bouaziz 0:01ac4cd13c69 5 CAN can2(p30, p29);
bouaziz 0:01ac4cd13c69 6 Serial pc(USBTX, USBRX); // tx, rx
bouaziz 0:01ac4cd13c69 7
bouaziz 0:01ac4cd13c69 8 DigitalOut led1(LED1);
bouaziz 0:01ac4cd13c69 9 DigitalOut led2(LED2);
bouaziz 0:01ac4cd13c69 10 DigitalOut led3(LED3);
bouaziz 0:01ac4cd13c69 11 DigitalOut led4(LED4);
bouaziz 0:01ac4cd13c69 12
bouaziz 0:01ac4cd13c69 13 void init_AF( void )
bouaziz 0:01ac4cd13c69 14 {
bouaziz 0:01ac4cd13c69 15 uint32_t address = 4;
bouaziz 0:01ac4cd13c69 16
bouaziz 0:01ac4cd13c69 17 //off mode
bouaziz 0:01ac4cd13c69 18 LPC_CANAF->AFMR = 0x00000001;
bouaziz 0:01ac4cd13c69 19 // Set explicit standard Frame
bouaziz 0:01ac4cd13c69 20 LPC_CANAF->SFF_sa = address;// word 1
bouaziz 0:01ac4cd13c69 21 // CAN2 IDENT FORCE1
bouaziz 0:01ac4cd13c69 22 LPC_CANAF_RAM->mask[1]=(0X001 << 29) | (0X400 << 16)| (1<<27)|
bouaziz 0:01ac4cd13c69 23 (0X001 << 13)| (0X500 ) | (1<<11);
bouaziz 0:01ac4cd13c69 24 // Only Frame ID 0x400 and 0x500 are received in MBED.
bouaziz 0:01ac4cd13c69 25 address+=4;//add 4 bytes (1 long word) to point to none used word.
bouaziz 0:01ac4cd13c69 26 // Set group standard Frame
bouaziz 0:01ac4cd13c69 27 LPC_CANAF->SFF_GRP_sa = address;
bouaziz 0:01ac4cd13c69 28 // Set explicit extended Frame
bouaziz 0:01ac4cd13c69 29 LPC_CANAF->EFF_sa = address;
bouaziz 0:01ac4cd13c69 30 // Set group extended Frame
bouaziz 0:01ac4cd13c69 31 LPC_CANAF->EFF_GRP_sa = address;
bouaziz 0:01ac4cd13c69 32 // Set End of Table
bouaziz 0:01ac4cd13c69 33 LPC_CANAF->ENDofTable = address;
bouaziz 0:01ac4cd13c69 34 // All have ENDofTable address means are not used.
bouaziz 0:01ac4cd13c69 35 //normal mode
bouaziz 0:01ac4cd13c69 36 LPC_CANAF->AFMR = 0x00000000;
bouaziz 0:01ac4cd13c69 37 return;
bouaziz 0:01ac4cd13c69 38 }
bouaziz 0:01ac4cd13c69 39
bouaziz 0:01ac4cd13c69 40 // ISR to read frame but don't work beacause no interrupts
bouaziz 0:01ac4cd13c69 41 CANMessage can_MsgRx;
bouaziz 0:01ac4cd13c69 42 bool recmess;
bouaziz 0:01ac4cd13c69 43
bouaziz 0:01ac4cd13c69 44 void lecture(void){
bouaziz 0:01ac4cd13c69 45 can2.read(can_MsgRx);
bouaziz 0:01ac4cd13c69 46 pc.printf("REC %u\n\r",can_MsgRx.id);
bouaziz 0:01ac4cd13c69 47 recmess=1;
bouaziz 0:01ac4cd13c69 48 }
bouaziz 0:01ac4cd13c69 49
bouaziz 0:01ac4cd13c69 50 // Main program
bouaziz 0:01ac4cd13c69 51 int main() {
bouaziz 0:01ac4cd13c69 52 // 500kbit
bouaziz 0:01ac4cd13c69 53 can2.frequency(500000);
bouaziz 0:01ac4cd13c69 54 // Prepare MASK
bouaziz 0:01ac4cd13c69 55 init_AF();
bouaziz 0:01ac4cd13c69 56
bouaziz 0:01ac4cd13c69 57 while (1) {
bouaziz 0:01ac4cd13c69 58 pc.printf("%8x %8x ",LPC_CAN2->RFS,LPC_CANAF->LUTerr);
bouaziz 0:01ac4cd13c69 59 pc.printf("%8x %8x %8x %8x\n\r", LPC_CANAF->LUTerrAd,LPC_CAN2->ICR,LPC_CAN2->IER,LPC_CAN2->GSR);
bouaziz 0:01ac4cd13c69 60 wait(0.5);
bouaziz 0:01ac4cd13c69 61 if(recmess){
bouaziz 0:01ac4cd13c69 62 led4=!led4;
bouaziz 0:01ac4cd13c69 63 recmess=0;
bouaziz 0:01ac4cd13c69 64 }
bouaziz 0:01ac4cd13c69 65 if(can2.read(can_MsgRx)){
bouaziz 0:01ac4cd13c69 66 pc.printf("REC %x\n\r",can_MsgRx.id);
bouaziz 0:01ac4cd13c69 67 }
bouaziz 0:01ac4cd13c69 68 }
bouaziz 0:01ac4cd13c69 69 }