Dependencies:   mbed

Committer:
kevin
Date:
Sat Jan 02 18:05:53 2010 +0000
Revision:
0:ed26402e7a0b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevin 0:ed26402e7a0b 1 #include "mbed.h"
kevin 0:ed26402e7a0b 2 #include "CAN.h"
kevin 0:ed26402e7a0b 3
kevin 0:ed26402e7a0b 4 Ticker ticker;
kevin 0:ed26402e7a0b 5
kevin 0:ed26402e7a0b 6 DigitalOut led1(LED1);
kevin 0:ed26402e7a0b 7 DigitalOut led2(LED2);
kevin 0:ed26402e7a0b 8
kevin 0:ed26402e7a0b 9 // CAN_RS pin at Philips PCA82C250 can bus controller.
kevin 0:ed26402e7a0b 10 // activate transceiver by pulling this pin to GND.
kevin 0:ed26402e7a0b 11 // (Rise and fall slope controlled by resistor R_s)
kevin 0:ed26402e7a0b 12 // (+5V result in tranceiver standby mode)
kevin 0:ed26402e7a0b 13 // For further information see datasheet page 4
kevin 0:ed26402e7a0b 14 DigitalOut can_Pca82c250SlopePin(p28);
kevin 0:ed26402e7a0b 15
kevin 0:ed26402e7a0b 16 // second can controller on these pins. Not used here.
kevin 0:ed26402e7a0b 17 // CAN can1(p9, p10);
kevin 0:ed26402e7a0b 18
kevin 0:ed26402e7a0b 19 // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
kevin 0:ed26402e7a0b 20 CAN can2(p30, p29);
kevin 0:ed26402e7a0b 21
kevin 0:ed26402e7a0b 22 void send() {
kevin 0:ed26402e7a0b 23 static char counter = 0;
kevin 0:ed26402e7a0b 24 if (can2.write(CANMessage(0x200, &counter, 1))) {
kevin 0:ed26402e7a0b 25 printf("CanTx--> id: 0x200 dlc: 1 data: %x\n\r", counter);
kevin 0:ed26402e7a0b 26 counter++;
kevin 0:ed26402e7a0b 27 }
kevin 0:ed26402e7a0b 28 // toggle led1 after every transmission
kevin 0:ed26402e7a0b 29 led1 = !led1;
kevin 0:ed26402e7a0b 30 }
kevin 0:ed26402e7a0b 31
kevin 0:ed26402e7a0b 32 int main() {
kevin 0:ed26402e7a0b 33 // 500kbit/s
kevin 0:ed26402e7a0b 34 can2.frequency(500000);
kevin 0:ed26402e7a0b 35 // activate external can transceiver
kevin 0:ed26402e7a0b 36 can_Pca82c250SlopePin = 0;
kevin 0:ed26402e7a0b 37 // every 500ms
kevin 0:ed26402e7a0b 38 ticker.attach(&send, 0.5);
kevin 0:ed26402e7a0b 39 /// create message object for message reception
kevin 0:ed26402e7a0b 40 CANMessage can_MsgRx;
kevin 0:ed26402e7a0b 41 while (1) {
kevin 0:ed26402e7a0b 42 // send received messages to the pc via serial line (9k6, 8n1)
kevin 0:ed26402e7a0b 43 if (can2.read(can_MsgRx)) {
kevin 0:ed26402e7a0b 44 printf("CanRx--> id: 0x%x dlc: %d data: ", can_MsgRx.id, can_MsgRx.len);
kevin 0:ed26402e7a0b 45 for (char i=0; i<can_MsgRx.len; i++) {
kevin 0:ed26402e7a0b 46 printf("%x ", can_MsgRx.data[i]);
kevin 0:ed26402e7a0b 47 }
kevin 0:ed26402e7a0b 48 printf("\n\r");
kevin 0:ed26402e7a0b 49 // any incoming message: toggle led2
kevin 0:ed26402e7a0b 50 led2 = !led2;
kevin 0:ed26402e7a0b 51 }
kevin 0:ed26402e7a0b 52 }
kevin 0:ed26402e7a0b 53 }