François .
/
testcanOK
can01.cpp@0:d40cebe2b64e, 2011-08-24 (annotated)
- Committer:
- bouguereau
- Date:
- Wed Aug 24 09:45:21 2011 +0000
- Revision:
- 0:d40cebe2b64e
Who changed what in which revision?
User | Revision | Line number | New 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 | }*/ |