Example how we use hardware CAN Acceptance Mask capability on LPC1768. Documentation is not clear !!!!! Polytech PAris SUd Orsay France
main.cpp@0:01ac4cd13c69, 2011-03-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |