Committer:
bouguereau
Date:
Wed Aug 24 09:45:21 2011 +0000
Revision:
0:d40cebe2b64e

        

Who changed what in which revision?

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