123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632 |
- #ifndef __STM8S_I2C_H
- #define __STM8S_I2C_H
- #include "stm8s.h"
- typedef enum
- {
- I2C_DUTYCYCLE_2 = (uint8_t)0x00,
- I2C_DUTYCYCLE_16_9 = (uint8_t)0x40
- } I2C_DutyCycle_TypeDef;
- typedef enum
- {
- I2C_ACK_NONE = (uint8_t)0x00,
- I2C_ACK_CURR = (uint8_t)0x01,
- I2C_ACK_NEXT = (uint8_t)0x02
- } I2C_Ack_TypeDef;
- typedef enum
- {
- I2C_ADDMODE_7BIT = (uint8_t)0x00,
- I2C_ADDMODE_10BIT = (uint8_t)0x80
- } I2C_AddMode_TypeDef;
- typedef enum
- {
- I2C_IT_ERR = (uint8_t)0x01,
- I2C_IT_EVT = (uint8_t)0x02,
- I2C_IT_BUF = (uint8_t)0x04
- } I2C_IT_TypeDef;
- typedef enum
- {
- I2C_DIRECTION_TX = (uint8_t)0x00,
- I2C_DIRECTION_RX = (uint8_t)0x01
- } I2C_Direction_TypeDef;
- typedef enum
- {
-
- I2C_FLAG_TXEMPTY = (uint16_t)0x0180,
- I2C_FLAG_RXNOTEMPTY = (uint16_t)0x0140,
- I2C_FLAG_STOPDETECTION = (uint16_t)0x0110,
- I2C_FLAG_HEADERSENT = (uint16_t)0x0108,
- I2C_FLAG_TRANSFERFINISHED = (uint16_t)0x0104,
- I2C_FLAG_ADDRESSSENTMATCHED = (uint16_t)0x0102,
- I2C_FLAG_STARTDETECTION = (uint16_t)0x0101,
-
- I2C_FLAG_WAKEUPFROMHALT = (uint16_t)0x0220,
- I2C_FLAG_OVERRUNUNDERRUN = (uint16_t)0x0208,
- I2C_FLAG_ACKNOWLEDGEFAILURE = (uint16_t)0x0204,
- I2C_FLAG_ARBITRATIONLOSS = (uint16_t)0x0202,
- I2C_FLAG_BUSERROR = (uint16_t)0x0201,
-
- I2C_FLAG_GENERALCALL = (uint16_t)0x0310,
- I2C_FLAG_TRANSMITTERRECEIVER = (uint16_t)0x0304,
- I2C_FLAG_BUSBUSY = (uint16_t)0x0302,
- I2C_FLAG_MASTERSLAVE = (uint16_t)0x0301
- } I2C_Flag_TypeDef;
- typedef enum
- {
-
- I2C_ITPENDINGBIT_TXEMPTY = (uint16_t)0x1680,
- I2C_ITPENDINGBIT_RXNOTEMPTY = (uint16_t)0x1640,
- I2C_ITPENDINGBIT_STOPDETECTION = (uint16_t)0x1210,
- I2C_ITPENDINGBIT_HEADERSENT = (uint16_t)0x1208,
- I2C_ITPENDINGBIT_TRANSFERFINISHED = (uint16_t)0x1204,
- I2C_ITPENDINGBIT_ADDRESSSENTMATCHED = (uint16_t)0x1202,
- I2C_ITPENDINGBIT_STARTDETECTION = (uint16_t)0x1201,
-
- I2C_ITPENDINGBIT_WAKEUPFROMHALT = (uint16_t)0x2220,
- I2C_ITPENDINGBIT_OVERRUNUNDERRUN = (uint16_t)0x2108,
- I2C_ITPENDINGBIT_ACKNOWLEDGEFAILURE = (uint16_t)0x2104,
- I2C_ITPENDINGBIT_ARBITRATIONLOSS = (uint16_t)0x2102,
- I2C_ITPENDINGBIT_BUSERROR = (uint16_t)0x2101
- } I2C_ITPendingBit_TypeDef;
- typedef enum
- {
-
-
-
- I2C_EVENT_MASTER_MODE_SELECT = (uint16_t)0x0301,
-
-
- I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED = (uint16_t)0x0782,
- I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED = (uint16_t)0x0302,
-
- I2C_EVENT_MASTER_MODE_ADDRESS10 = (uint16_t)0x0308,
-
-
-
- I2C_EVENT_MASTER_BYTE_RECEIVED = (uint16_t)0x0340,
-
-
- I2C_EVENT_MASTER_BYTE_TRANSMITTING = (uint16_t)0x0780,
-
- I2C_EVENT_MASTER_BYTE_TRANSMITTED = (uint16_t)0x0784,
-
-
-
-
- I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED = (uint16_t)0x0202,
- I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED = (uint16_t)0x0682,
-
- I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED = (uint16_t)0x1200,
-
-
-
- I2C_EVENT_SLAVE_BYTE_RECEIVED = (uint16_t)0x0240,
-
- I2C_EVENT_SLAVE_STOP_DETECTED = (uint16_t)0x0010,
-
-
- I2C_EVENT_SLAVE_BYTE_TRANSMITTED = (uint16_t)0x0684,
- I2C_EVENT_SLAVE_BYTE_TRANSMITTING = (uint16_t)0x0680,
-
- I2C_EVENT_SLAVE_ACK_FAILURE = (uint16_t)0x0004
- } I2C_Event_TypeDef;
- #define I2C_MAX_STANDARD_FREQ ((uint32_t)100000)
- #define I2C_MAX_FAST_FREQ ((uint32_t)400000)
- #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007)
- #define I2C_MAX_INPUT_FREQ ((uint8_t)24)
- #else
- #define I2C_MAX_INPUT_FREQ ((uint8_t)16)
- #endif
- #define IS_I2C_DUTYCYCLE_OK(DUTY) \
- (((DUTY) == I2C_DUTYCYCLE_2) || \
- ((DUTY) == I2C_DUTYCYCLE_16_9))
- #define IS_I2C_ACK_OK(ACK) \
- (((ACK) == I2C_ACK_NONE) || \
- ((ACK) == I2C_ACK_CURR) || \
- ((ACK) == I2C_ACK_NEXT))
- #define IS_I2C_ADDMODE_OK(ADDMODE) \
- (((ADDMODE) == I2C_ADDMODE_7BIT) || \
- ((ADDMODE) == I2C_ADDMODE_10BIT))
- #define IS_I2C_INTERRUPT_OK(IT) \
- (((IT) == I2C_IT_ERR) || \
- ((IT) == I2C_IT_EVT) || \
- ((IT) == I2C_IT_BUF) || \
- ((IT) == (I2C_IT_ERR | I2C_IT_EVT)) || \
- ((IT) == (I2C_IT_ERR | I2C_IT_BUF)) || \
- ((IT) == (I2C_IT_EVT | I2C_IT_BUF)) || \
- ((IT) == (I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR)))
- #define IS_I2C_DIRECTION_OK(DIR) \
- (((DIR) == I2C_DIRECTION_TX) || \
- ((DIR) == I2C_DIRECTION_RX))
- #define IS_I2C_FLAG_OK(FLAG) \
- (((FLAG) == I2C_FLAG_TXEMPTY) || \
- ((FLAG) == I2C_FLAG_RXNOTEMPTY) || \
- ((FLAG) == I2C_FLAG_STOPDETECTION) || \
- ((FLAG) == I2C_FLAG_HEADERSENT) || \
- ((FLAG) == I2C_FLAG_TRANSFERFINISHED) || \
- ((FLAG) == I2C_FLAG_ADDRESSSENTMATCHED) || \
- ((FLAG) == I2C_FLAG_STARTDETECTION) || \
- ((FLAG) == I2C_FLAG_WAKEUPFROMHALT) || \
- ((FLAG) == I2C_FLAG_OVERRUNUNDERRUN) || \
- ((FLAG) == I2C_FLAG_ACKNOWLEDGEFAILURE) || \
- ((FLAG) == I2C_FLAG_ARBITRATIONLOSS) || \
- ((FLAG) == I2C_FLAG_BUSERROR) || \
- ((FLAG) == I2C_FLAG_GENERALCALL) || \
- ((FLAG) == I2C_FLAG_TRANSMITTERRECEIVER) || \
- ((FLAG) == I2C_FLAG_BUSBUSY) || \
- ((FLAG) == I2C_FLAG_MASTERSLAVE))
- #define IS_I2C_CLEAR_FLAG_OK(FLAG) ((((uint16_t)(FLAG) & (uint16_t)0xFD00) == 0x00) \
- && ((uint16_t)(FLAG) != 0x00))
- #define IS_I2C_ITPENDINGBIT_OK(ITPENDINGBIT) \
- (((ITPENDINGBIT) == I2C_ITPENDINGBIT_TXEMPTY) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_RXNOTEMPTY) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_STOPDETECTION) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_HEADERSENT) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_TRANSFERFINISHED) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_ADDRESSSENTMATCHED) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_STARTDETECTION) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_WAKEUPFROMHALT) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_OVERRUNUNDERRUN) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_ACKNOWLEDGEFAILURE) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_ARBITRATIONLOSS) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_BUSERROR))
-
- #define IS_I2C_CLEAR_ITPENDINGBIT_OK(ITPENDINGBIT) \
- (((ITPENDINGBIT) == I2C_ITPENDINGBIT_WAKEUPFROMHALT) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_OVERRUNUNDERRUN) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_ACKNOWLEDGEFAILURE) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_ARBITRATIONLOSS) || \
- ((ITPENDINGBIT) == I2C_ITPENDINGBIT_BUSERROR))
-
- #define IS_I2C_EVENT_OK(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \
- ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \
- ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \
- ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \
- ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | (uint16_t)I2C_FLAG_GENERALCALL)) || \
- ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \
- ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | (uint16_t)I2C_FLAG_GENERALCALL)) || \
- ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE) || \
- ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \
- ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \
- ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \
- ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \
- ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \
- ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \
- ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTING) || \
- ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10))
- #define IS_I2C_OWN_ADDRESS_OK(ADDRESS) \
- ((ADDRESS) <= (uint16_t)0x03FF)
- #define IS_I2C_ADDRESS_OK(ADD) \
- (((ADD) & (uint8_t)0x01) == (uint8_t)0x00)
- #define IS_I2C_INPUT_CLOCK_FREQ_OK(FREQ) \
- (((FREQ) >= (uint8_t)1) && ((FREQ) <= I2C_MAX_INPUT_FREQ))
- #define IS_I2C_OUTPUT_CLOCK_FREQ_OK(FREQ) \
- (((FREQ) >= (uint8_t)1) && ((FREQ) <= I2C_MAX_FAST_FREQ))
- void I2C_DeInit(void);
- void I2C_Init(uint32_t OutputClockFrequencyHz, uint16_t OwnAddress,
- I2C_DutyCycle_TypeDef I2C_DutyCycle, I2C_Ack_TypeDef Ack,
- I2C_AddMode_TypeDef AddMode, uint8_t InputClockFrequencyMHz );
- void I2C_Cmd(FunctionalState NewState);
- void I2C_GeneralCallCmd(FunctionalState NewState);
- void I2C_GenerateSTART(FunctionalState NewState);
- void I2C_GenerateSTOP(FunctionalState NewState);
- void I2C_SoftwareResetCmd(FunctionalState NewState);
- void I2C_StretchClockCmd(FunctionalState NewState);
- void I2C_AcknowledgeConfig(I2C_Ack_TypeDef Ack);
- void I2C_FastModeDutyCycleConfig(I2C_DutyCycle_TypeDef I2C_DutyCycle);
- void I2C_ITConfig(I2C_IT_TypeDef I2C_IT, FunctionalState NewState);
- uint8_t I2C_ReceiveData(void);
- void I2C_Send7bitAddress(uint8_t Address, I2C_Direction_TypeDef Direction);
- void I2C_SendData(uint8_t Data);
- ErrorStatus I2C_CheckEvent(I2C_Event_TypeDef I2C_Event);
- I2C_Event_TypeDef I2C_GetLastEvent(void);
- FlagStatus I2C_GetFlagStatus(I2C_Flag_TypeDef I2C_Flag);
- void I2C_ClearFlag(I2C_Flag_TypeDef I2C_FLAG);
- ITStatus I2C_GetITStatus(I2C_ITPendingBit_TypeDef I2C_ITPendingBit);
- void I2C_ClearITPendingBit(I2C_ITPendingBit_TypeDef I2C_ITPendingBit);
- #endif
|