G32R430 Device Driver Layer v1.0.4
G32R4xx Device Driver Layer API Reference
g32r4xx_ddl_i2c.h
Go to the documentation of this file.
1
42
43/* Define to prevent recursive inclusion -------------------------------------*/
44#ifndef G32R4xx_DDL_I2C_H
45#define G32R4xx_DDL_I2C_H
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51/* Includes ------------------------------------------------------------------*/
52#include "g32r4xx.h"
53
57
58#if defined (I2C1)
59
63
64/* Private types -------------------------------------------------------------*/
65/* Private variables ---------------------------------------------------------*/
66
67/* Private constants ---------------------------------------------------------*/
71
72/* Defines used to perform compute and check in the macros */
73#define DDL_I2C_MAX_SPEED_STANDARD 100000U
74#define DDL_I2C_MAX_SPEED_FAST 400000U
78
79/* Private macros ------------------------------------------------------------*/
80#if defined(USE_FULL_DDL_DRIVER)
87#endif /*USE_FULL_DDL_DRIVER*/
88
89/* Exported types ------------------------------------------------------------*/
90#if defined(USE_FULL_DDL_DRIVER)
94typedef struct
95{
96 uint32_t PeripheralMode;
100
101 uint32_t ClockSpeed;
106
107 uint32_t DutyCycle;
111
112#if defined(I2C_FILTER_ANFDIS) && defined(I2C_FILTER_DNFCFG)
113 uint32_t AnalogFilter;
117
118 uint32_t DigitalFilter;
122
123#endif /* I2C_FILTER_ANFDIS && I2C_FILTER_DNFCFG */
124 uint32_t OwnAddress1;
128
133
134 uint32_t OwnAddrSize;
139
142#endif /*USE_FULL_DDL_DRIVER*/
143
144/* Exported constants --------------------------------------------------------*/
148
153#define DDL_I2C_STS1_STARTFLG I2C_STS1_STARTFLG
154#define DDL_I2C_STS1_ADDRFLG I2C_STS1_ADDRFLG
156#define DDL_I2C_STS1_BTCFLG I2C_STS1_BTCFLG
157#define DDL_I2C_STS1_ADDR10FLG I2C_STS1_ADDR10FLG
158#define DDL_I2C_STS1_STOPFLG I2C_STS1_STOPFLG
159#define DDL_I2C_STS1_RXBNEFLG I2C_STS1_RXBNEFLG
160#define DDL_I2C_STS1_TXBEFLG I2C_STS1_TXBEFLG
161#define DDL_I2C_STS1_BERRFLG I2C_STS1_BERRFLG
162#define DDL_I2C_STS1_ALFLG I2C_STS1_ALFLG
163#define DDL_I2C_STS1_AEFLG I2C_STS1_AEFLG
164#define DDL_I2C_STS1_OVRURFLG I2C_STS1_OVRURFLG
165#define DDL_I2C_STS1_PECEFLG I2C_ISR_PECERR
166#define DDL_I2C_STS1_TTEFLG I2C_ISR_TIMEOUT
167#define DDL_I2C_STS1_SMALERT I2C_ISR_SMALERT
168#define DDL_I2C_STS2_MSFLG I2C_STS2_MSFLG
169#define DDL_I2C_STS2_BUSBSYFLG I2C_STS2_BUSBSYFLG
170#define DDL_I2C_STS2_TRFLG I2C_STS2_TRFLG
171#define DDL_I2C_STS2_GENCALLFLG I2C_STS2_GENCALLFLG
172#define DDL_I2C_STS2_SMBDADDRFLG I2C_STS2_SMBDADDRFLG
173#define DDL_I2C_STS2_SMMHADDR I2C_STS2_SMMHADDR
174#define DDL_I2C_STS2_DUALADDRFLG I2C_STS2_DUALADDRFLG
178
185
186/* Master mode events */
187#define DDL_I2C_EVENT_MASTER_MODE_SELECT 0x00030001u /* BUSBSYFLG, MSFLG and STARTFLG flag */
188#define DDL_I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED 0x00070082u /* BUSBSYFLG, MSFLG, ADDRFLG, TXBEFLG and TRFLG flags */
189#define DDL_I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED 0x00030002u /* BUSBSYFLG, MSFLG and ADDRFLG flags */
190#define DDL_I2C_EVENT_MASTER_MODE_ADDRESS10 0x00030008u /* BUSBSYFLG, MSFLG and ADDR10FLG flags */
191#define DDL_I2C_EVENT_MASTER_BYTE_RECEIVED 0x00030040u /* BUSBSYFLG, MSFLG and RXBNEFLG flags */
192#define DDL_I2C_EVENT_MASTER_BYTE_TRANSMITTING 0x00070080u /* TRFLG, BUSBSYFLG, MSFLG, TXBEFLG flags */
193#define DDL_I2C_EVENT_MASTER_BYTE_TRANSMITTED 0x00070084u /* TRFLG, BUSBSYFLG, MSFLG, TXBEFLG and BTCFLG flags */
194
195/* Slave address matched events */
196#define DDL_I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED 0x00020002u /* BUSBSYFLG and ADDRFLG flags */
197#define DDL_I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED 0x00060082u /* TRFLG, BUSBSYFLG, TXBEFLG and ADDRFLG flags */
198#define DDL_I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED 0x00820000u /* DUALF and BUSBSYFLG flags */
199#define DDL_I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED 0x00860080u /* DUALF, TRFLG, BUSBSYFLG and TXBEFLG flags */
200#define DDL_I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED 0x00120000u /* GENCALL and BUSBSYFLG flags */
201
202/* Slave receiver mode */
203#define DDL_I2C_EVENT_SLAVE_BYTE_RECEIVED 0x00020040u /* BUSBSYFLG and RXBNEFLG flags */
204#define DDL_I2C_EVENT_SLAVE_BYTE_RECEIVED1 0x00820040u /* DUALADDRFLG, BUSBSYFLG and RXBNEFLG flags */
205#define DDL_I2C_EVENT_SLAVE_BYTE_RECEIVED2 0x00120040u /* GENCALLFLG, BUSBSYFLG and RXBNEFLG flags */
206#define DDL_I2C_EVENT_SLAVE_STOP_DETECTED 0x00000010u /* STOPFLG flag */
207
208/* Slave transmitter mode */
209#define DDL_I2C_EVENT_SLAVE_BYTE_TRANSMITTED 0x00060084u /* TRFLG, BUSBSYFLG, TXBEFLG and BTCFLG flags */
210#define DDL_I2C_EVENT_SLAVE_BYTE_TRANSMITTED1 0x00860084u /* DUALADDRFLG, TRFLG, BUSBSYFLG, TXBEFLG and BTCFLG flags */
211#define DDL_I2C_EVENT_SLAVE_BYTE_TRANSMITTED2 0x00160084u /* GENCALLFLG, TRFLG, BUSBSYFLG, TXBEFLG and BTCFLG flags */
212#define DDL_I2C_EVENT_SLAVE_BYTE_TRANSMITTING 0x00060080u /* TRFLG, BUSBSYFLG and TXBEFLG flags */
213#define DDL_I2C_EVENT_SLAVE_ACK_FAILURE 0x00000400u /* AEFLG flag */
214
218
223#define DDL_I2C_CTRL2_EVIEN I2C_CTRL2_EVIEN
224#define DDL_I2C_CTRL2_BUFIEN I2C_CTRL2_BUFIEN
225#define DDL_I2C_CTRL2_ERRIEN I2C_CTRL2_ERRIEN
229
230#if defined(I2C_FILTER_ANFDIS)
234#define DDL_I2C_ANALOGFILTER_ENABLE 0x00000000U
235#define DDL_I2C_ANALOGFILTER_DISABLE I2C_FILTER_ANFDIS
239
240#endif
244#define DDL_I2C_OWNADDRESS1_7BIT 0x00004000U
245#define DDL_I2C_OWNADDRESS1_10BIT (uint32_t)(I2C_SADDR1_ADDRLEN | 0x00004000U)
249
253#define DDL_I2C_DUTYCYCLE_2 0x00000000U
254#define DDL_I2C_DUTYCYCLE_16_9 I2C_CLKCTRL_FDUTYCFG
258
262#define DDL_I2C_CLOCK_SPEED_STANDARD_MODE 0x00000000U
263#define DDL_I2C_CLOCK_SPEED_FAST_MODE I2C_CLKCTRL_SPEEDCFG
267
271#define DDL_I2C_MODE_I2C 0x00000000U
272#define DDL_I2C_MODE_SMBUS_HOST (uint32_t)(I2C_CTRL1_SMBEN | I2C_CTRL1_SMBTCFG | I2C_CTRL1_ARPEN)
273#define DDL_I2C_MODE_SMBUS_DEVICE I2C_CTRL1_SMBEN
274#define DDL_I2C_MODE_SMBUS_DEVICE_ARP (uint32_t)(I2C_CTRL1_SMBEN | I2C_CTRL1_ARPEN)
278
282#define DDL_I2C_ACK I2C_CTRL1_ACKEN
283#define DDL_I2C_NACK 0x00000000U
287
291#define DDL_I2C_DIRECTION_WRITE I2C_STS2_TRFLG
292#define DDL_I2C_DIRECTION_READ 0x00000000U
296
300
301/* Exported macro ------------------------------------------------------------*/
305
309
317#define DDL_I2C_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
318
325#define DDL_I2C_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
329
333
339#define __DDL_I2C_FREQ_HZ_TO_MHZ(__PCLK__) (uint32_t)((__PCLK__)/1000000U)
340
346#define __DDL_I2C_FREQ_MHZ_TO_HZ(__PCLK__) (uint32_t)((__PCLK__)*1000000U)
347
354#define __DDL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (uint32_t)(((__SPEED__) <= DDL_I2C_MAX_SPEED_STANDARD) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U))
355
365#define __DDL_I2C_SPEED_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__) (uint32_t)(((__SPEED__) <= DDL_I2C_MAX_SPEED_STANDARD)? \
366 (__DDL_I2C_SPEED_STANDARD_TO_CCR((__PCLK__), (__SPEED__))) : \
367 (__DDL_I2C_SPEED_FAST_TO_CCR((__PCLK__), (__SPEED__), (__DUTYCYCLE__))))
368
375#define __DDL_I2C_SPEED_STANDARD_TO_CCR(__PCLK__, __SPEED__) (uint32_t)(((((__PCLK__)/((__SPEED__) << 1U)) & I2C_CLKCTRL_CLKS) < 4U)? 4U:((__PCLK__) / ((__SPEED__) << 1U)))
376
386#define __DDL_I2C_SPEED_FAST_TO_CCR(__PCLK__, __SPEED__, __DUTYCYCLE__) (uint32_t)(((__DUTYCYCLE__) == DDL_I2C_DUTYCYCLE_2)? \
387 (((((__PCLK__) / ((__SPEED__) * 3U)) & I2C_CLKCTRL_CLKS) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 3U))) : \
388 (((((__PCLK__) / ((__SPEED__) * 25U)) & I2C_CLKCTRL_CLKS) == 0U)? 1U:((__PCLK__) / ((__SPEED__) * 25U))))
389
395#define __DDL_I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF))))
396
402#define __DDL_I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0))))
403
409#define __DDL_I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1))))
410
414
415/* Exported functions --------------------------------------------------------*/
416
420
424
430__STATIC_INLINE void DDL_I2C_Enable(I2C_TypeDef *I2Cx)
431{
432 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_I2CEN);
433}
434
440__STATIC_INLINE void DDL_I2C_Disable(I2C_TypeDef *I2Cx)
441{
442 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_I2CEN);
443}
444
450__STATIC_INLINE uint32_t DDL_I2C_IsEnabled(I2C_TypeDef *I2Cx)
451{
452 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_I2CEN) == (I2C_CTRL1_I2CEN));
453}
454
455#if defined(I2C_FILTER_ANFDIS) && defined(I2C_FILTER_DNFCFG)
468__STATIC_INLINE void DDL_I2C_ConfigFilters(I2C_TypeDef *I2Cx, uint32_t AnalogFilter, uint32_t DigitalFilter)
469{
470 MODIFY_REG(I2Cx->FILTER, I2C_FILTER_ANFDIS | I2C_FILTER_DNFCFG, AnalogFilter | DigitalFilter);
471}
472#endif /* I2C_FILTER_ANFDIS && I2C_FILTER_DNFCFG */
473
474#if defined(I2C_FILTER_DNFCFG)
484__STATIC_INLINE void DDL_I2C_SetDigitalFilter(I2C_TypeDef *I2Cx, uint32_t DigitalFilter)
485{
486 MODIFY_REG(I2Cx->FILTER, I2C_FILTER_DNFCFG, DigitalFilter);
487}
488
494__STATIC_INLINE uint32_t DDL_I2C_GetDigitalFilter(I2C_TypeDef *I2Cx)
495{
496 return (uint32_t)(READ_BIT(I2Cx->FILTER, I2C_FILTER_DNFCFG));
497}
498#endif /* I2C_FILTER_DNFCFG */
499
500#if defined(I2C_FILTER_ANFDIS)
507__STATIC_INLINE void DDL_I2C_EnableAnalogFilter(I2C_TypeDef *I2Cx)
508{
509 CLEAR_BIT(I2Cx->FILTER, I2C_FILTER_ANFDIS);
510}
511
518__STATIC_INLINE void DDL_I2C_DisableAnalogFilter(I2C_TypeDef *I2Cx)
519{
520 SET_BIT(I2Cx->FILTER, I2C_FILTER_ANFDIS);
521}
522
528__STATIC_INLINE uint32_t DDL_I2C_IsEnabledAnalogFilter(I2C_TypeDef *I2Cx)
529{
530 return (READ_BIT(I2Cx->FILTER, I2C_FILTER_ANFDIS) == (I2C_FILTER_ANFDIS));
531}
532#endif /* I2C_FILTER_ANFDIS */
533
540__STATIC_INLINE void DDL_I2C_EnableClockStretching(I2C_TypeDef *I2Cx)
541{
542 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_CLKSTRETCHD);
543}
544
551__STATIC_INLINE void DDL_I2C_DisableClockStretching(I2C_TypeDef *I2Cx)
552{
553 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_CLKSTRETCHD);
554}
555
561__STATIC_INLINE uint32_t DDL_I2C_IsEnabledClockStretching(I2C_TypeDef *I2Cx)
562{
563 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_CLKSTRETCHD) != (I2C_CTRL1_CLKSTRETCHD));
564}
565
572__STATIC_INLINE void DDL_I2C_EnableGeneralCall(I2C_TypeDef *I2Cx)
573{
574 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_SRBEN);
575}
576
583__STATIC_INLINE void DDL_I2C_DisableGeneralCall(I2C_TypeDef *I2Cx)
584{
585 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_SRBEN);
586}
587
593__STATIC_INLINE uint32_t DDL_I2C_IsEnabledGeneralCall(I2C_TypeDef *I2Cx)
594{
595 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_SRBEN) == (I2C_CTRL1_SRBEN));
596}
597
607__STATIC_INLINE void DDL_I2C_SetOwnAddress1(I2C_TypeDef *I2Cx, uint32_t OwnAddress1, uint32_t OwnAddrSize)
608{
609 MODIFY_REG(I2Cx->SADDR1, I2C_SADDR1_ADDR0 | I2C_SADDR1_ADDR1_7 | I2C_SADDR1_ADDR8_9 | I2C_SADDR1_ADDRLEN, OwnAddress1 | OwnAddrSize);
610}
611
619__STATIC_INLINE void DDL_I2C_SetOwnAddress2(I2C_TypeDef *I2Cx, uint32_t OwnAddress2)
620{
621 MODIFY_REG(I2Cx->SADDR2, I2C_SADDR2_ADDR2, OwnAddress2);
622}
623
629__STATIC_INLINE void DDL_I2C_EnableOwnAddress2(I2C_TypeDef *I2Cx)
630{
631 SET_BIT(I2Cx->SADDR2, I2C_SADDR2_ADDRNUM);
632}
633
639__STATIC_INLINE void DDL_I2C_DisableOwnAddress2(I2C_TypeDef *I2Cx)
640{
641 CLEAR_BIT(I2Cx->SADDR2, I2C_SADDR2_ADDRNUM);
642}
643
649__STATIC_INLINE uint32_t DDL_I2C_IsEnabledOwnAddress2(I2C_TypeDef *I2Cx)
650{
651 return (READ_BIT(I2Cx->SADDR2, I2C_SADDR2_ADDRNUM) == (I2C_SADDR2_ADDRNUM));
652}
653
660__STATIC_INLINE void DDL_I2C_SetPeriphClock(I2C_TypeDef *I2Cx, uint32_t PeriphClock)
661{
662 MODIFY_REG(I2Cx->CTRL2, I2C_CTRL2_CLKFCFG, __DDL_I2C_FREQ_HZ_TO_MHZ(PeriphClock));
663}
664
670__STATIC_INLINE uint32_t DDL_I2C_GetPeriphClock(I2C_TypeDef *I2Cx)
671{
672 return (uint32_t)(__DDL_I2C_FREQ_MHZ_TO_HZ(READ_BIT(I2Cx->CTRL2, I2C_CTRL2_CLKFCFG)));
673}
674
683__STATIC_INLINE void DDL_I2C_SetDutyCycle(I2C_TypeDef *I2Cx, uint32_t DutyCycle)
684{
685 MODIFY_REG(I2Cx->CLKCTRL, I2C_CLKCTRL_FDUTYCFG, DutyCycle);
686}
687
695__STATIC_INLINE uint32_t DDL_I2C_GetDutyCycle(I2C_TypeDef *I2Cx)
696{
697 return (uint32_t)(READ_BIT(I2Cx->CLKCTRL, I2C_CLKCTRL_FDUTYCFG));
698}
699
708__STATIC_INLINE void DDL_I2C_SetClockSpeedMode(I2C_TypeDef *I2Cx, uint32_t ClockSpeedMode)
709{
710 MODIFY_REG(I2Cx->CLKCTRL, I2C_CLKCTRL_SPEEDCFG, ClockSpeedMode);
711}
712
720__STATIC_INLINE uint32_t DDL_I2C_GetClockSpeedMode(I2C_TypeDef *I2Cx)
721{
722 return (uint32_t)(READ_BIT(I2Cx->CLKCTRL, I2C_CLKCTRL_SPEEDCFG));
723}
724
732__STATIC_INLINE void DDL_I2C_SetRiseTime(I2C_TypeDef *I2Cx, uint32_t RiseTime)
733{
734 MODIFY_REG(I2Cx->RISETMAX, I2C_RISETMAX_RISETMAX, RiseTime);
735}
736
742__STATIC_INLINE uint32_t DDL_I2C_GetRiseTime(I2C_TypeDef *I2Cx)
743{
744 return (uint32_t)(READ_BIT(I2Cx->RISETMAX, I2C_RISETMAX_RISETMAX));
745}
746
754__STATIC_INLINE void DDL_I2C_SetClockPeriod(I2C_TypeDef *I2Cx, uint32_t ClockPeriod)
755{
756 MODIFY_REG(I2Cx->CLKCTRL, I2C_CLKCTRL_CLKS, ClockPeriod);
757}
758
764__STATIC_INLINE uint32_t DDL_I2C_GetClockPeriod(I2C_TypeDef *I2Cx)
765{
766 return (uint32_t)(READ_BIT(I2Cx->CLKCTRL, I2C_CLKCTRL_CLKS));
767}
768
780__STATIC_INLINE void DDL_I2C_ConfigSpeed(I2C_TypeDef *I2Cx, uint32_t PeriphClock, uint32_t ClockSpeed,
781 uint32_t DutyCycle)
782{
783 uint32_t freqrange = 0x0U;
784 uint32_t clockconfig = 0x0U;
785
786 /* Compute frequency range */
787 freqrange = __DDL_I2C_FREQ_HZ_TO_MHZ(PeriphClock);
788
789 /* Configure I2Cx: Frequency range register */
790 MODIFY_REG(I2Cx->CTRL2, I2C_CTRL2_CLKFCFG, freqrange);
791
792 /* Configure I2Cx: Rise Time register */
793 MODIFY_REG(I2Cx->RISETMAX, I2C_RISETMAX_RISETMAX, __DDL_I2C_RISE_TIME(freqrange, ClockSpeed));
794
795 /* Configure Speed mode, Duty Cycle and Clock control register value */
796 if (ClockSpeed > DDL_I2C_MAX_SPEED_STANDARD)
797 {
798 /* Set Speed mode at fast and duty cycle for Clock Speed request in fast clock range */
799 clockconfig = DDL_I2C_CLOCK_SPEED_FAST_MODE | \
800 __DDL_I2C_SPEED_FAST_TO_CCR(PeriphClock, ClockSpeed, DutyCycle) | \
801 DutyCycle;
802 }
803 else
804 {
805 /* Set Speed mode at standard for Clock Speed request in standard clock range */
806 clockconfig = DDL_I2C_CLOCK_SPEED_STANDARD_MODE | \
807 __DDL_I2C_SPEED_STANDARD_TO_CCR(PeriphClock, ClockSpeed);
808 }
809
810 /* Configure I2Cx: Clock control register */
811 MODIFY_REG(I2Cx->CLKCTRL, (I2C_CLKCTRL_SPEEDCFG | I2C_CLKCTRL_FDUTYCFG | I2C_CLKCTRL_CLKS), clockconfig);
812}
813
826__STATIC_INLINE void DDL_I2C_SetMode(I2C_TypeDef *I2Cx, uint32_t PeripheralMode)
827{
828 MODIFY_REG(I2Cx->CTRL1, I2C_CTRL1_SMBEN | I2C_CTRL1_SMBTCFG | I2C_CTRL1_ARPEN, PeripheralMode);
829}
830
842__STATIC_INLINE uint32_t DDL_I2C_GetMode(I2C_TypeDef *I2Cx)
843{
844 return (uint32_t)(READ_BIT(I2Cx->CTRL1, I2C_CTRL1_SMBEN | I2C_CTRL1_SMBTCFG | I2C_CTRL1_ARPEN));
845}
846
859__STATIC_INLINE void DDL_I2C_EnableSMBusAlert(I2C_TypeDef *I2Cx)
860{
861 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_ALERTEN);
862}
863
876__STATIC_INLINE void DDL_I2C_DisableSMBusAlert(I2C_TypeDef *I2Cx)
877{
878 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_ALERTEN);
879}
880
888__STATIC_INLINE uint32_t DDL_I2C_IsEnabledSMBusAlert(I2C_TypeDef *I2Cx)
889{
890 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_ALERTEN) == (I2C_CTRL1_ALERTEN));
891}
892
900__STATIC_INLINE void DDL_I2C_EnableSMBusPEC(I2C_TypeDef *I2Cx)
901{
902 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_PECEN);
903}
904
912__STATIC_INLINE void DDL_I2C_DisableSMBusPEC(I2C_TypeDef *I2Cx)
913{
914 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_PECEN);
915}
916
924__STATIC_INLINE uint32_t DDL_I2C_IsEnabledSMBusPEC(I2C_TypeDef *I2Cx)
925{
926 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_PECEN) == (I2C_CTRL1_PECEN));
927}
928
932
936
942__STATIC_INLINE void DDL_I2C_EnableDMAReq_TX(I2C_TypeDef *I2Cx)
943{
944 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_DMAEN);
945}
946
952__STATIC_INLINE void DDL_I2C_DisableDMAReq_TX(I2C_TypeDef *I2Cx)
953{
954 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_DMAEN);
955}
956
962__STATIC_INLINE uint32_t DDL_I2C_IsEnabledDMAReq_TX(I2C_TypeDef *I2Cx)
963{
964 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_DMAEN) == (I2C_CTRL2_DMAEN));
965}
966
972__STATIC_INLINE void DDL_I2C_EnableDMAReq_RX(I2C_TypeDef *I2Cx)
973{
974 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_DMAEN);
975}
976
982__STATIC_INLINE void DDL_I2C_DisableDMAReq_RX(I2C_TypeDef *I2Cx)
983{
984 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_DMAEN);
985}
986
992__STATIC_INLINE uint32_t DDL_I2C_IsEnabledDMAReq_RX(I2C_TypeDef *I2Cx)
993{
994 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_DMAEN) == (I2C_CTRL2_DMAEN));
995}
996
1002__STATIC_INLINE uint32_t DDL_I2C_DMA_GetRegAddr(I2C_TypeDef *I2Cx)
1003{
1004 return (uint32_t) & (I2Cx->DATA);
1005}
1006
1010
1014
1020__STATIC_INLINE void DDL_I2C_EnableIT_TX(I2C_TypeDef *I2Cx)
1021{
1022 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN);
1023}
1024
1030__STATIC_INLINE void DDL_I2C_DisableIT_TX(I2C_TypeDef *I2Cx)
1031{
1032 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN);
1033}
1034
1040__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_TX(I2C_TypeDef *I2Cx)
1041{
1042 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN) == (I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN));
1043}
1044
1050__STATIC_INLINE void DDL_I2C_EnableIT_RX(I2C_TypeDef *I2Cx)
1051{
1052 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN);
1053}
1054
1060__STATIC_INLINE void DDL_I2C_DisableIT_RX(I2C_TypeDef *I2Cx)
1061{
1062 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN);
1063}
1064
1070__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_RX(I2C_TypeDef *I2Cx)
1071{
1072 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN) == (I2C_CTRL2_EVIEN | I2C_CTRL2_BUFIEN));
1073}
1074
1090__STATIC_INLINE void DDL_I2C_EnableIT_EVT(I2C_TypeDef *I2Cx)
1091{
1092 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN);
1093}
1094
1108__STATIC_INLINE void DDL_I2C_DisableIT_EVT(I2C_TypeDef *I2Cx)
1109{
1110 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN);
1111}
1112
1118__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_EVT(I2C_TypeDef *I2Cx)
1119{
1120 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_EVIEN) == (I2C_CTRL2_EVIEN));
1121}
1122
1131__STATIC_INLINE void DDL_I2C_EnableIT_BUF(I2C_TypeDef *I2Cx)
1132{
1133 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_BUFIEN);
1134}
1135
1144__STATIC_INLINE void DDL_I2C_DisableIT_BUF(I2C_TypeDef *I2Cx)
1145{
1146 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_BUFIEN);
1147}
1148
1154__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_BUF(I2C_TypeDef *I2Cx)
1155{
1156 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_BUFIEN) == (I2C_CTRL2_BUFIEN));
1157}
1158
1174__STATIC_INLINE void DDL_I2C_EnableIT_ERR(I2C_TypeDef *I2Cx)
1175{
1176 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_ERRIEN);
1177}
1178
1194__STATIC_INLINE void DDL_I2C_DisableIT_ERR(I2C_TypeDef *I2Cx)
1195{
1196 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_ERRIEN);
1197}
1198
1204__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_ERR(I2C_TypeDef *I2Cx)
1205{
1206 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_ERRIEN) == (I2C_CTRL2_ERRIEN));
1207}
1208
1212
1216
1225__STATIC_INLINE uint32_t DDL_I2C_ReadEventStatus(I2C_TypeDef *I2Cx, uint32_t i2cEvent)
1226{
1227 /* Read STS1 and STS2. STS1 lower 16 bits, STS2 lower 16 bits shifted left 16 */
1228 uint32_t flag1 = READ_BIT(I2Cx->STS1, 0x0000FFFFUL); /* Read all STS1 bits */
1229 uint32_t flag2 = READ_BIT(I2Cx->STS2, 0x0000FFFFUL); /* Read all STS2 bits */
1230
1231 /* Shift STS2 read result left by 16 to match the same position as i2cEvent */
1232 flag2 <<= 16;
1233
1234 /* Combine STS1 and STS2 as a 24-bit event status */
1235 uint32_t lastevent = (flag1 | flag2) & 0x00FFFFFFUL;
1236
1237 /* Check if all bits in i2cEvent are set */
1238 if ((lastevent & i2cEvent) == i2cEvent)
1239 {
1240 return 1UL;
1241 }
1242
1243 return 0UL;
1244}
1245
1253__STATIC_INLINE uint32_t I2C_ReadLastEvent(I2C_TypeDef *I2Cx)
1254{
1255 /* Read STS1 and STS2. STS1 lower 16 bits, STS2 lower 16 bits shifted left 16 */
1256 uint32_t flag1 = READ_BIT(I2Cx->STS1, 0x0000FFFFUL); /* Read all STS1 bits */
1257 uint32_t flag2 = READ_BIT(I2Cx->STS2, 0x0000FFFFUL); /* Read all STS2 bits */
1258
1259 /* Shift STS2 read result left by 16 to match the same position as events define */
1260 flag2 <<= 16;
1261
1262 /* Combine STS1 and STS2 as a 24-bit event status */
1263 uint32_t lastevent = (flag1 | flag2) & 0x00FFFFFFUL;
1264
1265 return lastevent;
1266}
1267
1271
1275
1283__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_START(I2C_TypeDef *I2Cx)
1284{
1285 return (READ_BIT(I2Cx->STS1, I2C_STS1_STARTFLG) == (I2C_STS1_STARTFLG));
1286}
1287
1295__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_ADDR(I2C_TypeDef *I2Cx)
1296{
1297 return (READ_BIT(I2Cx->STS1, I2C_STS1_ADDRFLG) == (I2C_STS1_ADDRFLG));
1298}
1299
1307__STATIC_INLINE void DDL_I2C_ClearFlag_ADDR(I2C_TypeDef *I2Cx)
1308{
1309 __IO uint32_t tmpreg;
1310 tmpreg = I2Cx->STS1;
1311 (void) tmpreg;
1312 tmpreg = I2Cx->STS2;
1313 (void) tmpreg;
1314}
1315
1323__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_BTF(I2C_TypeDef *I2Cx)
1324{
1325 return (READ_BIT(I2Cx->STS1, I2C_STS1_BTCFLG) == (I2C_STS1_BTCFLG));
1326}
1327
1335__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_ADD10(I2C_TypeDef *I2Cx)
1336{
1337 return (READ_BIT(I2Cx->STS1, I2C_STS1_ADDR10FLG) == (I2C_STS1_ADDR10FLG));
1338}
1339
1347__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_STOP(I2C_TypeDef *I2Cx)
1348{
1349 return (READ_BIT(I2Cx->STS1, I2C_STS1_STOPFLG) == (I2C_STS1_STOPFLG));
1350}
1351
1359__STATIC_INLINE void DDL_I2C_ClearFlag_STOP(I2C_TypeDef *I2Cx)
1360{
1361 __IO uint32_t tmpreg;
1362 tmpreg = I2Cx->STS1;
1363 (void) tmpreg;
1364 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_I2CEN);
1365}
1366
1374__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_RXNE(I2C_TypeDef *I2Cx)
1375{
1376 return (READ_BIT(I2Cx->STS1, I2C_STS1_RXBNEFLG) == (I2C_STS1_RXBNEFLG));
1377}
1378
1386__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_TXE(I2C_TypeDef *I2Cx)
1387{
1388 return (READ_BIT(I2Cx->STS1, I2C_STS1_TXBEFLG) == (I2C_STS1_TXBEFLG));
1389}
1390
1398__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_BERR(I2C_TypeDef *I2Cx)
1399{
1400 return (READ_BIT(I2Cx->STS1, I2C_STS1_BERRFLG) == (I2C_STS1_BERRFLG));
1401}
1402
1408__STATIC_INLINE void DDL_I2C_ClearFlag_BERR(I2C_TypeDef *I2Cx)
1409{
1410 CLEAR_BIT(I2Cx->STS1, I2C_STS1_BERRFLG);
1411}
1412
1420__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_ARLO(I2C_TypeDef *I2Cx)
1421{
1422 return (READ_BIT(I2Cx->STS1, I2C_STS1_ALFLG) == (I2C_STS1_ALFLG));
1423}
1424
1430__STATIC_INLINE void DDL_I2C_ClearFlag_ARLO(I2C_TypeDef *I2Cx)
1431{
1432 CLEAR_BIT(I2Cx->STS1, I2C_STS1_ALFLG);
1433}
1434
1442__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_AF(I2C_TypeDef *I2Cx)
1443{
1444 return (READ_BIT(I2Cx->STS1, I2C_STS1_AEFLG) == (I2C_STS1_AEFLG));
1445}
1446
1452__STATIC_INLINE void DDL_I2C_ClearFlag_AF(I2C_TypeDef *I2Cx)
1453{
1454 CLEAR_BIT(I2Cx->STS1, I2C_STS1_AEFLG);
1455}
1456
1464__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_OVR(I2C_TypeDef *I2Cx)
1465{
1466 return (READ_BIT(I2Cx->STS1, I2C_STS1_OVRURFLG) == (I2C_STS1_OVRURFLG));
1467}
1468
1474__STATIC_INLINE void DDL_I2C_ClearFlag_OVR(I2C_TypeDef *I2Cx)
1475{
1476 CLEAR_BIT(I2Cx->STS1, I2C_STS1_OVRURFLG);
1477}
1478
1486__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
1487{
1488 return (READ_BIT(I2Cx->STS1, I2C_STS1_PECEFLG) == (I2C_STS1_PECEFLG));
1489}
1490
1496__STATIC_INLINE void DDL_I2C_ClearSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
1497{
1498 CLEAR_BIT(I2Cx->STS1, I2C_STS1_PECEFLG);
1499}
1500
1508__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
1509{
1510 return (READ_BIT(I2Cx->STS1, I2C_STS1_TTEFLG) == (I2C_STS1_TTEFLG));
1511}
1512
1520__STATIC_INLINE void DDL_I2C_ClearSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
1521{
1522 CLEAR_BIT(I2Cx->STS1, I2C_STS1_TTEFLG);
1523}
1524
1532__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
1533{
1534 return (READ_BIT(I2Cx->STS1, I2C_STS1_SMBALTFLG) == (I2C_STS1_SMBALTFLG));
1535}
1536
1544__STATIC_INLINE void DDL_I2C_ClearSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
1545{
1546 CLEAR_BIT(I2Cx->STS1, I2C_STS1_SMBALTFLG);
1547}
1548
1556__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_MSL(I2C_TypeDef *I2Cx)
1557{
1558 return (READ_BIT(I2Cx->STS2, I2C_STS2_MSFLG) == (I2C_STS2_MSFLG));
1559}
1560
1568__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_BUSY(I2C_TypeDef *I2Cx)
1569{
1570 return (READ_BIT(I2Cx->STS2, I2C_STS2_BUSBSYFLG) == (I2C_STS2_BUSBSYFLG));
1571}
1572
1581__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_GENCALL(I2C_TypeDef *I2Cx)
1582{
1583 return (READ_BIT(I2Cx->STS2, I2C_STS2_GENCALLFLG) == (I2C_STS2_GENCALLFLG));
1584}
1585
1596__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_SMBDEFAULT(I2C_TypeDef *I2Cx)
1597{
1598 return (READ_BIT(I2Cx->STS2, I2C_STS2_SMBDADDRFLG) == (I2C_STS2_SMBDADDRFLG));
1599}
1600
1611__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_SMBHOST(I2C_TypeDef *I2Cx)
1612{
1613 return (READ_BIT(I2Cx->STS2, I2C_STS2_SMMHADDR) == (I2C_STS2_SMMHADDR));
1614}
1615
1623__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_DUAL(I2C_TypeDef *I2Cx)
1624{
1625 return (READ_BIT(I2Cx->STS2, I2C_STS2_DUALADDRFLG) == (I2C_STS2_DUALADDRFLG));
1626}
1627
1631
1635
1641__STATIC_INLINE void DDL_I2C_EnableReset(I2C_TypeDef *I2Cx)
1642{
1643 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_SWRST);
1644}
1645
1651__STATIC_INLINE void DDL_I2C_DisableReset(I2C_TypeDef *I2Cx)
1652{
1653 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_SWRST);
1654}
1655
1661__STATIC_INLINE uint32_t DDL_I2C_IsResetEnabled(I2C_TypeDef *I2Cx)
1662{
1663 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_SWRST) == (I2C_CTRL1_SWRST));
1664}
1665
1675__STATIC_INLINE void DDL_I2C_AcknowledgeNextData(I2C_TypeDef *I2Cx, uint32_t TypeAcknowledge)
1676{
1677 MODIFY_REG(I2Cx->CTRL1, I2C_CTRL1_ACKEN, TypeAcknowledge);
1678}
1679
1687__STATIC_INLINE void DDL_I2C_GenerateStartCondition(I2C_TypeDef *I2Cx)
1688{
1689 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_START);
1690}
1691
1697__STATIC_INLINE void DDL_I2C_GenerateStopCondition(I2C_TypeDef *I2Cx)
1698{
1699 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_STOP);
1700}
1701
1708__STATIC_INLINE void DDL_I2C_EnableBitPOS(I2C_TypeDef *I2Cx)
1709{
1710 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_ACKPOS);
1711}
1712
1719__STATIC_INLINE void DDL_I2C_DisableBitPOS(I2C_TypeDef *I2Cx)
1720{
1721 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_ACKPOS);
1722}
1723
1729__STATIC_INLINE uint32_t DDL_I2C_IsEnabledBitPOS(I2C_TypeDef *I2Cx)
1730{
1731 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_ACKPOS) == (I2C_CTRL1_ACKPOS));
1732}
1733
1743__STATIC_INLINE uint32_t DDL_I2C_GetTransferDirection(I2C_TypeDef *I2Cx)
1744{
1745 return (uint32_t)(READ_BIT(I2Cx->STS2, I2C_STS2_TRFLG));
1746}
1747
1754__STATIC_INLINE void DDL_I2C_EnableLastDMA(I2C_TypeDef *I2Cx)
1755{
1756 SET_BIT(I2Cx->CTRL2, I2C_CTRL2_LTCFG);
1757}
1758
1765__STATIC_INLINE void DDL_I2C_DisableLastDMA(I2C_TypeDef *I2Cx)
1766{
1767 CLEAR_BIT(I2Cx->CTRL2, I2C_CTRL2_LTCFG);
1768}
1769
1775__STATIC_INLINE uint32_t DDL_I2C_IsEnabledLastDMA(I2C_TypeDef *I2Cx)
1776{
1777 return (READ_BIT(I2Cx->CTRL2, I2C_CTRL2_LTCFG) == (I2C_CTRL2_LTCFG));
1778}
1779
1789__STATIC_INLINE void DDL_I2C_EnableSMBusPECCompare(I2C_TypeDef *I2Cx)
1790{
1791 SET_BIT(I2Cx->CTRL1, I2C_CTRL1_PEC);
1792}
1793
1801__STATIC_INLINE void DDL_I2C_DisableSMBusPECCompare(I2C_TypeDef *I2Cx)
1802{
1803 CLEAR_BIT(I2Cx->CTRL1, I2C_CTRL1_PEC);
1804}
1805
1813__STATIC_INLINE uint32_t DDL_I2C_IsEnabledSMBusPECCompare(I2C_TypeDef *I2Cx)
1814{
1815 return (READ_BIT(I2Cx->CTRL1, I2C_CTRL1_PEC) == (I2C_CTRL1_PEC));
1816}
1817
1825__STATIC_INLINE uint32_t DDL_I2C_GetSMBusPEC(I2C_TypeDef *I2Cx)
1826{
1827 return (uint32_t)(READ_BIT(I2Cx->STS2, I2C_STS2_PECVALUE) >> I2C_STS2_PECVALUE_Pos);
1828}
1829
1835__STATIC_INLINE uint8_t DDL_I2C_ReceiveData8(I2C_TypeDef *I2Cx)
1836{
1837 return (uint8_t)(READ_BIT(I2Cx->DATA, I2C_DATA_DATA));
1838}
1839
1846__STATIC_INLINE void DDL_I2C_TransmitData8(I2C_TypeDef *I2Cx, uint8_t Data)
1847{
1848 MODIFY_REG(I2Cx->DATA, I2C_DATA_DATA, Data);
1849}
1850
1854
1855#if defined(USE_FULL_DDL_DRIVER)
1859
1860uint32_t DDL_I2C_Init(I2C_TypeDef *I2Cx, DDL_I2C_InitTypeDef *I2C_InitStruct);
1861uint32_t DDL_I2C_DeInit(I2C_TypeDef *I2Cx);
1862void DDL_I2C_StructInit(DDL_I2C_InitTypeDef *I2C_InitStruct);
1863
1867#endif /* USE_FULL_DDL_DRIVER */
1868
1872
1876
1880
1881#endif /* I2C1 */
1882
1886
1887#ifdef __cplusplus
1888}
1889#endif
1890
1891#endif /* G32R4xx_DDL_I2C_H */
1892
#define DDL_I2C_CLOCK_SPEED_STANDARD_MODE
#define DDL_I2C_CLOCK_SPEED_FAST_MODE
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledClockStretching(I2C_TypeDef *I2Cx)
Check if Clock stretching is enabled or disabled.
__STATIC_INLINE void DDL_I2C_SetRiseTime(I2C_TypeDef *I2Cx, uint32_t RiseTime)
Configure the SCL, SDA rising time.
__STATIC_INLINE void DDL_I2C_ConfigSpeed(I2C_TypeDef *I2Cx, uint32_t PeriphClock, uint32_t ClockSpeed, uint32_t DutyCycle)
Configure the SCL speed.
__STATIC_INLINE void DDL_I2C_EnableSMBusAlert(I2C_TypeDef *I2Cx)
Enable SMBus alert (Host or Device mode).
__STATIC_INLINE void DDL_I2C_ConfigFilters(I2C_TypeDef *I2Cx, uint32_t AnalogFilter, uint32_t DigitalFilter)
Configure Noise Filters (Analog and Digital).
__STATIC_INLINE void DDL_I2C_DisableSMBusPEC(I2C_TypeDef *I2Cx)
Disable SMBus Packet Error Calculation (PEC).
__STATIC_INLINE void DDL_I2C_SetClockSpeedMode(I2C_TypeDef *I2Cx, uint32_t ClockSpeedMode)
Configure the I2C master clock speed mode.
__STATIC_INLINE void DDL_I2C_EnableSMBusPEC(I2C_TypeDef *I2Cx)
Enable SMBus Packet Error Calculation (PEC).
__STATIC_INLINE void DDL_I2C_SetOwnAddress1(I2C_TypeDef *I2Cx, uint32_t OwnAddress1, uint32_t OwnAddrSize)
Set the Own Address1.
__STATIC_INLINE uint32_t DDL_I2C_GetDigitalFilter(I2C_TypeDef *I2Cx)
Get the current Digital Noise Filter configuration.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledSMBusAlert(I2C_TypeDef *I2Cx)
Check if SMBus alert (Host or Device mode) is enabled or disabled.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledOwnAddress2(I2C_TypeDef *I2Cx)
Check if Own Address1 acknowledge is enabled or disabled.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledSMBusPEC(I2C_TypeDef *I2Cx)
Check if SMBus Packet Error Calculation (PEC) is enabled or disabled.
__STATIC_INLINE void DDL_I2C_DisableAnalogFilter(I2C_TypeDef *I2Cx)
Disable Analog Noise Filter.
__STATIC_INLINE void DDL_I2C_SetMode(I2C_TypeDef *I2Cx, uint32_t PeripheralMode)
Configure peripheral mode.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledAnalogFilter(I2C_TypeDef *I2Cx)
Check if Analog Noise Filter is enabled or disabled.
__STATIC_INLINE void DDL_I2C_SetPeriphClock(I2C_TypeDef *I2Cx, uint32_t PeriphClock)
Configure the Peripheral clock frequency.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabled(I2C_TypeDef *I2Cx)
Check if the I2C peripheral is enabled or disabled.
__STATIC_INLINE void DDL_I2C_DisableOwnAddress2(I2C_TypeDef *I2Cx)
Disable acknowledge on Own Address2 match address.
__STATIC_INLINE void DDL_I2C_DisableSMBusAlert(I2C_TypeDef *I2Cx)
Disable SMBus alert (Host or Device mode).
__STATIC_INLINE uint32_t DDL_I2C_GetPeriphClock(I2C_TypeDef *I2Cx)
Get the Peripheral clock frequency.
__STATIC_INLINE uint32_t DDL_I2C_GetRiseTime(I2C_TypeDef *I2Cx)
Get the SCL, SDA rising time.
__STATIC_INLINE void DDL_I2C_DisableClockStretching(I2C_TypeDef *I2Cx)
Disable Clock stretching.
__STATIC_INLINE void DDL_I2C_EnableAnalogFilter(I2C_TypeDef *I2Cx)
Enable Analog Noise Filter.
__STATIC_INLINE void DDL_I2C_EnableGeneralCall(I2C_TypeDef *I2Cx)
Enable General Call.
__STATIC_INLINE uint32_t DDL_I2C_GetClockPeriod(I2C_TypeDef *I2Cx)
Get the SCL high and low period.
__STATIC_INLINE uint32_t DDL_I2C_GetDutyCycle(I2C_TypeDef *I2Cx)
Get the Duty cycle (Fast mode only).
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledGeneralCall(I2C_TypeDef *I2Cx)
Check if General Call is enabled or disabled.
__STATIC_INLINE void DDL_I2C_EnableClockStretching(I2C_TypeDef *I2Cx)
Enable Clock stretching.
__STATIC_INLINE void DDL_I2C_Enable(I2C_TypeDef *I2Cx)
Enable I2C peripheral (PE = 1).
__STATIC_INLINE void DDL_I2C_DisableGeneralCall(I2C_TypeDef *I2Cx)
Disable General Call.
__STATIC_INLINE void DDL_I2C_SetOwnAddress2(I2C_TypeDef *I2Cx, uint32_t OwnAddress2)
Set the 7bits Own Address2.
__STATIC_INLINE uint32_t DDL_I2C_GetClockSpeedMode(I2C_TypeDef *I2Cx)
Get the the I2C master speed mode.
__STATIC_INLINE void DDL_I2C_SetDutyCycle(I2C_TypeDef *I2Cx, uint32_t DutyCycle)
Configure the Duty cycle (Fast mode only).
__STATIC_INLINE void DDL_I2C_SetDigitalFilter(I2C_TypeDef *I2Cx, uint32_t DigitalFilter)
Configure Digital Noise Filter.
__STATIC_INLINE void DDL_I2C_SetClockPeriod(I2C_TypeDef *I2Cx, uint32_t ClockPeriod)
Configure the SCL high and low period.
__STATIC_INLINE uint32_t DDL_I2C_GetMode(I2C_TypeDef *I2Cx)
Get peripheral mode.
__STATIC_INLINE void DDL_I2C_EnableOwnAddress2(I2C_TypeDef *I2Cx)
Enable acknowledge on Own Address2 match address.
__STATIC_INLINE void DDL_I2C_Disable(I2C_TypeDef *I2Cx)
Disable I2C peripheral (PE = 0).
__STATIC_INLINE void DDL_I2C_DisableDMAReq_TX(I2C_TypeDef *I2Cx)
Disable DMA transmission requests.
__STATIC_INLINE void DDL_I2C_EnableDMAReq_RX(I2C_TypeDef *I2Cx)
Enable DMA reception requests.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledDMAReq_RX(I2C_TypeDef *I2Cx)
Check if DMA reception requests are enabled or disabled.
__STATIC_INLINE void DDL_I2C_EnableDMAReq_TX(I2C_TypeDef *I2Cx)
Enable DMA transmission requests.
__STATIC_INLINE void DDL_I2C_DisableDMAReq_RX(I2C_TypeDef *I2Cx)
Disable DMA reception requests.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledDMAReq_TX(I2C_TypeDef *I2Cx)
Check if DMA transmission requests are enabled or disabled.
__STATIC_INLINE uint32_t DDL_I2C_DMA_GetRegAddr(I2C_TypeDef *I2Cx)
Get the data register address used for DMA transfer.
__STATIC_INLINE void DDL_I2C_EnableBitPOS(I2C_TypeDef *I2Cx)
Enable bit POS (master/host mode).
__STATIC_INLINE void DDL_I2C_EnableLastDMA(I2C_TypeDef *I2Cx)
Enable DMA last transfer.
__STATIC_INLINE uint32_t DDL_I2C_GetTransferDirection(I2C_TypeDef *I2Cx)
Indicate the value of transfer direction.
__STATIC_INLINE uint8_t DDL_I2C_ReceiveData8(I2C_TypeDef *I2Cx)
Read Receive Data register.
__STATIC_INLINE void DDL_I2C_DisableReset(I2C_TypeDef *I2Cx)
Disable Reset of I2C peripheral.
__STATIC_INLINE void DDL_I2C_TransmitData8(I2C_TypeDef *I2Cx, uint8_t Data)
Write in Transmit Data Register .
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledBitPOS(I2C_TypeDef *I2Cx)
Check if bit POS is enabled or disabled.
__STATIC_INLINE void DDL_I2C_EnableSMBusPECCompare(I2C_TypeDef *I2Cx)
Enable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mode...
__STATIC_INLINE uint32_t DDL_I2C_GetSMBusPEC(I2C_TypeDef *I2Cx)
Get the SMBus Packet Error byte calculated.
__STATIC_INLINE uint32_t DDL_I2C_IsResetEnabled(I2C_TypeDef *I2Cx)
Check if the I2C peripheral is under reset state or not.
__STATIC_INLINE void DDL_I2C_EnableReset(I2C_TypeDef *I2Cx)
Enable Reset of I2C peripheral.
__STATIC_INLINE void DDL_I2C_GenerateStartCondition(I2C_TypeDef *I2Cx)
Generate a START or RESTART condition.
__STATIC_INLINE void DDL_I2C_DisableLastDMA(I2C_TypeDef *I2Cx)
Disable DMA last transfer.
__STATIC_INLINE void DDL_I2C_GenerateStopCondition(I2C_TypeDef *I2Cx)
Generate a STOP condition after the current byte transfer (master mode).
__STATIC_INLINE void DDL_I2C_AcknowledgeNextData(I2C_TypeDef *I2Cx, uint32_t TypeAcknowledge)
Prepare the generation of a ACKnowledge or Non ACKnowledge condition after the address receive match ...
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledSMBusPECCompare(I2C_TypeDef *I2Cx)
Check if the SMBus Packet Error byte transfer or internal comparison is requested or not.
__STATIC_INLINE void DDL_I2C_DisableSMBusPECCompare(I2C_TypeDef *I2Cx)
Disable transfer or internal comparison of the SMBus Packet Error byte (transmission or reception mod...
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledLastDMA(I2C_TypeDef *I2Cx)
Check if DMA last transfer is enabled or disabled.
__STATIC_INLINE void DDL_I2C_DisableBitPOS(I2C_TypeDef *I2Cx)
Disable bit POS (master/host mode).
__STATIC_INLINE uint32_t I2C_ReadLastEvent(I2C_TypeDef *I2Cx)
Reads and returns the last I2C event status.
__STATIC_INLINE uint32_t DDL_I2C_ReadEventStatus(I2C_TypeDef *I2Cx, uint32_t i2cEvent)
Checks if the current I2C event matches the specified event.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_DUAL(I2C_TypeDef *I2Cx)
Indicate the status of Dual flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
Indicate the status of SMBus Timeout detection flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_ADD10(I2C_TypeDef *I2Cx)
Indicate the status of 10-bit header sent (master mode).
__STATIC_INLINE void DDL_I2C_ClearSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
Clear SMBus PEC error flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_AF(I2C_TypeDef *I2Cx)
Indicate the status of Acknowledge failure flag.
__STATIC_INLINE void DDL_I2C_ClearFlag_BERR(I2C_TypeDef *I2Cx)
Clear Bus error flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_START(I2C_TypeDef *I2Cx)
Indicate the status of Start Bit (master mode).
__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_PECERR(I2C_TypeDef *I2Cx)
Indicate the status of SMBus PEC error flag in reception.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_MSL(I2C_TypeDef *I2Cx)
Indicate the status of Master/Slave flag.
__STATIC_INLINE void DDL_I2C_ClearFlag_STOP(I2C_TypeDef *I2Cx)
Clear Stop detection flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_RXNE(I2C_TypeDef *I2Cx)
Indicate the status of Receive data register not empty flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_OVR(I2C_TypeDef *I2Cx)
Indicate the status of Overrun/Underrun flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_ADDR(I2C_TypeDef *I2Cx)
Indicate the status of Address sent (master mode) or Address matched flag (slave mode).
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_TXE(I2C_TypeDef *I2Cx)
Indicate the status of Transmit data register empty flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_BERR(I2C_TypeDef *I2Cx)
Indicate the status of Bus error flag.
__STATIC_INLINE void DDL_I2C_ClearFlag_AF(I2C_TypeDef *I2Cx)
Clear Acknowledge failure flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_SMBHOST(I2C_TypeDef *I2Cx)
Indicate the status of SMBus Host address reception (Slave mode).
__STATIC_INLINE void DDL_I2C_ClearFlag_ARLO(I2C_TypeDef *I2Cx)
Clear Arbitration lost flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
Indicate the status of SMBus alert flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_ARLO(I2C_TypeDef *I2Cx)
Indicate the status of Arbitration lost flag.
__STATIC_INLINE void DDL_I2C_ClearSMBusFlag_ALERT(I2C_TypeDef *I2Cx)
Clear SMBus Alert flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_BUSY(I2C_TypeDef *I2Cx)
Indicate the status of Bus Busy flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_BTF(I2C_TypeDef *I2Cx)
Indicate the status of Byte Transfer Finished flag. RESET: When Data byte transfer not done....
__STATIC_INLINE void DDL_I2C_ClearFlag_ADDR(I2C_TypeDef *I2Cx)
Clear Address Matched flag.
__STATIC_INLINE void DDL_I2C_ClearSMBusFlag_TIMEOUT(I2C_TypeDef *I2Cx)
Clear SMBus Timeout detection flag.
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_STOP(I2C_TypeDef *I2Cx)
Indicate the status of Stop detection flag (slave mode).
__STATIC_INLINE uint32_t DDL_I2C_IsActiveSMBusFlag_SMBDEFAULT(I2C_TypeDef *I2Cx)
Indicate the status of SMBus Device default address reception (Slave mode).
__STATIC_INLINE uint32_t DDL_I2C_IsActiveFlag_GENCALL(I2C_TypeDef *I2Cx)
Indicate the status of General call address reception (Slave mode).
__STATIC_INLINE void DDL_I2C_ClearFlag_OVR(I2C_TypeDef *I2Cx)
Clear Overrun/Underrun flag.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_TX(I2C_TypeDef *I2Cx)
Check if the TXE Interrupt is enabled or disabled.
__STATIC_INLINE void DDL_I2C_EnableIT_EVT(I2C_TypeDef *I2Cx)
Enable Events interrupts.
__STATIC_INLINE void DDL_I2C_DisableIT_TX(I2C_TypeDef *I2Cx)
Disable TXE interrupt.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_RX(I2C_TypeDef *I2Cx)
Check if the RXNE Interrupt is enabled or disabled.
__STATIC_INLINE void DDL_I2C_DisableIT_ERR(I2C_TypeDef *I2Cx)
Disable Error interrupts.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_BUF(I2C_TypeDef *I2Cx)
Check if Buffer interrupts are enabled or disabled.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_ERR(I2C_TypeDef *I2Cx)
Check if Error interrupts are enabled or disabled.
__STATIC_INLINE void DDL_I2C_DisableIT_BUF(I2C_TypeDef *I2Cx)
Disable Buffer interrupts.
__STATIC_INLINE void DDL_I2C_DisableIT_RX(I2C_TypeDef *I2Cx)
Disable RXNE interrupt.
__STATIC_INLINE void DDL_I2C_DisableIT_EVT(I2C_TypeDef *I2Cx)
Disable Events interrupts.
__STATIC_INLINE void DDL_I2C_EnableIT_RX(I2C_TypeDef *I2Cx)
Enable RXNE interrupt.
__STATIC_INLINE void DDL_I2C_EnableIT_BUF(I2C_TypeDef *I2Cx)
Enable Buffer interrupts.
__STATIC_INLINE void DDL_I2C_EnableIT_ERR(I2C_TypeDef *I2Cx)
Enable Error interrupts.
__STATIC_INLINE uint32_t DDL_I2C_IsEnabledIT_EVT(I2C_TypeDef *I2Cx)
Check if Events interrupts are enabled or disabled.
__STATIC_INLINE void DDL_I2C_EnableIT_TX(I2C_TypeDef *I2Cx)
Enable TXE interrupt.
uint32_t DDL_I2C_DeInit(I2C_TypeDef *I2Cx)
De-initialize the I2C registers to their default reset values.
void DDL_I2C_StructInit(DDL_I2C_InitTypeDef *I2C_InitStruct)
Set each DDL_I2C_InitTypeDef field to default value.
uint32_t DDL_I2C_Init(I2C_TypeDef *I2Cx, DDL_I2C_InitTypeDef *I2C_InitStruct)
Initialize the I2C registers according to the specified parameters in I2C_InitStruct.
#define __DDL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__)
Compute I2C Clock rising time.
#define __DDL_I2C_FREQ_HZ_TO_MHZ(__PCLK__)
Convert Peripheral Clock Frequency in Mhz.
#define __DDL_I2C_FREQ_MHZ_TO_HZ(__PCLK__)
Convert Peripheral Clock Frequency in Hz.
#define DDL_I2C_MAX_SPEED_STANDARD