123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759 |
- #ifndef GD32F10x_CAN_H
- #define GD32F10x_CAN_H
- #include "gd32f10x.h"
- #define CAN0 CAN_BASE
- #define CAN1 (CAN0 + 0x00000400U)
- #define CAN_CTL(canx) REG32((canx) + 0x00U)
- #define CAN_STAT(canx) REG32((canx) + 0x04U)
- #define CAN_TSTAT(canx) REG32((canx) + 0x08U)
- #define CAN_RFIFO0(canx) REG32((canx) + 0x0CU)
- #define CAN_RFIFO1(canx) REG32((canx) + 0x10U)
- #define CAN_INTEN(canx) REG32((canx) + 0x14U)
- #define CAN_ERR(canx) REG32((canx) + 0x18U)
- #define CAN_BT(canx) REG32((canx) + 0x1CU)
- #define CAN_TMI0(canx) REG32((canx) + 0x180U)
- #define CAN_TMP0(canx) REG32((canx) + 0x184U)
- #define CAN_TMDATA00(canx) REG32((canx) + 0x188U)
- #define CAN_TMDATA10(canx) REG32((canx) + 0x18CU)
- #define CAN_TMI1(canx) REG32((canx) + 0x190U)
- #define CAN_TMP1(canx) REG32((canx) + 0x194U)
- #define CAN_TMDATA01(canx) REG32((canx) + 0x198U)
- #define CAN_TMDATA11(canx) REG32((canx) + 0x19CU)
- #define CAN_TMI2(canx) REG32((canx) + 0x1A0U)
- #define CAN_TMP2(canx) REG32((canx) + 0x1A4U)
- #define CAN_TMDATA02(canx) REG32((canx) + 0x1A8U)
- #define CAN_TMDATA12(canx) REG32((canx) + 0x1ACU)
- #define CAN_RFIFOMI0(canx) REG32((canx) + 0x1B0U)
- #define CAN_RFIFOMP0(canx) REG32((canx) + 0x1B4U)
- #define CAN_RFIFOMDATA00(canx) REG32((canx) + 0x1B8U)
- #define CAN_RFIFOMDATA10(canx) REG32((canx) + 0x1BCU)
- #define CAN_RFIFOMI1(canx) REG32((canx) + 0x1C0U)
- #define CAN_RFIFOMP1(canx) REG32((canx) + 0x1C4U)
- #define CAN_RFIFOMDATA01(canx) REG32((canx) + 0x1C8U)
- #define CAN_RFIFOMDATA11(canx) REG32((canx) + 0x1CCU)
- #define CAN_FCTL(canx) REG32((canx) + 0x200U)
- #define CAN_FMCFG(canx) REG32((canx) + 0x204U)
- #define CAN_FSCFG(canx) REG32((canx) + 0x20CU)
- #define CAN_FAFIFO(canx) REG32((canx) + 0x214U)
- #define CAN_FW(canx) REG32((canx) + 0x21CU)
- #define CAN_F0DATA0(canx) REG32((canx) + 0x240U)
- #define CAN_F1DATA0(canx) REG32((canx) + 0x248U)
- #define CAN_F2DATA0(canx) REG32((canx) + 0x250U)
- #define CAN_F3DATA0(canx) REG32((canx) + 0x258U)
- #define CAN_F4DATA0(canx) REG32((canx) + 0x260U)
- #define CAN_F5DATA0(canx) REG32((canx) + 0x268U)
- #define CAN_F6DATA0(canx) REG32((canx) + 0x270U)
- #define CAN_F7DATA0(canx) REG32((canx) + 0x278U)
- #define CAN_F8DATA0(canx) REG32((canx) + 0x280U)
- #define CAN_F9DATA0(canx) REG32((canx) + 0x288U)
- #define CAN_F10DATA0(canx) REG32((canx) + 0x290U)
- #define CAN_F11DATA0(canx) REG32((canx) + 0x298U)
- #define CAN_F12DATA0(canx) REG32((canx) + 0x2A0U)
- #define CAN_F13DATA0(canx) REG32((canx) + 0x2A8U)
- #define CAN_F14DATA0(canx) REG32((canx) + 0x2B0U)
- #define CAN_F15DATA0(canx) REG32((canx) + 0x2B8U)
- #define CAN_F16DATA0(canx) REG32((canx) + 0x2C0U)
- #define CAN_F17DATA0(canx) REG32((canx) + 0x2C8U)
- #define CAN_F18DATA0(canx) REG32((canx) + 0x2D0U)
- #define CAN_F19DATA0(canx) REG32((canx) + 0x2D8U)
- #define CAN_F20DATA0(canx) REG32((canx) + 0x2E0U)
- #define CAN_F21DATA0(canx) REG32((canx) + 0x2E8U)
- #define CAN_F22DATA0(canx) REG32((canx) + 0x2F0U)
- #define CAN_F23DATA0(canx) REG32((canx) + 0x3F8U)
- #define CAN_F24DATA0(canx) REG32((canx) + 0x300U)
- #define CAN_F25DATA0(canx) REG32((canx) + 0x308U)
- #define CAN_F26DATA0(canx) REG32((canx) + 0x310U)
- #define CAN_F27DATA0(canx) REG32((canx) + 0x318U)
- #define CAN_F0DATA1(canx) REG32((canx) + 0x244U)
- #define CAN_F1DATA1(canx) REG32((canx) + 0x24CU)
- #define CAN_F2DATA1(canx) REG32((canx) + 0x254U)
- #define CAN_F3DATA1(canx) REG32((canx) + 0x25CU)
- #define CAN_F4DATA1(canx) REG32((canx) + 0x264U)
- #define CAN_F5DATA1(canx) REG32((canx) + 0x26CU)
- #define CAN_F6DATA1(canx) REG32((canx) + 0x274U)
- #define CAN_F7DATA1(canx) REG32((canx) + 0x27CU)
- #define CAN_F8DATA1(canx) REG32((canx) + 0x284U)
- #define CAN_F9DATA1(canx) REG32((canx) + 0x28CU)
- #define CAN_F10DATA1(canx) REG32((canx) + 0x294U)
- #define CAN_F11DATA1(canx) REG32((canx) + 0x29CU)
- #define CAN_F12DATA1(canx) REG32((canx) + 0x2A4U)
- #define CAN_F13DATA1(canx) REG32((canx) + 0x2ACU)
- #define CAN_F14DATA1(canx) REG32((canx) + 0x2B4U)
- #define CAN_F15DATA1(canx) REG32((canx) + 0x2BCU)
- #define CAN_F16DATA1(canx) REG32((canx) + 0x2C4U)
- #define CAN_F17DATA1(canx) REG32((canx) + 0x24CU)
- #define CAN_F18DATA1(canx) REG32((canx) + 0x2D4U)
- #define CAN_F19DATA1(canx) REG32((canx) + 0x2DCU)
- #define CAN_F20DATA1(canx) REG32((canx) + 0x2E4U)
- #define CAN_F21DATA1(canx) REG32((canx) + 0x2ECU)
- #define CAN_F22DATA1(canx) REG32((canx) + 0x2F4U)
- #define CAN_F23DATA1(canx) REG32((canx) + 0x2FCU)
- #define CAN_F24DATA1(canx) REG32((canx) + 0x304U)
- #define CAN_F25DATA1(canx) REG32((canx) + 0x30CU)
- #define CAN_F26DATA1(canx) REG32((canx) + 0x314U)
- #define CAN_F27DATA1(canx) REG32((canx) + 0x31CU)
- #define CAN_TMI(canx, bank) REG32((canx) + 0x180U + ((bank) * 0x10U))
- #define CAN_TMP(canx, bank) REG32((canx) + 0x184U + ((bank) * 0x10U))
- #define CAN_TMDATA0(canx, bank) REG32((canx) + 0x188U + ((bank) * 0x10U))
- #define CAN_TMDATA1(canx, bank) REG32((canx) + 0x18CU + ((bank) * 0x10U))
- #define CAN_FDATA0(canx, bank) REG32((canx) + 0x240U + ((bank) * 0x8U) + 0x0U)
- #define CAN_FDATA1(canx, bank) REG32((canx) + 0x240U + ((bank) * 0x8U) + 0x4U)
- #define CAN_RFIFOMI(canx, bank) REG32((canx) + 0x1B0U + ((bank) * 0x10U))
- #define CAN_RFIFOMP(canx, bank) REG32((canx) + 0x1B4U + ((bank) * 0x10U))
- #define CAN_RFIFOMDATA0(canx, bank) REG32((canx) + 0x1B8U + ((bank) * 0x10U))
- #define CAN_RFIFOMDATA1(canx, bank) REG32((canx) + 0x1BCU + ((bank) * 0x10U))
- #define CAN_CTL_IWMOD BIT(0)
- #define CAN_CTL_SLPWMOD BIT(1)
- #define CAN_CTL_TFO BIT(2)
- #define CAN_CTL_RFOD BIT(3)
- #define CAN_CTL_ARD BIT(4)
- #define CAN_CTL_AWU BIT(5)
- #define CAN_CTL_ABOR BIT(6)
- #define CAN_CTL_TTC BIT(7)
- #define CAN_CTL_SWRST BIT(15)
- #define CAN_CTL_DFZ BIT(16)
- #define CAN_STAT_IWS BIT(0)
- #define CAN_STAT_SLPWS BIT(1)
- #define CAN_STAT_ERRIF BIT(2)
- #define CAN_STAT_WUIF BIT(3)
- #define CAN_STAT_SLPIF BIT(4)
- #define CAN_STAT_TS BIT(8)
- #define CAN_STAT_RS BIT(9)
- #define CAN_STAT_LASTRX BIT(10)
- #define CAN_STAT_RXL BIT(11)
- #define CAN_TSTAT_MTF0 BIT(0)
- #define CAN_TSTAT_MTFNERR0 BIT(1)
- #define CAN_TSTAT_MAL0 BIT(2)
- #define CAN_TSTAT_MTE0 BIT(3)
- #define CAN_TSTAT_MST0 BIT(7)
- #define CAN_TSTAT_MTF1 BIT(8)
- #define CAN_TSTAT_MTFNERR1 BIT(9)
- #define CAN_TSTAT_MAL1 BIT(10)
- #define CAN_TSTAT_MTE1 BIT(11)
- #define CAN_TSTAT_MST1 BIT(15)
- #define CAN_TSTAT_MTF2 BIT(16)
- #define CAN_TSTAT_MTFNERR2 BIT(17)
- #define CAN_TSTAT_MAL2 BIT(18)
- #define CAN_TSTAT_MTE2 BIT(19)
- #define CAN_TSTAT_MST2 BIT(23)
- #define CAN_TSTAT_NUM BITS(24,25)
- #define CAN_TSTAT_TME0 BIT(26)
- #define CAN_TSTAT_TME1 BIT(27)
- #define CAN_TSTAT_TME2 BIT(28)
- #define CAN_TSTAT_TMLS0 BIT(29)
- #define CAN_TSTAT_TMLS1 BIT(30)
- #define CAN_TSTAT_TMLS2 BIT(31)
- #define CAN_RFIFO0_RFL0 BITS(0,1)
- #define CAN_RFIFO0_RFF0 BIT(3)
- #define CAN_RFIFO0_RFO0 BIT(4)
- #define CAN_RFIFO0_RFD0 BIT(5)
- #define CAN_RFIFO1_RFL1 BITS(0,1)
- #define CAN_RFIFO1_RFF1 BIT(3)
- #define CAN_RFIFO1_RFO1 BIT(4)
- #define CAN_RFIFO1_RFD1 BIT(5)
- #define CAN_INTEN_TMEIE BIT(0)
- #define CAN_INTEN_RFNEIE0 BIT(1)
- #define CAN_INTEN_RFFIE0 BIT(2)
- #define CAN_INTEN_RFOIE0 BIT(3)
- #define CAN_INTEN_RFNEIE1 BIT(4)
- #define CAN_INTEN_RFFIE1 BIT(5)
- #define CAN_INTEN_RFOIE1 BIT(6)
- #define CAN_INTEN_WERRIE BIT(8)
- #define CAN_INTEN_PERRIE BIT(9)
- #define CAN_INTEN_BOIE BIT(10)
- #define CAN_INTEN_ERRNIE BIT(11)
- #define CAN_INTEN_ERRIE BIT(15)
- #define CAN_INTEN_WIE BIT(16)
- #define CAN_INTEN_SLPWIE BIT(17)
- #define CAN_ERR_WERR BIT(0)
- #define CAN_ERR_PERR BIT(1)
- #define CAN_ERR_BOERR BIT(2)
- #define CAN_ERR_ERRN BITS(4,6)
- #define CAN_ERR_TECNT BITS(16,23)
- #define CAN_ERR_RECNT BITS(24,31)
- #define CAN_BT_BAUDPSC BITS(0,9)
- #define CAN_BT_BS1 BITS(16,19)
- #define CAN_BT_BS2 BITS(20,22)
- #define CAN_BT_SJW BITS(24,25)
- #define CAN_BT_LCMOD BIT(30)
- #define CAN_BT_SCMOD BIT(31)
- #define CAN_TMI_TEN BIT(0)
- #define CAN_TMI_FT BIT(1)
- #define CAN_TMI_FF BIT(2)
- #define CAN_TMI_EFID BITS(3,31)
- #define CAN_TMI_SFID BITS(21,31)
- #define CAN_TMP_DLENC BITS(0,3)
- #define CAN_TMP_TSEN BIT(8)
- #define CAN_TMP_TS BITS(16,31)
- #define CAN_TMDATA0_DB0 BITS(0,7)
- #define CAN_TMDATA0_DB1 BITS(8,15)
- #define CAN_TMDATA0_DB2 BITS(16,23)
- #define CAN_TMDATA0_DB3 BITS(24,31)
- #define CAN_TMDATA1_DB4 BITS(0,7)
- #define CAN_TMDATA1_DB5 BITS(8,15)
- #define CAN_TMDATA1_DB6 BITS(16,23)
- #define CAN_TMDATA1_DB7 BITS(24,31)
- #define CAN_RFIFOMI_FT BIT(1)
- #define CAN_RFIFOMI_FF BIT(2)
- #define CAN_RFIFOMI_EFID BITS(3,31)
- #define CAN_RFIFOMI_SFID BITS(21,31)
- #define CAN_RFIFOMP_DLENC BITS(0,3)
- #define CAN_RFIFOMP_FI BITS(8,15)
- #define CAN_RFIFOMP_TS BITS(16,31)
- #define CAN_RFIFOMDATA0_DB0 BITS(0,7)
- #define CAN_RFIFOMDATA0_DB1 BITS(8,15)
- #define CAN_RFIFOMDATA0_DB2 BITS(16,23)
- #define CAN_RFIFOMDATA0_DB3 BITS(24,31)
- #define CAN_RFIFOMDATA1_DB4 BITS(0,7)
- #define CAN_RFIFOMDATA1_DB5 BITS(8,15)
- #define CAN_RFIFOMDATA1_DB6 BITS(16,23)
- #define CAN_RFIFOMDATA1_DB7 BITS(24,31)
- #define CAN_FCTL_FLD BIT(0)
- #define CAN_FCTL_HBC1F BITS(8,13)
- #define CAN_FMCFG_FMOD(regval) BIT(regval)
- #define CAN_FSCFG_FS(regval) BIT(regval)
- #define CAN_FAFIFOR_FAF(regval) BIT(regval)
- #define CAN_FW_FW(regval) BIT(regval)
- #define CAN_FDATA_FD(regval) BIT(regval)
- #define CAN_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
- #define CAN_REG_VAL(canx, offset) (REG32((canx) + ((uint32_t)(offset) >> 6)))
- #define CAN_BIT_POS(val) ((uint32_t)(val) & 0x1FU)
- #define CAN_REGIDX_BITS(regidx, bitpos0, bitpos1) (((uint32_t)(regidx) << 12) | ((uint32_t)(bitpos0) << 6) | (uint32_t)(bitpos1))
- #define CAN_REG_VALS(canx, offset) (REG32((canx) + ((uint32_t)(offset) >> 12)))
- #define CAN_BIT_POS0(val) (((uint32_t)(val) >> 6) & 0x1FU)
- #define CAN_BIT_POS1(val) ((uint32_t)(val) & 0x1FU)
- #define STAT_REG_OFFSET ((uint8_t)0x04U)
- #define TSTAT_REG_OFFSET ((uint8_t)0x08U)
- #define RFIFO0_REG_OFFSET ((uint8_t)0x0CU)
- #define RFIFO1_REG_OFFSET ((uint8_t)0x10U)
- #define ERR_REG_OFFSET ((uint8_t)0x18U)
- typedef enum
- {
-
- CAN_FLAG_RXL = CAN_REGIDX_BIT(STAT_REG_OFFSET, 11U),
- CAN_FLAG_LASTRX = CAN_REGIDX_BIT(STAT_REG_OFFSET, 10U),
- CAN_FLAG_RS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 9U),
- CAN_FLAG_TS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 8U),
- CAN_FLAG_SLPIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 4U),
- CAN_FLAG_WUIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 3U),
- CAN_FLAG_ERRIF = CAN_REGIDX_BIT(STAT_REG_OFFSET, 2U),
- CAN_FLAG_SLPWS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 1U),
- CAN_FLAG_IWS = CAN_REGIDX_BIT(STAT_REG_OFFSET, 0U),
-
- CAN_FLAG_TMLS2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 31U),
- CAN_FLAG_TMLS1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 30U),
- CAN_FLAG_TMLS0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 29U),
- CAN_FLAG_TME2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 28U),
- CAN_FLAG_TME1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 27U),
- CAN_FLAG_TME0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 26U),
- CAN_FLAG_MTE2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 19U),
- CAN_FLAG_MTE1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 11U),
- CAN_FLAG_MTE0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 3U),
- CAN_FLAG_MAL2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 18U),
- CAN_FLAG_MAL1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 10U),
- CAN_FLAG_MAL0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 2U),
- CAN_FLAG_MTFNERR2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 17U),
- CAN_FLAG_MTFNERR1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 9U),
- CAN_FLAG_MTFNERR0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 1U),
- CAN_FLAG_MTF2 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 16U),
- CAN_FLAG_MTF1 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 8U),
- CAN_FLAG_MTF0 = CAN_REGIDX_BIT(TSTAT_REG_OFFSET, 0U),
-
- CAN_FLAG_RFO0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 4U),
- CAN_FLAG_RFF0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 3U),
-
- CAN_FLAG_RFO1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 4U),
- CAN_FLAG_RFF1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 3U),
-
- CAN_FLAG_BOERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 2U),
- CAN_FLAG_PERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 1U),
- CAN_FLAG_WERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 0U),
- }can_flag_enum;
- typedef enum
- {
-
- CAN_INT_FLAG_SLPIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 4U, 17U),
- CAN_INT_FLAG_WUIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 3U, 16),
- CAN_INT_FLAG_ERRIF = CAN_REGIDX_BITS(STAT_REG_OFFSET, 2U, 15),
-
- CAN_INT_FLAG_MTF2 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 16U, 0U),
- CAN_INT_FLAG_MTF1 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 8U, 0U),
- CAN_INT_FLAG_MTF0 = CAN_REGIDX_BITS(TSTAT_REG_OFFSET, 0U, 0U),
-
- CAN_INT_FLAG_RFO0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 4U, 3U),
- CAN_INT_FLAG_RFF0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 3U, 2U),
- CAN_INT_FLAG_RFL0 = CAN_REGIDX_BITS(RFIFO0_REG_OFFSET, 2U, 1U),
-
- CAN_INT_FLAG_RFO1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 4U, 6U),
- CAN_INT_FLAG_RFF1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 3U, 5U),
- CAN_INT_FLAG_RFL1 = CAN_REGIDX_BITS(RFIFO1_REG_OFFSET, 2U, 4U),
-
- CAN_INT_FLAG_ERRN = CAN_REGIDX_BITS(ERR_REG_OFFSET, 3U, 11U),
- CAN_INT_FLAG_BOERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 2U, 10U),
- CAN_INT_FLAG_PERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 1U, 9U),
- CAN_INT_FLAG_WERR = CAN_REGIDX_BITS(ERR_REG_OFFSET, 0U, 8U),
- }can_interrupt_flag_enum;
- typedef struct
- {
- uint8_t working_mode;
- uint8_t resync_jump_width;
- uint8_t time_segment_1;
- uint8_t time_segment_2;
- ControlStatus time_triggered;
- ControlStatus auto_bus_off_recovery;
- ControlStatus auto_wake_up;
- ControlStatus auto_retrans;
- ControlStatus rec_fifo_overwrite;
- ControlStatus trans_fifo_order;
- uint16_t prescaler;
- }can_parameter_struct;
- typedef struct
- {
- uint32_t tx_sfid;
- uint32_t tx_efid;
- uint8_t tx_ff;
- uint8_t tx_ft;
- uint8_t tx_dlen;
- uint8_t tx_data[8];
- }can_trasnmit_message_struct;
- typedef struct
- {
- uint32_t rx_sfid;
- uint32_t rx_efid;
- uint8_t rx_ff;
- uint8_t rx_ft;
- uint8_t rx_dlen;
- uint8_t rx_data[8];
- uint8_t rx_fi;
- } can_receive_message_struct;
- typedef struct
- {
- uint16_t filter_list_high;
- uint16_t filter_list_low;
- uint16_t filter_mask_high;
- uint16_t filter_mask_low;
- uint16_t filter_fifo_number;
- uint16_t filter_number;
- uint16_t filter_mode;
- uint16_t filter_bits;
- ControlStatus filter_enable;
- }can_filter_parameter_struct;
- typedef enum
- {
- CAN_ERROR_NONE = 0,
- CAN_ERROR_FILL,
- CAN_ERROR_FORMATE,
- CAN_ERROR_ACK,
- CAN_ERROR_BITRECESSIVE,
- CAN_ERROR_BITDOMINANTER,
- CAN_ERROR_CRC,
- CAN_ERROR_SOFTWARECFG,
- }can_error_enum;
- typedef enum
- {
- CAN_TRANSMIT_FAILED = 0U,
- CAN_TRANSMIT_OK = 1U,
- CAN_TRANSMIT_PENDING = 2U,
- CAN_TRANSMIT_NOMAILBOX = 4U,
- }can_transmit_state_enum;
- typedef enum
- {
- CAN_INIT_STRUCT = 0,
- CAN_FILTER_STRUCT,
- CAN_TX_MESSAGE_STRUCT,
- CAN_RX_MESSAGE_STRUCT,
- }can_struct_type_enum;
- #define BT_BAUDPSC(regval) (BITS(0,9) & ((uint32_t)(regval) << 0))
- #define BT_BS1(regval) (BITS(16,19) & ((uint32_t)(regval) << 16))
- #define BT_BS2(regval) (BITS(20,22) & ((uint32_t)(regval) << 20))
- #define BT_SJW(regval) (BITS(24,25) & ((uint32_t)(regval) << 24))
- #define BT_MODE(regval) (BITS(30,31) & ((uint32_t)(regval) << 30))
- #define FDATA_MASK_HIGH(regval) (BITS(16,31) & ((uint32_t)(regval) << 16))
- #define FDATA_MASK_LOW(regval) (BITS(0,15) & ((uint32_t)(regval) << 0))
- #define FCTL_HBC1F(regval) (BITS(8,13) & ((uint32_t)(regval) << 8))
- #define TMI_EFID(regval) (BITS(3,31) & ((uint32_t)(regval) << 3))
- #define TMI_SFID(regval) (BITS(21,31) & ((uint32_t)(regval) << 21))
- #define TMDATA0_DB0(regval) (BITS(0,7) & ((uint32_t)(regval) << 0))
- #define TMDATA0_DB1(regval) (BITS(8,15) & ((uint32_t)(regval) << 8))
- #define TMDATA0_DB2(regval) (BITS(16,23) & ((uint32_t)(regval) << 16))
-
- #define TMDATA0_DB3(regval) (BITS(24,31) & ((uint32_t)(regval) << 24))
-
- #define TMDATA1_DB4(regval) (BITS(0,7) & ((uint32_t)(regval) << 0))
-
- #define TMDATA1_DB5(regval) (BITS(8,15) & ((uint32_t)(regval) << 8))
-
- #define TMDATA1_DB6(regval) (BITS(16,23) & ((uint32_t)(regval) << 16))
-
- #define TMDATA1_DB7(regval) (BITS(24,31) & ((uint32_t)(regval) << 24))
- #define GET_RFIFOMI_EFID(regval) GET_BITS((uint32_t)(regval), 3U, 31U)
- #define GET_RFIFOMI_SFID(regval) GET_BITS((uint32_t)(regval), 21U, 31U)
- #define GET_RFIFOMP_DLENC(regval) GET_BITS((uint32_t)(regval), 0U, 3U)
- #define GET_RFIFOMP_FI(regval) GET_BITS((uint32_t)(regval), 8U, 15U)
- #define GET_RFIFOMDATA0_DB0(regval) GET_BITS((uint32_t)(regval), 0U, 7U)
- #define GET_RFIFOMDATA0_DB1(regval) GET_BITS((uint32_t)(regval), 8U, 15U)
- #define GET_RFIFOMDATA0_DB2(regval) GET_BITS((uint32_t)(regval), 16U, 23U)
- #define GET_RFIFOMDATA0_DB3(regval) GET_BITS((uint32_t)(regval), 24U, 31U)
- #define GET_RFIFOMDATA1_DB4(regval) GET_BITS((uint32_t)(regval), 0U, 7U)
- #define GET_RFIFOMDATA1_DB5(regval) GET_BITS((uint32_t)(regval), 8U, 15U)
- #define GET_RFIFOMDATA1_DB6(regval) GET_BITS((uint32_t)(regval), 16U, 23U)
- #define GET_RFIFOMDATA1_DB7(regval) GET_BITS((uint32_t)(regval), 24U, 31U)
-
- #define GET_ERR_ERRN(regval) GET_BITS((uint32_t)(regval), 4U, 6U)
-
- #define GET_ERR_TECNT(regval) GET_BITS((uint32_t)(regval), 16U, 23U)
-
- #define GET_ERR_RECNT(regval) GET_BITS((uint32_t)(regval), 24U, 31U)
- #define ERR_ERRN(regval) (BITS(4,6) & ((uint32_t)(regval) << 4))
- #define CAN_ERRN_0 ERR_ERRN(0U)
- #define CAN_ERRN_1 ERR_ERRN(1U)
- #define CAN_ERRN_2 ERR_ERRN(2U)
- #define CAN_ERRN_3 ERR_ERRN(3U)
- #define CAN_ERRN_4 ERR_ERRN(4U)
- #define CAN_ERRN_5 ERR_ERRN(5U)
- #define CAN_ERRN_6 ERR_ERRN(6U)
- #define CAN_ERRN_7 ERR_ERRN(7U)
- #define CAN_STATE_PENDING ((uint32_t)0x00000000U)
- #define CAN_NORMAL_MODE ((uint8_t)0x00U)
- #define CAN_LOOPBACK_MODE ((uint8_t)0x01U)
- #define CAN_SILENT_MODE ((uint8_t)0x02U)
- #define CAN_SILENT_LOOPBACK_MODE ((uint8_t)0x03U)
- #define CAN_BT_SJW_1TQ ((uint8_t)0x00U)
- #define CAN_BT_SJW_2TQ ((uint8_t)0x01U)
- #define CAN_BT_SJW_3TQ ((uint8_t)0x02U)
- #define CAN_BT_SJW_4TQ ((uint8_t)0x03U)
- #define CAN_BT_BS1_1TQ ((uint8_t)0x00U)
- #define CAN_BT_BS1_2TQ ((uint8_t)0x01U)
- #define CAN_BT_BS1_3TQ ((uint8_t)0x02U)
- #define CAN_BT_BS1_4TQ ((uint8_t)0x03U)
- #define CAN_BT_BS1_5TQ ((uint8_t)0x04U)
- #define CAN_BT_BS1_6TQ ((uint8_t)0x05U)
- #define CAN_BT_BS1_7TQ ((uint8_t)0x06U)
- #define CAN_BT_BS1_8TQ ((uint8_t)0x07U)
- #define CAN_BT_BS1_9TQ ((uint8_t)0x08U)
- #define CAN_BT_BS1_10TQ ((uint8_t)0x09U)
- #define CAN_BT_BS1_11TQ ((uint8_t)0x0AU)
- #define CAN_BT_BS1_12TQ ((uint8_t)0x0BU)
- #define CAN_BT_BS1_13TQ ((uint8_t)0x0CU)
- #define CAN_BT_BS1_14TQ ((uint8_t)0x0DU)
- #define CAN_BT_BS1_15TQ ((uint8_t)0x0EU)
- #define CAN_BT_BS1_16TQ ((uint8_t)0x0FU)
- #define CAN_BT_BS2_1TQ ((uint8_t)0x00U)
- #define CAN_BT_BS2_2TQ ((uint8_t)0x01U)
- #define CAN_BT_BS2_3TQ ((uint8_t)0x02U)
- #define CAN_BT_BS2_4TQ ((uint8_t)0x03U)
- #define CAN_BT_BS2_5TQ ((uint8_t)0x04U)
- #define CAN_BT_BS2_6TQ ((uint8_t)0x05U)
- #define CAN_BT_BS2_7TQ ((uint8_t)0x06U)
- #define CAN_BT_BS2_8TQ ((uint8_t)0x07U)
- #define CAN_MAILBOX0 ((uint8_t)0x00U)
- #define CAN_MAILBOX1 ((uint8_t)0x01U)
- #define CAN_MAILBOX2 ((uint8_t)0x02U)
- #define CAN_NOMAILBOX ((uint8_t)0x03U)
- #define CAN_FF_STANDARD ((uint32_t)0x00000000U)
- #define CAN_FF_EXTENDED ((uint32_t)0x00000004U)
- #define CAN_FIFO0 ((uint8_t)0x00U)
- #define CAN_FIFO1 ((uint8_t)0x01U)
- #define CAN_RFIF_RFL_MASK ((uint32_t)0x00000003U)
- #define CAN_SFID_MASK ((uint32_t)0x000007FFU)
- #define CAN_EFID_MASK ((uint32_t)0x1FFFFFFFU)
- #define CAN_MODE_INITIALIZE ((uint8_t)0x01U)
- #define CAN_MODE_NORMAL ((uint8_t)0x02U)
- #define CAN_MODE_SLEEP ((uint8_t)0x04U)
- #define CAN_FILTERBITS_16BIT ((uint8_t)0x00U)
- #define CAN_FILTERBITS_32BIT ((uint8_t)0x01U)
- #define CAN_FILTERMODE_MASK ((uint8_t)0x00U)
- #define CAN_FILTERMODE_LIST ((uint8_t)0x01U)
- #define CAN_FILTER_MASK_16BITS ((uint32_t)0x0000FFFFU)
- #define CAN_FT_DATA ((uint32_t)0x00000000U)
- #define CAN_FT_REMOTE ((uint32_t)0x00000002U)
- #define CAN_TIMEOUT ((uint32_t)0x0000FFFFU)
- #define CAN_INT_TME CAN_INTEN_TMEIE
- #define CAN_INT_RFNE0 CAN_INTEN_RFNEIE0
- #define CAN_INT_RFF0 CAN_INTEN_RFFIE0
- #define CAN_INT_RFO0 CAN_INTEN_RFOIE0
- #define CAN_INT_RFNE1 CAN_INTEN_RFNEIE1
- #define CAN_INT_RFF1 CAN_INTEN_RFFIE1
- #define CAN_INT_RFO1 CAN_INTEN_RFOIE1
- #define CAN_INT_WERR CAN_INTEN_WERRIE
- #define CAN_INT_PERR CAN_INTEN_PERRIE
- #define CAN_INT_BO CAN_INTEN_BOIE
- #define CAN_INT_ERRN CAN_INTEN_ERRNIE
- #define CAN_INT_ERR CAN_INTEN_ERRIE
- #define CAN_INT_WAKEUP CAN_INTEN_WIE
- #define CAN_INT_SLPW CAN_INTEN_SLPWIE
- void can_deinit(uint32_t can_periph);
- void can_struct_para_init(can_struct_type_enum type, void* p_struct);
- ErrStatus can_init(uint32_t can_periph, can_parameter_struct* can_parameter_init);
- void can_filter_init(can_filter_parameter_struct* can_filter_parameter_init);
- void can1_filter_start_bank(uint8_t start_bank);
- void can_debug_freeze_enable(uint32_t can_periph);
- void can_debug_freeze_disable(uint32_t can_periph);
- void can_time_trigger_mode_enable(uint32_t can_periph);
- void can_time_trigger_mode_disable(uint32_t can_periph);
- uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct* transmit_message);
- can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number);
- void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number);
- void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct* receive_message);
- void can_fifo_release(uint32_t can_periph, uint8_t fifo_number);
- uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number);
- ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode);
- ErrStatus can_wakeup(uint32_t can_periph);
- can_error_enum can_error_get(uint32_t can_periph);
- uint8_t can_receive_error_number_get(uint32_t can_periph);
- uint8_t can_transmit_error_number_get(uint32_t can_periph);
- void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt);
- void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt);
- FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag);
- void can_flag_clear(uint32_t can_periph, can_flag_enum flag);
- FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag);
- void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag);
- #endif
|