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.
main.cpp
- Committer:
- rtgree01
- Date:
- 2011-01-31
- Revision:
- 0:5f0cd7bd1389
- Child:
- 1:d8284a72815e
File content as of revision 0:5f0cd7bd1389:
#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);
}
}
}
}