Peter Cooper
/
diags
test code for our MBED board
can.c@0:9edfcca7cd25, 2010-01-12 (annotated)
- Committer:
- lolpcc
- Date:
- Tue Jan 12 16:49:56 2010 +0000
- Revision:
- 0:9edfcca7cd25
- Child:
- 1:6877bb99aa17
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lolpcc | 0:9edfcca7cd25 | 1 | #include "mbed.h" |
lolpcc | 0:9edfcca7cd25 | 2 | #include "diags.h" |
lolpcc | 0:9edfcca7cd25 | 3 | #include "CAN.h" |
lolpcc | 0:9edfcca7cd25 | 4 | |
lolpcc | 0:9edfcca7cd25 | 5 | Ticker ticker; |
lolpcc | 0:9edfcca7cd25 | 6 | |
lolpcc | 0:9edfcca7cd25 | 7 | // CAN_RS pin at Philips PCA82C250 can bus controller. |
lolpcc | 0:9edfcca7cd25 | 8 | // activate transceiver by pulling this pin to GND. |
lolpcc | 0:9edfcca7cd25 | 9 | // (Rise and fall slope controlled by resistor R_s) |
lolpcc | 0:9edfcca7cd25 | 10 | // (+5V result in tranceiver standby mode) |
lolpcc | 0:9edfcca7cd25 | 11 | // For further information see datasheet page 4 |
lolpcc | 0:9edfcca7cd25 | 12 | DigitalOut can_Pca82c250SlopePin(p28); |
lolpcc | 0:9edfcca7cd25 | 13 | |
lolpcc | 0:9edfcca7cd25 | 14 | // We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD). |
lolpcc | 0:9edfcca7cd25 | 15 | CAN can(p30, p29); |
lolpcc | 0:9edfcca7cd25 | 16 | |
lolpcc | 0:9edfcca7cd25 | 17 | int can_cnt=0; |
lolpcc | 0:9edfcca7cd25 | 18 | |
lolpcc | 0:9edfcca7cd25 | 19 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 20 | /* */ |
lolpcc | 0:9edfcca7cd25 | 21 | /* Can Bus Tests */ |
lolpcc | 0:9edfcca7cd25 | 22 | /* */ |
lolpcc | 0:9edfcca7cd25 | 23 | /* */ |
lolpcc | 0:9edfcca7cd25 | 24 | /* */ |
lolpcc | 0:9edfcca7cd25 | 25 | /* */ |
lolpcc | 0:9edfcca7cd25 | 26 | /******************************************/ |
lolpcc | 0:9edfcca7cd25 | 27 | void send() { |
lolpcc | 0:9edfcca7cd25 | 28 | static char counter = 0; |
lolpcc | 0:9edfcca7cd25 | 29 | if (can.write(CANMessage(0x200, &counter, 1))) { |
lolpcc | 0:9edfcca7cd25 | 30 | printf("CanTx--> id: 0x200 dlc: 1 data: %x\n\r", counter); |
lolpcc | 0:9edfcca7cd25 | 31 | counter++; |
lolpcc | 0:9edfcca7cd25 | 32 | } else { |
lolpcc | 0:9edfcca7cd25 | 33 | printf("CanTx--> id: 0x200 dlc: 1 data: %x ERROR\n\r", counter); |
lolpcc | 0:9edfcca7cd25 | 34 | can.reset(); |
lolpcc | 0:9edfcca7cd25 | 35 | } |
lolpcc | 0:9edfcca7cd25 | 36 | if(can_cnt==0){ |
lolpcc | 0:9edfcca7cd25 | 37 | led_on(3); |
lolpcc | 0:9edfcca7cd25 | 38 | can_cnt=1; |
lolpcc | 0:9edfcca7cd25 | 39 | } else { |
lolpcc | 0:9edfcca7cd25 | 40 | led_off(3); |
lolpcc | 0:9edfcca7cd25 | 41 | can_cnt=0; |
lolpcc | 0:9edfcca7cd25 | 42 | } |
lolpcc | 0:9edfcca7cd25 | 43 | // toggle led1 after every transmission |
lolpcc | 0:9edfcca7cd25 | 44 | } |
lolpcc | 0:9edfcca7cd25 | 45 | void test_can(int loop) |
lolpcc | 0:9edfcca7cd25 | 46 | { |
lolpcc | 0:9edfcca7cd25 | 47 | // 500kbit/s |
lolpcc | 0:9edfcca7cd25 | 48 | can.frequency(500000); |
lolpcc | 0:9edfcca7cd25 | 49 | // activate external can transceiver |
lolpcc | 0:9edfcca7cd25 | 50 | can_Pca82c250SlopePin = 0; |
lolpcc | 0:9edfcca7cd25 | 51 | can_cnt=loop; |
lolpcc | 0:9edfcca7cd25 | 52 | // every 500ms |
lolpcc | 0:9edfcca7cd25 | 53 | ticker.attach(&send, 0.5); |
lolpcc | 0:9edfcca7cd25 | 54 | |
lolpcc | 0:9edfcca7cd25 | 55 | printf("CAN message ticker started\n\r"); |
lolpcc | 0:9edfcca7cd25 | 56 | } |