Hierodule 1.6.2
Utility module set for STM32 MCUs
Loading...
Searching...
No Matches

Elements of the module that are confined to the scope of the compilation unit. Perfectly corresponds to the module's source file, except the IRQ handlers. More...

Functions

void Idle (HIERODULE_I2C_Wrapper *Wrapper, uint32_t NumberOfPeriods)
 Blocks for given number of I2C clock periods.
 
void EnableClockStretching (HIERODULE_I2C_Wrapper *Wrapper)
 Enables clock stretching for the I2C peripheral of a wrapper.
 
void DisableClockStretching (HIERODULE_I2C_Wrapper *Wrapper)
 Disables clock stretching for the I2C peripheral of a wrapper.
 
static uint8_t ReceiveData (HIERODULE_I2C_Wrapper *Wrapper)
 Read and returns the data register content of the I2C peripheral.
 
void TransmitData (HIERODULE_I2C_Wrapper *Wrapper, uint8_t Byte)
 Writes a byte into the data register of the I2C peripheral.
 
void ACK_Next (HIERODULE_I2C_Wrapper *Wrapper)
 Configure the I2C peripheral to "ACK" the next byte received.
 
void NACK_Next (HIERODULE_I2C_Wrapper *Wrapper)
 Configure the I2C peripheral to "NACK" the next byte received.
 
void Start (HIERODULE_I2C_Wrapper *Wrapper)
 Makes the I2C peripheral generate a start condition.
 
void Stop (HIERODULE_I2C_Wrapper *Wrapper)
 Makes the I2C peripheral generate a stop condition.
 
void ReceiveByteAsMaster (HIERODULE_I2C_Wrapper *Wrapper)
 Handles incoming data for an I2C peripheral in master receiver mode.
 
void ReceiveByteAsSlave (HIERODULE_I2C_Wrapper *Wrapper)
 Handles incoming data for an I2C peripheral in slave receiver mode.
 
void TransmitByteAsMaster (HIERODULE_I2C_Wrapper *Wrapper)
 Transmits the next data in the buffer for an I2C peripheral in master transmitter mode.
 
void TransmitByteAsSlave (HIERODULE_I2C_Wrapper *Wrapper)
 Transmits the next data in the buffer for an I2C peripheral in slave transmitter mode.
 
void ReturnToIdleState (HIERODULE_I2C_Wrapper *Wrapper)
 Invokes the on-SRX-finished routine if assigned and sets the I2C wrapper status back to idle.
 
void Receive_NACK (HIERODULE_I2C_Wrapper *Wrapper)
 Receives the NACK response, invokes the on-SRX-finished routine and sets the wrapper status back to idle.
 
void I2C_IRQ_Handler (HIERODULE_I2C_Wrapper *Wrapper)
 The base IRQ body to be used for all I2C IRQs.
 

Variables

static HIERODULE_I2C_WrapperI2C1_Wrapper
 I2C wrapper pointer meant for I2C1.
 
static HIERODULE_I2C_WrapperI2C2_Wrapper
 I2C wrapper pointer meant for I2C2.
Requires the device specific macro __STM32F103xB_H or __STM32F401xC_H to be defined.
 
static HIERODULE_I2C_WrapperI2C3_Wrapper
 I2C wrapper pointer meant for I2C3.
Requires the device specific macro __STM32F401xC_H to be defined.
 

Detailed Description

Implements the routines defined in the header file and routines necessary for those in the background. Pointers of I2C wrappers are also defined here.
IRQ definitions with custom ISR implementations are also included at the end of the file.

Function Documentation

◆ ACK_Next()

void ACK_Next ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 157 of file hierodule_i2c.c.

158{
160 #ifndef __STM32F030x6_H
161 MODIFY_REG(Wrapper->_I2C->CR1, I2C_CR1_ACK, I2C_CR1_ACK);
163 #else
164 MODIFY_REG(Wrapper->_I2C->CR2, I2C_CR2_NACK, 0);
166 #endif
167}
HIERODULE_USB_Wrapper Wrapper
Extern declaration for the wrapper instance in the source file.

