NetBurner 3.5.6
PDF Version
FlexCan Interrupt Transfer

Location: examples/PlatformSpecific/SOMRT1061/CAN

Overview

The flexcan_interrupt example shows how to use FlexCAN driver in none-blocking interrupt way. It has been ported from the NXP Freescale Software Library (FSL).

In this example, 2 boards are connected through CAN bus. Endpoint A(board A) send a CAN Message to Endpoint B(board B) when user press space key in terminal. Endpoint B receive the message, print the message content to terminal and echo back the message. Endpoint A will increase the received message and waiting for the next transmission of the user initiated.

For self wake up from STOP mode, since steps which MCU enters STOP mode differs on different MCUs, take flexcan_interrupt_transfer of twrke18f for example, user should do like this:

#include "fsl_smc.h"
...
...
flexcanConfig.enableSelfWakeup = true;
...
...
SMC_SetPowerModeStop(SMC, kSMC_PartialStop1);
if (wakenUp)
{
PRINTF("B has been waken up!\r\n\r\n");
}
...
...
void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz)
Initializes a FlexCAN instance.

NXP SDK version

  • Version: 2.16.000

Hardware requirements

  • One DEV-SOMRT1061 Development board and one other CAN device, or two DEV-SOMRT1061 boards
  • Personal Computer
  • Serial terminal program connected to the DEV-SOMRT1061 RS-232 port
Warning
Two CAN devices are required for CAN to operate (except for loopback example)

Board settings

If using 2 DEV-SOMRT1061 boards, connect the two pin CAN header pins of each

Running the demo

After connecting the two boards, these instructions display on each terminal window. One board must be chosen as node A and the other board as node B. (Note: Node B should start first) Data is sent continuously between the node A and the node B.

Consider special errata 005829 feature, the 1st valid MB should be used as reserved one.
The TX MB number will change from 8 to 9, while RX MB number will change from 9 to 10
This message displays on the node A terminal:
FLEXCAN Interrupt EXAMPLE *********
Message format: Standard (11 bit id)
Message buffer 10 used for Rx.
Message buffer 9 used for Tx.
Interrupt Mode: Enabled
Operation Mode: TX and RX --> Normal
Please select local node as A or B:
Note: Node B should start first.
Node:a
Press any key to trigger one-shot transmission
Rx MB ID: 0x123, Rx MB data: 0x0, Time stamp: 8877
Press any key to trigger the next transmission!
Rx MB ID: 0x123, Rx MB data: 0x1, Time stamp: 32459
Press any key to trigger the next transmission!
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, unsigned long timeout)
Wait for events to occur on one or more I/O resources associated with a set of file descriptors (fds)...

This message displays on the node B terminal:

FLEXCAN Interrupt EXAMPLE *********
Message format: Standard (11 bit id)
Message buffer 10 used for Rx.
Message buffer 9 used for Tx.
Interrupt Mode: Enabled
Operation Mode: TX and RX --> Normal
Please select local node as A or B:
Note: Node B should start first.
Node:b
Start to Wait data from Node A
Rx MB ID: 0x321, Rx MB data: 0x0, Time stamp: 5759
Wait Node A to trigger the next transmission!
Rx MB ID: 0x321, Rx MB data: 0x1, Time stamp: 57276
Wait Node A to trigger the next transmission!