Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:5f0cd7bd1389
- Child:
- 1:d8284a72815e
diff -r 000000000000 -r 5f0cd7bd1389 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Jan 31 05:10:57 2011 +0000
@@ -0,0 +1,137 @@
+#include "mbed.h"
+#include "CAN.h"
+
+Ticker ticker;
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+Serial pc(USBTX, USBRX); // tx, rx
+
+
+// CAN_RS pin at Philips PCA82C250 can bus controller.
+// activate transceiver by pulling this pin to GND.
+// (Rise and fall slope controlled by resistor R_s)
+// (+5V result in tranceiver standby mode)
+// For further information see datasheet page 4
+
+DigitalOut can_Pca82c250SlopePin(p28);
+
+// second can controller on these pins. Not used here.
+// CAN can1(p9, p10);
+// We use can on mbed pins 29(CAN_TXD) and 30(CAN_RXD).
+CAN can2(p30, p29);
+CAN can1(p9, p10);
+
+char counter = 0;
+bool sendme = false;
+CANMessage can_MsgTx;
+CANMessage can_MsgRx;
+char msg[14];
+
+int main()
+{
+ pc.baud(115200);
+// pc.printf("Starting CAN Monitor\r\n");
+
+ can1.frequency(500000);
+
+ LPC_CAN2->BTR = 0x52001C;
+// pc.printf("CAN Freq = 0x%08x\r\n", LPC_CAN2->BTR);
+
+ // activate external can transceiver
+ can_Pca82c250SlopePin = 0;
+
+ // every 500ms
+// ticker.attach(&send, 0.5);
+ /// create message object for message reception
+
+ while (1)
+ {
+ // send received messages to the pc via serial line (9k6, 8n1)
+ if (can2.read(can_MsgRx))
+ {
+ // sync
+ pc.putc(0xff);
+ pc.putc(0x00);
+ pc.putc(0xff);
+
+ // data
+ pc.putc((can_MsgRx.id & 0xff00) >> 8);
+ pc.putc((can_MsgRx.id & 0x00ff));
+ pc.putc(can_MsgRx.len);
+ for (int i = 0; i < can_MsgRx.len; i++)
+ {
+ pc.putc(can_MsgRx.data[i]);
+ }
+
+ // any incoming message: toggle led2
+ led2 = !led2;
+ }
+
+ if (can1.read(can_MsgRx))
+ {
+ // sync
+ pc.putc(0xff);
+ pc.putc(0x00);
+ pc.putc(0xff);
+
+ // data
+ pc.putc((can_MsgRx.id & 0xff00) >> 8);
+ pc.putc((can_MsgRx.id & 0x00ff));
+ pc.putc(can_MsgRx.len);
+ for (int i = 0; i < can_MsgRx.len; i++)
+ {
+ pc.putc(can_MsgRx.data[i]);
+ }
+
+ // any incoming message: toggle led2
+ led3 = !led3;
+ }
+
+ while (pc.readable())
+ {
+ msg[counter] = pc.getc();
+ counter++;
+
+ if (counter == 14)
+ {
+ break;
+ }
+
+ if (counter == 3)
+ {
+ if ((msg[0] != 0xff) || (msg[1] != 0x00) || (msg[2] != 0xff))
+ {
+ counter = 0;
+ msg[0] = msg[1];
+ msg[1] = msg[2];
+ }
+ }
+ }
+
+ if (counter > 13)
+ {
+ counter = 0;
+ sendme = false;
+
+ if ((msg[0] == 0xff) && (msg[1] == 0x00) && (msg[2] == 0xff))
+ {
+ char temp[14];
+ memcpy(temp, msg, 14);
+
+ memset(msg, 0, 14);
+
+ can_MsgTx.id = (((short)temp[3]) << 8) + temp[4];
+ can_MsgTx.len = temp[5];
+ for (int i = 0; i < 8; i++)
+ {
+ can_MsgTx.data[i] = temp[6 + i];
+ }
+
+ //send the message
+ led1 = !led1;
+ can2.write(can_MsgTx);
+ }
+ }
+ }
+}
\ No newline at end of file