References Wrapper.

Referenced by HIERODULE_I2C_InitWrapper(), and ReceiveByteAsMaster().

◆ DisableClockStretching()

void DisableClockStretching ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 94 of file hierodule_i2c.c.

95{
97 #ifdef __STM32F030x6_H
98 CLEAR_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE);
99 while( 1 == (READ_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE) == (I2C_CR1_PE)) );
101 #endif
103 SET_BIT(Wrapper->_I2C->CR1, I2C_CR1_NOSTRETCH);
104
105 while( 1 == (READ_BIT(Wrapper->_I2C->CR1, I2C_CR1_NOSTRETCH) != (I2C_CR1_NOSTRETCH)) );
106
108 #ifdef __STM32F030x6_H
109 SET_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE);
110 while( 0 == (READ_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE) == (I2C_CR1_PE)) );
112 #endif
113}

References Wrapper.

Referenced by HIERODULE_I2C_MasterReceive(), and HIERODULE_I2C_MasterTransmit().

◆ EnableClockStretching()

void EnableClockStretching ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 68 of file hierodule_i2c.c.

69{
71 #ifdef __STM32F030x6_H
72 CLEAR_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE);
73 while( 1 == (READ_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE) == (I2C_CR1_PE)) );
75 #endif
77 CLEAR_BIT(Wrapper->_I2C->CR1, I2C_CR1_NOSTRETCH);
78
79 while( 0 == (READ_BIT(Wrapper->_I2C->CR1, I2C_CR1_NOSTRETCH) != (I2C_CR1_NOSTRETCH)) );
80
82 #ifdef __STM32F030x6_H
83 SET_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE);
84 while( 0 == (READ_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE) == (I2C_CR1_PE)) );
86 #endif
87}

References Wrapper.

Referenced by HIERODULE_I2C_InitWrapper(), ReceiveByteAsMaster(), and TransmitByteAsMaster().

◆ I2C_IRQ_Handler()

void I2C_IRQ_Handler ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Transmission control is performed by handling the interrupt flags in accordance to the wrapper's status.

Definition at line 629 of file hierodule_i2c.c.

