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

Dependencies:   mbed

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);
       }
    }
}