From ad94555f9366580236b5353965f93eeda3826c31 Mon Sep 17 00:00:00 2001 From: H4nky84 Date: Sat, 5 Sep 2015 15:48:03 +1000 Subject: [PATCH 1/3] Updated to include reading and writing of RTR bit in CAN message --- FlexCAN.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/FlexCAN.cpp b/FlexCAN.cpp index 7ad1312..d5c6b35 100644 --- a/FlexCAN.cpp +++ b/FlexCAN.cpp @@ -142,6 +142,7 @@ int FlexCAN::read(CAN_message_t &msg) // get identifier and dlc msg.len = FLEXCAN_get_length(FLEXCAN0_MBn_CS(rxb)); msg.ext = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_IDE)? 1:0; + msg.rtr = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_RTR)? 1:0; msg.id = (FLEXCAN0_MBn_ID(rxb) & FLEXCAN_MB_ID_EXT_MASK); if(!msg.ext) { msg.id >>= FLEXCAN_MB_ID_STD_BIT_NO; @@ -213,12 +214,23 @@ int FlexCAN::write(const CAN_message_t &msg) } FLEXCAN0_MBn_WORD0(buffer) = (msg.buf[0]<<24)|(msg.buf[1]<<16)|(msg.buf[2]<<8)|msg.buf[3]; FLEXCAN0_MBn_WORD1(buffer) = (msg.buf[4]<<24)|(msg.buf[5]<<16)|(msg.buf[6]<<8)|msg.buf[7]; + if(msg.ext) { - FLEXCAN0_MBn_CS(buffer) = FLEXCAN_MB_CS_CODE(FLEXCAN_MB_CODE_TX_ONCE) - | FLEXCAN_MB_CS_LENGTH(msg.len) | FLEXCAN_MB_CS_SRR | FLEXCAN_MB_CS_IDE; + if(msg.rtr) { + FLEXCAN0_MBn_CS(buffer) = FLEXCAN_MB_CS_CODE(FLEXCAN_MB_CODE_TX_ONCE) + | FLEXCAN_MB_CS_LENGTH(msg.len) | FLEXCAN_MB_CS_SRR | FLEXCAN_MB_CS_IDE | FLEXCAN_MB_CS_RTR; + } else { + FLEXCAN0_MBn_CS(buffer) = FLEXCAN_MB_CS_CODE(FLEXCAN_MB_CODE_TX_ONCE) + | FLEXCAN_MB_CS_LENGTH(msg.len) | FLEXCAN_MB_CS_SRR | FLEXCAN_MB_CS_IDE; + } } else { - FLEXCAN0_MBn_CS(buffer) = FLEXCAN_MB_CS_CODE(FLEXCAN_MB_CODE_TX_ONCE) + if(msg.rtr){ + FLEXCAN0_MBn_CS(buffer) = FLEXCAN_MB_CS_CODE(FLEXCAN_MB_CODE_TX_ONCE) + | FLEXCAN_MB_CS_LENGTH(msg.len)| FLEXCAN_MB_CS_RTR; + } else { + FLEXCAN0_MBn_CS(buffer) = FLEXCAN_MB_CS_CODE(FLEXCAN_MB_CODE_TX_ONCE) | FLEXCAN_MB_CS_LENGTH(msg.len); + } } return 1; From 7398ce8a2c5a3320a17fa2e2baf13eda9d4e9aad Mon Sep 17 00:00:00 2001 From: H4nky84 Date: Sat, 5 Sep 2015 15:52:06 +1000 Subject: [PATCH 2/3] Update FlexCAN.cpp --- FlexCAN.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FlexCAN.cpp b/FlexCAN.cpp index d5c6b35..885c6d0 100644 --- a/FlexCAN.cpp +++ b/FlexCAN.cpp @@ -142,7 +142,7 @@ int FlexCAN::read(CAN_message_t &msg) // get identifier and dlc msg.len = FLEXCAN_get_length(FLEXCAN0_MBn_CS(rxb)); msg.ext = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_IDE)? 1:0; - msg.rtr = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_RTR)? 1:0; + msg.rtr = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_RTR)? 1:0; msg.id = (FLEXCAN0_MBn_ID(rxb) & FLEXCAN_MB_ID_EXT_MASK); if(!msg.ext) { msg.id >>= FLEXCAN_MB_ID_STD_BIT_NO; From 99ddd593eaa10bc088aed7304de818a9ff7c2c1e Mon Sep 17 00:00:00 2001 From: H4nky84 Date: Sun, 6 Sep 2015 16:09:45 +1000 Subject: [PATCH 3/3] Update FlexCAN.h --- FlexCAN.h | 1 + 1 file changed, 1 insertion(+) diff --git a/FlexCAN.h b/FlexCAN.h index 19e92e8..7c1c0dd 100644 --- a/FlexCAN.h +++ b/FlexCAN.h @@ -10,6 +10,7 @@ typedef struct CAN_message_t { uint32_t id; // can identifier uint8_t ext; // identifier is extended + uint8_t rtr; // remote transmission request packet type uint8_t len; // length of data uint16_t timeout; // milliseconds, zero will disable waiting uint8_t buf[8];