630{
631
633 #ifndef __STM32F030x6_H
634 uint8_t _ADDR_Active = (READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_ADDR) == (I2C_SR1_ADDR));
636 #else
637 uint8_t _ADDR_Active = (READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_ADDR) == (I2C_ISR_ADDR));
639 #endif
640
641 #ifdef __STM32F030x6_H
642 if ( READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_NACKF) == (I2C_ISR_NACKF) )
643 {
645 }
647 #else
648 if ( READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_AF) == (I2C_SR1_AF) )
649 {
651 }
653 #endif
654
655 #ifdef __STM32F030x6_H
656 else if( READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_RXNE) == (I2C_ISR_RXNE) )
657 {
658 if( Wrapper->Status == HIERODULE_I2C_Status_MRX )
660 else
661 {
662 if( Wrapper->Status == HIERODULE_I2C_Status_SRX )
664 else
666 }
667 }
669 #else
670 else if( READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_RXNE) == (I2C_SR1_RXNE) )
671 {
672 if( Wrapper->Status == HIERODULE_I2C_Status_MRX )
674 else
675 {
676 if( Wrapper->Status == HIERODULE_I2C_Status_SRX )
678 else
680 }
681 }
683 #endif
684
685 #ifndef __STM32F030x6_H
686 else if ( READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_SB) == (I2C_SR1_SB) )
687 {
688 if( Wrapper->Status == HIERODULE_I2C_Status_MTX_SB )
690 else if( Wrapper->Status == HIERODULE_I2C_Status_MRX_SB )
692 TransmitData(Wrapper, Wrapper->SlaveAddress);
693 }
695 #endif
696 else if ( _ADDR_Active )
697 {
699 {
701 #ifndef __STM32F030x6_H
702 uint32_t _t_dir = (uint32_t)(READ_BIT(Wrapper->_I2C->SR2, I2C_SR2_TRA));
704 #else
705 uint32_t _t_dir = (uint32_t)(READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_DIR));
707 #endif
708 if( 0 == _t_dir )
710 else
712 }
714 #ifndef __STM32F030x6_H
715 else if(Wrapper->Status == HIERODULE_I2C_Status_MTX_ADR)
716 {
718 }
719 else if(Wrapper->Status == HIERODULE_I2C_Status_MRX_ADR)
720 {
722 }
723 READ_REG(Wrapper->_I2C->SR1);
724 READ_REG(Wrapper->_I2C->SR2);
726 #else
727 SET_BIT(Wrapper->_I2C->ICR, I2C_ICR_ADDRCF);
729 #endif
730 }
732 #ifndef __STM32F030x6_H
733 else if ( (READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_TXE) == (I2C_SR1_TXE)) )
734 {
735 if(Wrapper->Status == HIERODULE_I2C_Status_MTX )
736 {
738 }
739 else if(Wrapper->Status == HIERODULE_I2C_Status_STX )
740 {
742 while(READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_TXE) != (I2C_SR1_TXE))
743 {
744 if ( READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_AF) == (I2C_SR1_AF) )
745 {
747 break;
748 }
749 }
750 }
751 }
753 #else
754 else if ( READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_TXIS) == (I2C_ISR_TXIS) )
755 {
756 if(Wrapper->Status == HIERODULE_I2C_Status_MTX )
757 {
759 }
760 else if(Wrapper->Status == HIERODULE_I2C_Status_STX )
761 {
763 while( READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_TXIS) != (I2C_ISR_TXIS) )
764 {
765 if ( READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_NACKF) == (I2C_ISR_NACKF) )
766 {
768 break;
769 }
770 }
771 }
772 }
774 #endif
775
776 #ifdef __STM32F030x6_H
777 else if ( READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_STOPF) == (I2C_ISR_STOPF) )
778 {
780 }
782 #else
783 else if ( READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_STOPF) == (I2C_SR1_STOPF) )
784 {
786 }
788 #endif
789}
void TransmitByteAsMaster(HIERODULE_I2C_Wrapper *Wrapper)
Transmits the next data in the buffer for an I2C peripheral in master transmitter mode.
void ReceiveByteAsMaster(HIERODULE_I2C_Wrapper *Wrapper)
Handles incoming data for an I2C peripheral in master receiver mode.
void TransmitData(HIERODULE_I2C_Wrapper *Wrapper, uint8_t Byte)
Writes a byte into the data register of the I2C peripheral.
void TransmitByteAsSlave(HIERODULE_I2C_Wrapper *Wrapper)
Transmits the next data in the buffer for an I2C peripheral in slave transmitter mode.
void ReceiveByteAsSlave(HIERODULE_I2C_Wrapper *Wrapper)
Handles incoming data for an I2C peripheral in slave receiver mode.
void ReturnToIdleState(HIERODULE_I2C_Wrapper *Wrapper)
Invokes the on-SRX-finished routine if assigned and sets the I2C wrapper status back to idle.
void Receive_NACK(HIERODULE_I2C_Wrapper *Wrapper)
Receives the NACK response, invokes the on-SRX-finished routine and sets the wrapper status back to i...
static uint8_t ReceiveData(HIERODULE_I2C_Wrapper *Wrapper)
Read and returns the data register content of the I2C peripheral.
@ HIERODULE_I2C_Status_MTX
Master transmitter, transmitting bytes.
@ HIERODULE_I2C_Status_MTX_ADR
Master transmitter, waiting for a slave to acknowledge the address.
@ HIERODULE_I2C_Status_MRX_ADR
Master receiver, waiting for a slave to acknowledge the address.
@ HIERODULE_I2C_Status_IDLE
Peripheral is expecting a start condition.
@ HIERODULE_I2C_Status_MRX_SB
Master receiver, waiting for the start condition to commence.
@ HIERODULE_I2C_Status_STX
Slave transmitter, transmitting bytes.
@ HIERODULE_I2C_Status_MTX_SB
Master transmitter, waiting for the start condition to commence.
@ HIERODULE_I2C_Status_SRX
Slave receiver, receiving bytes.
@ HIERODULE_I2C_Status_MRX
Master receiver, receiving bytes.

