123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- #ifndef __STM8S_CAN_H
- #define __STM8S_CAN_H
- #include "stm8s.h"
- #define CAN_STDID_SIZE ((uint16_t)0x07FF)
- #define CAN_EXTID_SIZE ((uint32_t)0x1FFFFFFF)
- #define CAN_DLC_MAX ((uint8_t)0x08)
- typedef enum
- {
- CAN_Page_TxMailBox0 = ((uint8_t) 0),
- CAN_Page_TxMailBox1 = ((uint8_t) 1),
- CAN_Page_TxMailBox2 = ((uint8_t) 5),
- CAN_Page_Filter01 = ((uint8_t) 2),
- CAN_Page_Filter23 = ((uint8_t) 3),
- CAN_Page_Filter45 = ((uint8_t) 4),
- CAN_Page_Config = ((uint8_t) 6),
- CAN_Page_RxFifo = ((uint8_t) 7)
- }CAN_Page_TypeDef;
- typedef enum {
- CAN_InitStatus_Failed =0,
- CAN_InitStatus_Success =! CAN_InitStatus_Failed
- } CAN_InitStatus_TypeDef;
-
-
- typedef enum
- {
- CAN_OperatingMode_Initialization =((uint8_t)0x00),
- CAN_OperatingMode_Normal =((uint8_t)0x01),
- CAN_OperatingMode_Sleep =((uint8_t)0x02)
- }CAN_OperatingMode_TypeDef;
-
- typedef enum
- {
- CAN_ModeStatus_Failed = ((uint8_t)0x00),
- CAN_ModeStatus_Success =! CAN_ModeStatus_Failed
- }CAN_ModeStatus_TypeDef;
-
- typedef enum
- {
- CAN_MasterCtrl_AllDisabled =((uint8_t)0x00),
- CAN_MasterCtrl_AllEnabled =((uint8_t)0xFC),
- CAN_MasterCtrl_TimeTriggerCOMMode =((uint8_t)0x80),
- CAN_MasterCtrl_AutoBusOffManagement =((uint8_t)0x40),
- CAN_MasterCtrl_AutoWakeUpMode =((uint8_t)0x20),
- CAN_MasterCtrl_NoAutoReTx =((uint8_t)0x10),
- CAN_MasterCtrl_RxFifoLockedMode =((uint8_t)0x08),
- CAN_MasterCtrl_TxFifoPriority =((uint8_t)0x04)
- }CAN_MasterCtrl_TypeDef;
- typedef enum
- {
- CAN_Mode_Normal =((uint8_t)0x00),
- CAN_Mode_LoopBack =((uint8_t)0x01),
- CAN_Mode_Silent =((uint8_t)0x02),
- CAN_Mode_Silent_LoopBack =((uint8_t)0x03)
- }CAN_Mode_TypeDef;
- typedef enum
- {
- CAN_SynJumpWidth_1TimeQuantum =((uint8_t)0x00),
- CAN_SynJumpWidth_2TimeQuantum =((uint8_t)0x40),
- CAN_SynJumpWidth_3TimeQuantum =((uint8_t)0x80),
- CAN_SynJumpWidth_4TimeQuantum =((uint8_t)0xC0)
- }CAN_SynJumpWidth_TypeDef;
- typedef enum
- {
- CAN_BitSeg1_1TimeQuantum =((uint8_t)0x00),
- CAN_BitSeg1_2TimeQuantum =((uint8_t)0x01),
- CAN_BitSeg1_3TimeQuantum =((uint8_t)0x02),
- CAN_BitSeg1_4TimeQuantum =((uint8_t)0x03) ,
- CAN_BitSeg1_5TimeQuantum =((uint8_t)0x04) ,
- CAN_BitSeg1_6TimeQuantum =((uint8_t)0x05) ,
- CAN_BitSeg1_7TimeQuantum =((uint8_t)0x06) ,
- CAN_BitSeg1_8TimeQuantum =((uint8_t)0x07),
- CAN_BitSeg1_9TimeQuantum =((uint8_t)0x08),
- CAN_BitSeg1_10TimeQuantum =((uint8_t)0x09),
- CAN_BitSeg1_11TimeQuantum =((uint8_t)0x0A),
- CAN_BitSeg1_12TimeQuantum =((uint8_t)0x0B),
- CAN_BitSeg1_13TimeQuantum =((uint8_t)0x0C),
- CAN_BitSeg1_14TimeQuantum =((uint8_t)0x0D),
- CAN_BitSeg1_15TimeQuantum =((uint8_t)0x0E),
- CAN_BitSeg1_16TimeQuantum =((uint8_t)0x0F)
- }CAN_BitSeg1_TypeDef;
- typedef enum
- {
- CAN_BitSeg2_1TimeQuantum = ((uint8_t)0x00),
- CAN_BitSeg2_2TimeQuantum = ((uint8_t)0x10),
- CAN_BitSeg2_3TimeQuantum = ((uint8_t)0x20),
- CAN_BitSeg2_4TimeQuantum = ((uint8_t)0x30),
- CAN_BitSeg2_5TimeQuantum = ((uint8_t)0x40),
- CAN_BitSeg2_6TimeQuantum = ((uint8_t)0x50),
- CAN_BitSeg2_7TimeQuantum = ((uint8_t)0x60),
- CAN_BitSeg2_8TimeQuantum = ((uint8_t)0x70)
- }CAN_BitSeg2_TypeDef;
- typedef enum
- {
- CAN_FilterNumber_0 = ((uint8_t)0x00),
- CAN_FilterNumber_1 = ((uint8_t)0x01),
- CAN_FilterNumber_2 = ((uint8_t)0x02),
- CAN_FilterNumber_3 = ((uint8_t)0x03),
- CAN_FilterNumber_4 = ((uint8_t)0x04),
- CAN_FilterNumber_5 = ((uint8_t)0x05)
- }CAN_FilterNumber_TypeDef;
- typedef enum
- {
- CAN_FilterMode_IdMask = ((uint8_t)0x00),
- CAN_FilterMode_IdMask_IdList = ((uint8_t)0x10),
- CAN_FilterMode_IdList_IdMask = ((uint8_t)0x11),
- CAN_FilterMode_IdList = ((uint8_t)0x01)
- }CAN_FilterMode_TypeDef;
- typedef enum
- {
- CAN_FilterScale_8Bit =((uint8_t)0x00),
- CAN_FilterScale_16_8Bit =((uint8_t)0x02),
- CAN_FilterScale_16Bit =((uint8_t)0x04),
- CAN_FilterScale_32Bit =((uint8_t)0x06)
- }CAN_FilterScale_TypeDef;
- typedef enum
- {
- CAN_TransmitMailBox_0 = ((uint8_t) 0x00),
- CAN_TransmitMailBox_1 = ((uint8_t) 0x01),
- CAN_TransmitMailBox_2 = ((uint8_t) 0x05)
- }CAN_TransmitMailBox_TypeDef;
- typedef enum
- {
- CAN_NbrPendingMessage_0 = ((uint8_t)0x00),
- CAN_NbrPendingMessage_1 = ((uint8_t)0x01),
- CAN_NbrPendingMessage_2 = ((uint8_t)0x02),
- CAN_NbrPendingMessage_3 = ((uint8_t)0x03)
- }CAN_NbrPendingMessage_TypeDef;
- typedef enum
- {
- CAN_Id_Standard =((uint8_t)0x00),
- CAN_Id_Extended =((uint8_t)0x40)
- }CAN_Id_TypeDef;
- typedef enum
- {
- CAN_RTR_Data = ((uint8_t)0x00),
- CAN_RTR_Remote = ((uint8_t)0x20)
- }CAN_RTR_TypeDef;
- typedef enum
- {
- CAN_TxStatus_Failed =((uint8_t)0xF0),
- CAN_TxStatus_Ok =((uint8_t)0xF1),
- CAN_TxStatus_Pending =((uint8_t)0xF2),
- CAN_TxStatus_NoMailBox =((uint8_t)0xF4),
- CAN_TxStatus_MailBoxEmpty =((uint8_t)0xF5),
- CAN_TxStatus_MailBox0Ok =((uint8_t)0x00),
- CAN_TxStatus_MailBox1Ok =((uint8_t)0x01),
- CAN_TxStatus_MailBox2Ok =((uint8_t)0x05)
- }CAN_TxStatus_TypeDef;
- typedef enum
- {
- CAN_Sleep_Failed = ((uint8_t)0x00),
- CAN_Sleep_Ok = ((uint8_t)0x01)
- }CAN_Sleep_TypeDef;
- typedef enum
- {
- CAN_WakeUp_Failed = ((uint8_t)0x00),
- CAN_WakeUp_Ok = ((uint8_t)0x01)
- }CAN_WakeUp_TypeDef;
- typedef enum
- {
-
-
-
- CAN_FLAG_RQCP0 =((uint16_t)0x3401),
- CAN_FLAG_RQCP1 =((uint16_t)0x3402),
- CAN_FLAG_RQCP2 =((uint16_t)0x3404),
-
- CAN_FLAG_FMP =((uint16_t)0x1203),
- CAN_FLAG_FF =((uint16_t)0x3208),
- CAN_FLAG_FOV =((uint16_t)0x3210),
-
- CAN_FLAG_WKU =((uint16_t)0x3108),
-
- CAN_FLAG_EWG =((uint16_t)0x1001),
- CAN_FLAG_EPV =((uint16_t)0x1002),
- CAN_FLAG_BOF =((uint16_t)0x1004),
- CAN_FLAG_LEC =((uint16_t)0x3070)
- }CAN_FLAG_TypeDef;
- typedef enum
- {
-
- CAN_IT_TME =((uint16_t)0x0001),
-
- CAN_IT_FMP =((uint16_t)0x0002),
- CAN_IT_FF =((uint16_t)0x0004),
- CAN_IT_FOV =((uint16_t)0x0008),
-
- CAN_IT_WKU =((uint16_t)0x0080),
-
- CAN_IT_ERR =((uint16_t)0x4000),
- CAN_IT_EWG =((uint16_t)0x0100),
- CAN_IT_EPV =((uint16_t)0x0200),
- CAN_IT_BOF =((uint16_t)0x0400),
- CAN_IT_LEC =((uint16_t)0x0800)
- } CAN_IT_TypeDef;
- typedef enum
- {
- CAN_ST7Compatibility_Enable = ((uint8_t)0x00),
- CAN_ST7Compatibility_Disable = ((uint8_t)0x10)
- }CAN_ST7Compatibility_TypeDef;
- typedef enum
- {
- CAN_ErrorCode_NoErr = ((uint8_t)0x00),
- CAN_ErrorCode_StuffErr = ((uint8_t)0x10),
- CAN_ErrorCode_FormErr = ((uint8_t)0x20),
- CAN_ErrorCode_ACKErr = ((uint8_t)0x30),
- CAN_ErrorCode_BitRecessiveErr = ((uint8_t)0x40),
- CAN_ErrorCode_BitDominantErr = ((uint8_t)0x50),
- CAN_ErrorCode_CRCErr = ((uint8_t)0x60),
- CAN_ErrorCode_SoftwareSetErr = ((uint8_t)0x70)
- }CAN_ErrorCode_TypeDef;
- #define IS_CAN_ST7_COMPATIBILITY_OK(STATE) (((STATE) == CAN_ST7Compatibility_Enable) || ((STATE) == CAN_ST7Compatibility_Disable))
- #define IS_CAN_OPERATINGMODE_OK(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\
- ((MODE) == CAN_OperatingMode_Normal)|| \
- ((MODE) == CAN_OperatingMode_Sleep))
- #define IS_CAN_MASTERCTRL_OK(MODE) (((MODE) == CAN_MasterCtrl_AllDisabled) || \
- (((MODE) <= CAN_MasterCtrl_AllEnabled) && ((MODE) >= CAN_MasterCtrl_TxFifoPriority)))
- #define IS_CAN_MODE_OK(MODE) (((MODE) == CAN_Mode_Normal) || ((MODE) == CAN_Mode_LoopBack)|| \
- ((MODE) == CAN_Mode_Silent) || ((MODE) == CAN_Mode_Silent_LoopBack))
- #define IS_CAN_SYNJUMPWIDTH_OK(SJW) (((SJW) == CAN_SynJumpWidth_1TimeQuantum) || ((SJW) == CAN_SynJumpWidth_2TimeQuantum)|| \
- ((SJW) == CAN_SynJumpWidth_3TimeQuantum) || ((SJW) == CAN_SynJumpWidth_4TimeQuantum))
- #define IS_CAN_BITSEG1_OK(BS1) ((BS1) <= CAN_BitSeg1_16TimeQuantum)
- #define IS_CAN_BITSEG2_OK(BS2) ((((BS2) >= CAN_BitSeg2_2TimeQuantum) && ((BS2) <= CAN_BitSeg2_8TimeQuantum))|| ((BS2) == CAN_BitSeg2_1TimeQuantum))
- #define IS_CAN_PRESCALER_OK(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 64))
- #define IS_CAN_FILTER_NUMBER_OK(NUMBER) (((NUMBER) == CAN_FilterNumber_0) || \
- ((NUMBER) == CAN_FilterNumber_1) || \
- ((NUMBER) == CAN_FilterNumber_2) || \
- ((NUMBER) == CAN_FilterNumber_3) || \
- ((NUMBER) == CAN_FilterNumber_4) || \
- ((NUMBER) == CAN_FilterNumber_5))
- #define IS_CAN_FILTER_MODE_OK(MODE) (((MODE) == CAN_FilterMode_IdMask) || \
- ((MODE) == CAN_FilterMode_IdMask_IdList) || \
- ((MODE) == CAN_FilterMode_IdList_IdMask) || \
- ((MODE) == CAN_FilterMode_IdList))
- #define IS_CAN_FILTER_SCALE_OK(SCALE) (((SCALE) == CAN_FilterScale_8Bit)|| \
- ((SCALE) == CAN_FilterScale_16_8Bit) ||\
- ((SCALE) == CAN_FilterScale_16Bit )||\
- ((SCALE) == CAN_FilterScale_32Bit))
- #define IS_CAN_TRANSMITMAILBOX_OK(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TransmitMailBox_0) || \
- ((TRANSMITMAILBOX) == CAN_TransmitMailBox_1) || \
- ((TRANSMITMAILBOX) == CAN_TransmitMailBox_2))
- #define IS_CAN_STDID_OK(STDID) ((STDID) <= ((uint16_t)CAN_STDID_SIZE))
- #define IS_CAN_EXTID_OK(EXTID) ((EXTID) <= ((uint32_t)CAN_EXTID_SIZE))
- #define IS_CAN_DLC_OK(DLC) ((DLC) <= CAN_DLC_MAX)
- #define IS_CAN_IDTYPE_OK(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || ((IDTYPE) == CAN_Id_Extended))
- #define IS_CAN_RTR_OK(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote))
- #define IS_CAN_FLAG_STATUS_OK(FLAG) (((FLAG) == CAN_FLAG_RQCP0) || ((FLAG) == CAN_FLAG_RQCP1) ||\
- ((FLAG) == CAN_FLAG_RQCP2) || ((FLAG) == CAN_FLAG_FMP) ||\
- ((FLAG) == CAN_FLAG_FF) || ((FLAG) == CAN_FLAG_FOV) ||\
- ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_EWG) ||\
- ((FLAG) == CAN_FLAG_EPV) || ((FLAG) == CAN_FLAG_BOF) ||\
- ((FLAG) == CAN_FLAG_LEC))
- #define IS_CAN_FLAG_CLEAR_OK(FLAG) (((FLAG) == CAN_FLAG_RQCP0) || ((FLAG) == CAN_FLAG_RQCP1) ||\
- ((FLAG) == CAN_FLAG_RQCP2) || ((FLAG) == CAN_FLAG_FF) ||\
- ((FLAG) == CAN_FLAG_FOV) || ((FLAG) == CAN_FLAG_WKU) ||\
- ((FLAG) == CAN_FLAG_LEC))
- #define CAN_IT_CONFIG_MASK ~(uint16_t)(CAN_IT_TME|CAN_IT_FMP|CAN_IT_FF|CAN_IT_FOV|CAN_IT_WKU|CAN_IT_EWG|CAN_IT_EPV|CAN_IT_BOF|CAN_IT_LEC|CAN_IT_ERR)
- #define IS_CAN_IT_CONFIG_OK(IT) (((IT) != 0x0000) && ((uint16_t)((uint16_t)(IT) & (uint16_t)CAN_IT_CONFIG_MASK) == 0x0000))
- #define IS_CAN_IT_STATUS_OK(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP) ||\
- ((IT) == CAN_IT_FF) || ((IT) == CAN_IT_FOV) || \
- ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_ERR) || \
- ((IT) == CAN_IT_EWG) || ((IT) == CAN_IT_EPV) || \
- ((IT) == CAN_IT_BOF) || ((IT) == CAN_IT_LEC) )
- #define IS_CAN_IT_PENDING_BIT_OK(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF) ||\
- ((IT) == CAN_IT_FOV) || ((IT) == CAN_IT_WKU) ||\
- ((IT) == CAN_IT_ERR) || ((IT) == CAN_IT_EWG) ||\
- ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF)||\
- ((IT) == CAN_IT_LEC))
- #define IS_CAN_LAST_ERROR_CODE_OK(CODE) (((CODE) & 0x8F) == 0x00)
- void CAN_DeInit(void);
- CAN_InitStatus_TypeDef CAN_Init(CAN_MasterCtrl_TypeDef CAN_MasterCtrl,
- CAN_Mode_TypeDef CAN_Mode,
- CAN_SynJumpWidth_TypeDef CAN_SynJumpWidth,
- CAN_BitSeg1_TypeDef CAN_BitSeg1,
- CAN_BitSeg2_TypeDef CAN_BitSeg2,
- uint8_t CAN_Prescaler);
- void CAN_FilterInit(CAN_FilterNumber_TypeDef CAN_FilterNumber,
- FunctionalState CAN_FilterActivation,
- CAN_FilterMode_TypeDef CAN_FilterMode,
- CAN_FilterScale_TypeDef CAN_FilterScale,
- uint8_t CAN_FilterID1,
- uint8_t CAN_FilterID2,
- uint8_t CAN_FilterID3,
- uint8_t CAN_FilterID4,
- uint8_t CAN_FilterIDMask1,
- uint8_t CAN_FilterIDMask2,
- uint8_t CAN_FilterIDMask3,
- uint8_t CAN_FilterIDMask4);
- void CAN_ITConfig(CAN_IT_TypeDef CAN_IT, FunctionalState NewState);
- void CAN_ST7CompatibilityCmd(CAN_ST7Compatibility_TypeDef CAN_ST7Compatibility);
- CAN_TxStatus_TypeDef CAN_Transmit( uint32_t CAN_Id,
- CAN_Id_TypeDef CAN_IDE,
- CAN_RTR_TypeDef CAN_RTR,
- uint8_t CAN_DLC,
- uint8_t *CAN_Data);
- void CAN_TTComModeCmd(FunctionalState NewState);
- CAN_TxStatus_TypeDef CAN_TransmitStatus(CAN_TransmitMailBox_TypeDef CAN_TransmitMailbox);
- void CAN_CancelTransmit(CAN_TransmitMailBox_TypeDef CAN_TransmitMailbox);
- void CAN_FIFORelease(void);
- CAN_NbrPendingMessage_TypeDef CAN_MessagePending(void);
- void CAN_Receive(void);
- uint32_t CAN_GetReceivedId(void);
- CAN_Id_TypeDef CAN_GetReceivedIDE(void);
- CAN_RTR_TypeDef CAN_GetReceivedRTR(void);
- uint8_t CAN_GetReceivedDLC(void);
- uint8_t CAN_GetReceivedData(uint8_t CAN_DataIndex);
- uint8_t CAN_GetReceivedFMI(void);
- uint16_t CAN_GetMessageTimeStamp(void);
- CAN_Sleep_TypeDef CAN_Sleep(void);
- CAN_WakeUp_TypeDef CAN_WakeUp(void);
- CAN_ModeStatus_TypeDef CAN_OperatingModeRequest(CAN_OperatingMode_TypeDef CAN_OperatingMode);
- CAN_ErrorCode_TypeDef CAN_GetLastErrorCode(void);
- CAN_Page_TypeDef CAN_GetSelectedPage(void);
- void CAN_SelectPage(CAN_Page_TypeDef CAN_Page);
- FlagStatus CAN_GetFlagStatus(CAN_FLAG_TypeDef CAN_Flag);
- void CAN_ClearFlag(CAN_FLAG_TypeDef CAN_Flag);
- ITStatus CAN_GetITStatus(CAN_IT_TypeDef CAN_IT);
- void CAN_ClearITPendingBit(CAN_IT_TypeDef CAN_IT);
- #endif
|