diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-11-08 13:02:48 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-11-08 13:02:48 -0500 |
| commit | ec37f8f3f73f309539486a31f4a5c4aa0e72f237 (patch) | |
| tree | 38c453c3c9b9f23d5dbc3aaa6bd873cee9dafd95 | |
| parent | be26e8497b510d4bf441f9d9cd3207d02b058bc0 (diff) | |
| download | can-gauge-interface-ec37f8f3f73f309539486a31f4a5c4aa0e72f237.zip | |
can: fix bug in packID(); add retry delay
| -rw-r--r-- | fw/can.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -12,7 +12,10 @@ // Oscillator startup timeout #define STARTUP_TIME 128u -#define TX_RETRIES 10u +enum { + TX_RETRIES = 32u, + RETRY_DELAY = 1024ul, +}; // Register addresses typedef enum { @@ -245,12 +248,12 @@ packId(CanId *id, U8 sidh, U8 sidl, U8 eid8, U8 eid0) { id->isExt = true; id->eid = ((U32)eid0 << 0u) // id[7:0] | ((U32)eid8 << 8u) // id[15:8] - | ((U32)((sidh << 5u) | (sidl >> 3u) | (sidl & 0x3)) << 16u) // id[23:21], id[20:18], id[17:16] - | ((U32)(sidh >> 3u) << 24u); // id[28:24] + | ((U32)(((sidh&0x07)<<5u) | ((sidl&0xE0)>>3u) | (sidl&0x3)) << 16u) // id[23:21], id[20:18], id[17:16] + | ((U32)((sidh&0xF8)>>3u) << 24u); // id[28:24] } else { // standard ID id->isExt = false; - id->sid = ((U16)((sidh << 3u) | (sidl >> 5u)) << 0u) // sid[7:0] - | ((U16)(sidh >> 5u) << 8u); // sid[10:8] + id->sid = ((U16)(((sidh&0x1F)<<3u) | ((sidl&0xE0)>>5u)) << 0u) // sid[7:0] + | ((U16)((sidh&0xE0)>>5u) << 8u); // sid[10:8] } } @@ -327,6 +330,9 @@ canTx(const CanFrame *frame) { bitModify(REG_TXB0CTRL, TXREQ, TXREQ); k = 0u; do { + if (k > 0u) { + _delay(RETRY_DELAY); + } ctrl = read(REG_TXB0CTRL); if (ctrl & TXERR) { // Error |