References HIERODULE_I2C_Status_IDLE, HIERODULE_I2C_Status_MRX, HIERODULE_I2C_Status_MRX_ADR, HIERODULE_I2C_Status_MRX_SB, HIERODULE_I2C_Status_MTX, HIERODULE_I2C_Status_MTX_ADR, HIERODULE_I2C_Status_MTX_SB, HIERODULE_I2C_Status_SRX, HIERODULE_I2C_Status_STX, Receive_NACK(), ReceiveByteAsMaster(), ReceiveByteAsSlave(), ReceiveData(), ReturnToIdleState(), TransmitByteAsMaster(), TransmitByteAsSlave(), TransmitData(), and Wrapper.

Referenced by I2C1_EV_IRQHandler(), I2C1_IRQHandler(), I2C2_EV_IRQHandler(), and I2C3_EV_IRQHandler().

◆ Idle()

void Idle ( HIERODULE_I2C_Wrapper * Wrapper,
uint32_t NumberOfPeriods )
Parameters
WrapperPointer to the I2C wrapper.
NumberOfPeriodsNumber of I2C clock periods.
Returns
None

The period length is calculated beforehand with a HIERODULE_I2C_InitWrapper call.

Definition at line 55 of file hierodule_i2c.c.

56{
57 for(uint32_t i = 0 ; i < Wrapper->I2C_Period_Length*NumberOfPeriods ; i++)
58 {
59 __NOP();
60 }
61}

References Wrapper.

Referenced by TransmitByteAsSlave().

◆ NACK_Next()

void NACK_Next ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 174 of file hierodule_i2c.c.

175{
177 #ifndef __STM32F030x6_H
178 MODIFY_REG(Wrapper->_I2C->CR1, I2C_CR1_ACK, 0);
180 #else
181 MODIFY_REG(Wrapper->_I2C->CR2, I2C_CR2_NACK, I2C_CR2_NACK);
183 #endif
184}

References Wrapper.

Referenced by HIERODULE_I2C_MasterReceive(), and ReceiveByteAsMaster().

◆ Receive_NACK()

void Receive_NACK ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Only to be used when exiting slave transmitter mode.

Definition at line 355 of file hierodule_i2c.c.

356{
357 if(Wrapper->Status == HIERODULE_I2C_Status_STX )
358 {
360 #ifdef __STM32F030x6_H
361 SET_BIT(Wrapper->_I2C->ICR, I2C_ICR_NACKCF);
362 while( 1 == READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_NACKF) );
364 #else
365 CLEAR_BIT(Wrapper->_I2C->SR1, I2C_SR1_AF);
367 #endif
370 #ifdef __STM32F030x6_H
372 while( 0 == READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_STOPF) );
373 SET_BIT(Wrapper->_I2C->ICR, I2C_ICR_STOPCF);
374 while( 1 == READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_STOPF) );
376 #endif
378 if( Wrapper->STX_Handler != NULL)
379 Wrapper->STX_Handler();
381
382 }
383}

References HIERODULE_I2C_Status_IDLE, HIERODULE_I2C_Status_STX, TransmitByteAsSlave(), and Wrapper.

Referenced by I2C_IRQ_Handler().

◆ ReceiveByteAsMaster()

void ReceiveByteAsMaster ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

The received byte is appended to the MRX buffer of the wrapper.
The data is "ACKed" or "NACKed", depending on whether it's the last byte the master expects to receive. The wrapper is returned to the idle state in the latter case and depending on the device, clock stretching is enabled back again.

Definition at line 229 of file hierodule_i2c.c.

