Nuvoton
/
NuMaker-mbed-can
NUMAKER CAN sample
Diff: main.cpp
- Revision:
- 6:b9714e564dee
- Parent:
- 5:499978915868
- Child:
- 7:956b6cf0b070
--- a/main.cpp Thu Apr 19 11:22:45 2018 +0800 +++ b/main.cpp Wed May 13 13:20:28 2020 +0800 @@ -9,7 +9,8 @@ #define CAN_TX_MODE_TEST 0 #define CAN_RX_MODE_TEST 1 -#define CAN_RX_IRQ_EN 1 +/* WARNING: Don't enable interrupt mode on receive side. It is not supported on Nuvoton targets. */ +#define CAN_RX_IRQ_EN 0 #define LED_ALL_OFF led1=led2=led3=1 #define MSG_NUM_INDEX 5 // 0 ~ 31 @@ -21,6 +22,8 @@ CAN canObj(PA_13, PA_12); // Internal in the board #elif defined(TARGET_NUMAKER_PFM_M487) CAN canObj(D9, D8); // Change to match external attachment +#elif defined(TARGET_NUMAKER_IOT_M487) +CAN canObj(A0, A1); // Change to match external attachment #endif CANMessage canMsg; @@ -60,11 +63,19 @@ void irq_callback(void) { - if(read_MsgObj() ) - osSignalSet(mainThreadID, 0x06); + /* Wake up receive task */ + osSignalSet(mainThreadID, 0x06); } int main() { +#if CAN_TX_MODE_TEST + printf("CAN sender sample\r\n"); +#endif + +#if CAN_RX_MODE_TEST + printf("CAN receiver sample\r\n"); +#endif + int i=0; char data[8]={0}; @@ -103,14 +114,15 @@ #endif #if CAN_RX_MODE_TEST - -#if (CAN_RX_IRQ_EN) // interrupt mode + +#if (CAN_RX_IRQ_EN) /* Wait for receive task to wakeup */ - osSignalWait(0x06, osWaitForever); -#else // pooling mode - if( !read_MsgObj() ) continue; + osSignalWait(0x06, osWaitForever); #endif - + if (!read_MsgObj()) { + continue; + } + printf("Read ID=%8X, Type=%s, DLC=%d,Data=",canMsg.id,canMsg.format?"EXT":"STD",canMsg.len); for(i=0; i<canMsg.len; i++) printf("%02X,",canMsg.data[i]);