230{
231 (Wrapper->MRX_Buffer)[Wrapper->MRX_Counter] =
233
234 Wrapper->MRX_Counter++;
235 if(Wrapper->MRX_Counter == Wrapper->MRX_BufferSize)
236 {
238 Wrapper->SlaveAddress = 0;
239
240 Stop(Wrapper);
241
243 #ifndef __STM32F030x6_H
246 #endif
249
250 if( Wrapper->MRX_Handler != NULL)
251 Wrapper->MRX_Handler();
252 }
253 else if(Wrapper->MRX_Counter == Wrapper->MRX_BufferSize-1)
254 {
256 __NOP();
257 }
258}
void Stop(HIERODULE_I2C_Wrapper *Wrapper)
Makes the I2C peripheral generate a stop condition.
void EnableClockStretching(HIERODULE_I2C_Wrapper *Wrapper)
Enables clock stretching for the I2C peripheral of a wrapper.
void NACK_Next(HIERODULE_I2C_Wrapper *Wrapper)
Configure the I2C peripheral to "NACK" the next byte received.
void ACK_Next(HIERODULE_I2C_Wrapper *Wrapper)
Configure the I2C peripheral to "ACK" the next byte received.

References ACK_Next(), EnableClockStretching(), HIERODULE_I2C_Status_IDLE, NACK_Next(), ReceiveData(), Stop(), and Wrapper.

Referenced by I2C_IRQ_Handler().

◆ ReceiveByteAsSlave()

void ReceiveByteAsSlave ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

The routine is stateless, assuming the wrapper status handling is performed accordingly.

Definition at line 266 of file hierodule_i2c.c.

267{
268 Wrapper->SRX_Buffer[Wrapper->SRX_Index] =
270
271 Wrapper->SRX_Index++;
272 Wrapper->SRX_Index %= Wrapper->SRX_BufferSize;
273
274 if( Wrapper->SRX_New < Wrapper->SRX_BufferSize )
275 Wrapper->SRX_New++;
276}

References ReceiveData(), and Wrapper.

Referenced by I2C_IRQ_Handler().

◆ ReceiveData()

static uint8_t ReceiveData ( HIERODULE_I2C_Wrapper * Wrapper)
static
Parameters
WrapperPointer to the I2C wrapper.
Returns
uint8_t The byte returned.

Defined as static to avoid the multiple definition error some compilers throw since a function with the same name also exists within another module; that will be fixed in a future release.

Definition at line 122 of file hierodule_i2c.c.

123{
125 #ifdef __STM32F030x6_H
126 return (uint8_t)(READ_BIT(Wrapper->_I2C->RXDR, I2C_RXDR_RXDATA));
128 #else
129 return (uint8_t)(READ_BIT(Wrapper->_I2C->DR, I2C_DR_DR));
131 #endif
132}

References Wrapper.

Referenced by I2C_IRQ_Handler(), ReceiveByteAsMaster(), and ReceiveByteAsSlave().

◆ ReturnToIdleState()

void ReturnToIdleState ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Only to be used when exiting slave receiver mode.

Definition at line 334 of file hierodule_i2c.c.

335{
337 #ifdef __STM32F030x6_H
338 SET_BIT(Wrapper->_I2C->ICR, I2C_ICR_STOPCF);
340 #else
341 SET_BIT(Wrapper->_I2C->CR1, I2C_CR1_PE);
343 #endif
344 if( Wrapper->SRX_Handler != NULL)
345 Wrapper->SRX_Handler();
347}

References HIERODULE_I2C_Status_IDLE, and Wrapper.

Referenced by I2C_IRQ_Handler().

◆ Start()

void Start ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 191 of file hierodule_i2c.c.

192{
194 #ifndef __STM32F030x6_H
195 SET_BIT(Wrapper->_I2C->CR1, I2C_CR1_START);
197 #else
198 SET_BIT(Wrapper->_I2C->CR2, I2C_CR2_START);
200 #endif
201}

References Wrapper.

Referenced by HIERODULE_I2C_MasterReceive(), and HIERODULE_I2C_MasterTransmit().

◆ Stop()

void Stop ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 208 of file hierodule_i2c.c.

209{
211 #ifndef __STM32F030x6_H
212 SET_BIT(Wrapper->_I2C->CR1, I2C_CR1_STOP);
214 #else
215 SET_BIT(Wrapper->_I2C->CR2, I2C_CR2_STOP);
217 #endif
218}

References Wrapper.

Referenced by ReceiveByteAsMaster(), and TransmitByteAsMaster().

◆ TransmitByteAsMaster()

void TransmitByteAsMaster ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

The MTX buffer should be set before initializing the transmission.

Definition at line 284 of file hierodule_i2c.c.

285{
286 TransmitData(Wrapper, (Wrapper->MTX_Buffer)[Wrapper->MTX_Counter]);
287 Wrapper->MTX_Counter++;
288 if( Wrapper->MTX_Counter == Wrapper->MTX_BufferSize )
289 {
291 #ifndef __STM32F030x6_H
292 while(READ_BIT(Wrapper->_I2C->SR1, I2C_SR1_TXE) != (I2C_SR1_TXE))
294 #else
295 while(READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_TC) != (I2C_ISR_TC));
297 #endif
299 Wrapper->SlaveAddress = 0;
300 Stop(Wrapper);
302 #ifdef __STM32F030x6_H
303 while( 0 == READ_BIT(Wrapper->_I2C->ISR, I2C_ISR_STOPF) );
305 #endif
307 if( Wrapper->MTX_Handler != NULL)
308 Wrapper->MTX_Handler();
309 }
310}

References EnableClockStretching(), HIERODULE_I2C_Status_IDLE, Stop(), TransmitData(), and Wrapper.

Referenced by I2C_IRQ_Handler().

◆ TransmitByteAsSlave()

void TransmitByteAsSlave ( HIERODULE_I2C_Wrapper * Wrapper)
Parameters
WrapperPointer to the I2C wrapper.
Returns
None

The STX buffer should be set before initializing the transmission.

Definition at line 318 of file hierodule_i2c.c.

319{
320 if( Wrapper->STX_Buffer != NULL )
321 TransmitData(Wrapper, (Wrapper->STX_Buffer)[(Wrapper->STX_Counter)++]);
322 else
324
325 Idle(Wrapper, 1);
326}
void Idle(HIERODULE_I2C_Wrapper *Wrapper, uint32_t NumberOfPeriods)
Blocks for given number of I2C clock periods.

References Idle(), TransmitData(), and Wrapper.

Referenced by I2C_IRQ_Handler(), and Receive_NACK().

◆ TransmitData()

void TransmitData ( HIERODULE_I2C_Wrapper * Wrapper,
uint8_t Byte )
Parameters
WrapperPointer to the I2C wrapper.
ByteByte to be written into the data register.
Returns
None

Self-explanatory code, nothing to elaborate.

Definition at line 140 of file hierodule_i2c.c.

141{
143 #ifdef __STM32F030x6_H
144 WRITE_REG(Wrapper->_I2C->TXDR, Byte);
146 #else
147 MODIFY_REG(Wrapper->_I2C->DR, I2C_DR_DR, Byte);
149 #endif
150}

References Wrapper.

Referenced by I2C_IRQ_Handler(), TransmitByteAsMaster(), and TransmitByteAsSlave().

Variable Documentation

◆ I2C1_Wrapper

HIERODULE_I2C_Wrapper* I2C1_Wrapper
static

Definition at line 27 of file hierodule_i2c.c.

Referenced by HIERODULE_I2C_InitWrapper(), I2C1_EV_IRQHandler(), and I2C1_IRQHandler().

◆ I2C2_Wrapper

HIERODULE_I2C_Wrapper* I2C2_Wrapper
static

Definition at line 34 of file hierodule_i2c.c.

Referenced by HIERODULE_I2C_InitWrapper(), and I2C2_EV_IRQHandler().

◆ I2C3_Wrapper

HIERODULE_I2C_Wrapper* I2C3_Wrapper
static

Definition at line 44 of file hierodule_i2c.c.

Referenced by HIERODULE_I2C_InitWrapper(), and I2C3_EV_IRQHandler().