36 #include <oc_gpio_mslld.h> 37 #include <oc_machine_defs.h> 49 #define _________________________________________MACROS_SECTION_____________________________________________________________________________ 51 #define IsRam(address) (oC_MEM_LLD_IsRamAddress(address)) 52 #define IsRom(address) (oC_MEM_LLD_IsFlashAddress(address)) 53 #define IsChannelCorrect(channel) (oC_Channel_IsCorrect(SPI,channel)) 54 #define IsChannelPoweredOn(channel) (oC_Machine_GetPowerStateForChannel(Channel) == oC_Power_On) 55 #define IsChannelUsed(channel) (oC_Bits_IsBitSetU32(ChannelUsedFlags,(uint8_t)oC_Channel_ToIndex(SPI,Channel))) 56 #define IsChannelBusy(channel) (SSISR(channel)->BSY == 1) // SSI Busy Bit 57 #define IsRxFifoFull(channel) (SSISR(channel)->RFF == 1) // SSI Receive FIFO Full 58 #define IsRxFifoEmpty(channel) (SSISR(channel)->RNE == 0) // SSI Receive FIFO Not Empty 59 #define IsTxFifoFull(channel) (SSISR(channel)->TNF == 0) // SSI Transmit FIFO Not Full 60 #define IsTxFifoEmpty(channel) (SSISR(channel)->TFE == 1) // SSI Transmit FIFO Empty 62 #define SSICR0(Channel) oC_Machine_Register(Channel, SSICR0) 63 #define SSICR1(Channel) oC_Machine_Register(Channel, SSICR1) 64 #define SSIDR(Channel) oC_Machine_Register(Channel, SSIDR) 65 #define SSISR(Channel) oC_Machine_Register(Channel, SSISR) 66 #define SSICPSR(Channel) oC_Machine_Register(Channel, SSICPSR) 67 #define SSIDMACTL(Channel) oC_Machine_Register(Channel, SSIDMACTL) 68 #define SSICC(Channel) oC_Machine_Register(Channel, SSICC) 70 #define IsFrameWidthCorrect(FrameWidth) ((FrameWidth) >= oC_MACHINE_SPI_MINIMUM_FRAME_WIDTH) && ((FrameWidth) <= oC_MACHINE_SPI_MAXIMUM_FRAME_WIDTH) 72 #define AreChannelOperationsEnabled(Channel) (SSICR1(Channel)->SSE == 1) 73 #define AreChannelOperationsDisabled(Channel) (SSICR1(Channel)->SSE == 0) 75 #undef __________________________________________MACROS_SECTION_____________________________________________________________________________ 77 #define _________________________________________VARIABLES_SECTION__________________________________________________________________________ 80 static oC_SPI_LLD_Interrupt_t RxFullInterrupt =
NULL;
81 static oC_SPI_LLD_Interrupt_t TxEmptyInterrupt =
NULL;
82 static uint32_t ChannelUsedFlags = 0;
84 #undef _________________________________________VARIABLES_SECTION__________________________________________________________________________ 91 #define ______________________________________LOCAL_PROTOTYPES_SECTION______________________________________________________________________ 93 static oC_ErrorCode_t CalculateDivisorsAndWriteRegisters ( oC_SPI_Channel_t Channel,
oC_Frequency_t Frequency ,
oC_Frequency_t AcceptableDifference );
95 #undef ______________________________________LOCAL_PROTOTYPES_SECTION_______________________________________________________________________ 102 #define _________________________________________FUNCTIONS_SECTION__________________________________________________________________________ 110 bool oC_SPI_LLD_IsChannelCorrect( oC_SPI_Channel_t Channel )
150 oC_SPI_Channel_t oC_SPI_LLD_GetChannelOfModulePin( oC_SPI_Pin_t ModulePin )
152 return oC_ModulePin_GetChannel(ModulePin);
160 oC_ErrorCode_t oC_SPI_LLD_TurnOnDriver(
void )
162 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
164 if(oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
false , oC_ErrorCode_ModuleIsTurnedOn))
166 errorCode = oC_ErrorCode_None;
167 RxFullInterrupt =
NULL;
168 TxEmptyInterrupt =
NULL;
169 ChannelUsedFlags = 0;
181 oC_ErrorCode_t oC_SPI_LLD_TurnOffDriver(
void )
183 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
185 if(oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet))
188 RxFullInterrupt =
NULL;
189 TxEmptyInterrupt =
NULL;
190 ChannelUsedFlags = 0;
191 errorCode = oC_ErrorCode_None;
193 oC_SPI_LLD_ForEachChannel(channel)
195 oC_AssignErrorCode(&errorCode , oC_SPI_LLD_RestoreDefaultStateOnChannel(channel));
208 oC_ErrorCode_t oC_SPI_LLD_SetDriverInterruptHandlers( oC_SPI_LLD_Interrupt_t RxFull , oC_SPI_LLD_Interrupt_t TxEmpty )
210 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
213 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
214 oC_AssignErrorCodeIfFalse(&errorCode , RxFullInterrupt ==
NULL , oC_ErrorCode_InterruptHandlerAlreadySet) &&
215 oC_AssignErrorCodeIfFalse(&errorCode , TxEmptyInterrupt ==
NULL , oC_ErrorCode_InterruptHandlerAlreadySet) &&
216 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(RxFull) || IsRom(RxFull) , oC_ErrorCode_WrongAddress) &&
217 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(TxEmpty) || IsRom(TxEmpty) , oC_ErrorCode_WrongAddress)
220 RxFullInterrupt = RxFull;
221 TxEmptyInterrupt = TxEmpty;
223 errorCode = oC_ErrorCode_None;
234 oC_ErrorCode_t oC_SPI_LLD_SetPower( oC_SPI_Channel_t Channel ,
oC_Power_t Power )
236 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
239 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
240 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel ) &&
241 oC_AssignErrorCodeIfFalse(&errorCode , Power ==
oC_Power_On || Power ==
oC_Power_Off , oC_ErrorCode_PowerStateNotCorrect) &&
245 errorCode = oC_ErrorCode_None;
256 oC_ErrorCode_t oC_SPI_LLD_ReadPower( oC_SPI_Channel_t Channel ,
oC_Power_t * outPower )
258 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
261 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
262 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
263 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outPower) , oC_ErrorCode_OutputAddressNotInRAM)
267 errorCode = oC_ErrorCode_None;
278 oC_ErrorCode_t oC_SPI_LLD_DisableOperations( oC_SPI_Channel_t Channel )
280 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
283 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
284 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
285 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn)
288 while(IsChannelBusy(Channel));
290 SSICR1(Channel)->SSE = 0;
292 errorCode = oC_ErrorCode_None;
303 oC_ErrorCode_t oC_SPI_LLD_EnableOperations( oC_SPI_Channel_t Channel )
305 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
308 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
309 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
310 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn)
313 if( AreChannelOperationsEnabled(Channel) )
315 errorCode = oC_SPI_LLD_DisableOperations(Channel);
317 if( errorCode == oC_ErrorCode_None )
319 SSICR0(Channel)->FRF = 0;
320 SSICR1(Channel)->SLBY6 = 1;
321 SSICC (Channel)->CS = 0;
323 SSICR1(Channel)->SSE = 1;
328 SSICR0(Channel)->FRF = 0;
329 SSICR1(Channel)->SLBY6 = 1;
330 SSICC (Channel)->CS = 0;
332 SSICR1(Channel)->SSE = 1;
334 errorCode = oC_ErrorCode_None;
347 oC_ErrorCode_t oC_SPI_LLD_RestoreDefaultStateOnChannel( oC_SPI_Channel_t Channel )
349 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
351 if(oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel))
357 errorCode = oC_ErrorCode_None;
369 oC_ErrorCode_t oC_SPI_LLD_SetBitOrder( oC_SPI_Channel_t Channel , oC_SPI_LLD_BitOrder_t BitOrder )
371 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
374 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
375 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
376 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
377 oC_AssignErrorCodeIfFalse(&errorCode , BitOrder == oC_SPI_LLD_BitOrder_MSBFirst , oC_ErrorCode_BitOrderNotSupported) &&
378 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
381 errorCode = oC_ErrorCode_None;
392 oC_ErrorCode_t oC_SPI_LLD_ReadBitOrder( oC_SPI_Channel_t Channel , oC_SPI_LLD_BitOrder_t * outBitOrder )
394 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
397 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
398 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
399 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
400 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outBitOrder) , oC_ErrorCode_OutputAddressNotInRAM)
403 *outBitOrder = oC_SPI_LLD_BitOrder_MSBFirst;
405 errorCode = oC_ErrorCode_None;
416 oC_ErrorCode_t oC_SPI_LLD_SetFrameWidth( oC_SPI_Channel_t Channel , oC_SPI_LLD_FrameWidth_t FrameWidth )
418 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
421 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
422 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
423 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
424 oC_AssignErrorCodeIfFalse(&errorCode , IsFrameWidthCorrect(FrameWidth) , oC_ErrorCode_FrameWidthNotSupported) &&
425 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
428 SSICR0(Channel)->DSS = (--FrameWidth);
429 errorCode = oC_ErrorCode_None;
440 oC_ErrorCode_t oC_SPI_LLD_ReadFrameWidth( oC_SPI_Channel_t Channel , oC_SPI_LLD_FrameWidth_t * outFrameWidth )
442 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
445 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
446 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
447 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
448 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outFrameWidth) , oC_ErrorCode_OutputAddressNotInRAM)
451 *outFrameWidth = SSICR0(Channel)->DSS + 1;
453 errorCode = oC_ErrorCode_None;
464 oC_ErrorCode_t oC_SPI_LLD_SetClockPhase( oC_SPI_Channel_t Channel , oC_SPI_LLD_Phase_t Phase )
466 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
469 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
470 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
471 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
472 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled) &&
473 oC_AssignErrorCodeIfFalse(&errorCode , Phase == oC_SPI_LLD_Phase_FirstEdge ||
474 Phase == oC_SPI_LLD_Phase_SecondEdge , oC_ErrorCode_ClockPhaseNotSupported)
477 if (oC_SPI_LLD_Phase_FirstEdge == Phase)
479 SSICR0(Channel)->SPH = 0;
483 SSICR0(Channel)->SPH = 1;
486 errorCode = oC_ErrorCode_None;
497 oC_ErrorCode_t oC_SPI_LLD_ReadClockPhase( oC_SPI_Channel_t Channel , oC_SPI_LLD_Phase_t * outPhase )
499 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
502 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
503 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
504 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
505 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outPhase) , oC_ErrorCode_OutputAddressNotInRAM)
508 if (0 == SSICR0(Channel)->SPH)
510 *outPhase = oC_SPI_LLD_Phase_FirstEdge;
514 *outPhase = oC_SPI_LLD_Phase_SecondEdge;
517 errorCode = oC_ErrorCode_None;
528 oC_ErrorCode_t oC_SPI_LLD_SetClockPolarity( oC_SPI_Channel_t Channel , oC_SPI_LLD_Polarity_t Polarity )
530 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
533 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
534 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
535 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
536 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled) &&
537 oC_AssignErrorCodeIfFalse(&errorCode , Polarity == oC_SPI_LLD_Polarity_HighWhenActive ||
538 Polarity == oC_SPI_LLD_Polarity_LowWhenActive , oC_ErrorCode_ClockPolarityNotSupported)
541 if (oC_SPI_LLD_Polarity_HighWhenActive == Polarity)
543 SSICR0(Channel)->SPO = 1;
547 SSICR0(Channel)->SPO = 0;
550 errorCode = oC_ErrorCode_None;
561 oC_ErrorCode_t oC_SPI_LLD_ReadClockPolarity( oC_SPI_Channel_t Channel , oC_SPI_LLD_Polarity_t * outPolarity )
563 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
566 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
567 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
568 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
569 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outPolarity) , oC_ErrorCode_OutputAddressNotInRAM)
572 if (0 == SSICR0(Channel)->SPO)
574 *outPolarity = oC_SPI_LLD_Polarity_LowWhenActive;
578 *outPolarity = oC_SPI_LLD_Polarity_HighWhenActive;
581 errorCode = oC_ErrorCode_None;
592 oC_ErrorCode_t oC_SPI_LLD_SetChipSelectPolarity( oC_SPI_Channel_t Channel , oC_SPI_LLD_Polarity_t Polarity )
594 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
597 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
598 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
599 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
600 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled) &&
601 oC_AssignErrorCodeIfFalse(&errorCode , Polarity == oC_SPI_LLD_Polarity_LowWhenActive , oC_ErrorCode_ChipSelectPolarityNotSupported)
604 errorCode = oC_ErrorCode_None;
615 oC_ErrorCode_t oC_SPI_LLD_ReadChipSelectPolarity( oC_SPI_Channel_t Channel , oC_SPI_LLD_Polarity_t * outPolarity )
617 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
620 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
621 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
622 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
623 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outPolarity) , oC_ErrorCode_OutputAddressNotInRAM)
626 *outPolarity = oC_SPI_LLD_Polarity_LowWhenActive;
627 errorCode = oC_ErrorCode_None;
638 oC_ErrorCode_t oC_SPI_LLD_SetLoopback( oC_SPI_Channel_t Channel ,
bool Loopback )
640 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
643 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
644 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
645 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
646 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
651 SSICR1(Channel)->LBM = 1;
655 SSICR1(Channel)->LBM = 0;
658 errorCode = oC_ErrorCode_None;
669 oC_ErrorCode_t oC_SPI_LLD_ReadLoopback( oC_SPI_Channel_t Channel ,
bool * outLoopback )
671 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
674 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
675 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
676 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
677 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outLoopback) , oC_ErrorCode_OutputAddressNotInRAM)
680 *outLoopback = SSICR1(Channel)->LBM;
681 errorCode = oC_ErrorCode_None;
694 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
697 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
698 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
699 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
700 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled) &&
701 oC_AssignErrorCodeIfFalse(&errorCode , Frequency >=0 , oC_ErrorCode_WrongFrequency)
704 oC_SPI_LLD_Mode_t mode;
705 errorCode = oC_SPI_LLD_ReadMode(Channel , &mode);
707 if (mode == oC_SPI_LLD_Mode_Master)
709 errorCode = CalculateDivisorsAndWriteRegisters(Channel , Frequency , PermissibleDifference);
713 errorCode = oC_ErrorCode_FunctionNotSupportedInCurrentMode;
725 oC_ErrorCode_t oC_SPI_LLD_ReadFrequency( oC_SPI_Channel_t Channel ,
oC_Frequency_t * outFrequency )
727 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
730 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
731 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
732 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
733 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outFrequency) , oC_ErrorCode_OutputAddressNotInRAM)
736 oC_SPI_LLD_Mode_t mode;
738 if(oC_AssignErrorCode(&errorCode , oC_SPI_LLD_ReadMode(Channel , &mode)))
740 if(mode == oC_SPI_LLD_Mode_Master)
744 *outFrequency = SystemClockFrequency / (SSICPSR(Channel)->CPSDVSR * (SSICR0(Channel)->SCR + 1));
745 errorCode = oC_ErrorCode_None;
749 errorCode = oC_ErrorCode_FunctionNotSupportedInCurrentMode;
762 oC_ErrorCode_t oC_SPI_LLD_SetChannelUsed( oC_SPI_Channel_t Channel )
764 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
767 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet ) &&
768 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel ) &&
769 oC_AssignErrorCodeIfFalse(&errorCode , !oC_SPI_LLD_IsChannelUsed(Channel), oC_ErrorCode_ChannelIsUsed)
773 errorCode = oC_ErrorCode_None;
784 oC_ErrorCode_t oC_SPI_LLD_SetChannelUnused( oC_SPI_Channel_t Channel )
786 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
789 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet ) &&
790 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel )
794 errorCode = oC_ErrorCode_None;
805 bool oC_SPI_LLD_IsChannelUsed( oC_SPI_Channel_t Channel )
819 oC_STATIC_ASSERT(
oC_ModuleChannel_NumberOfElements(SPI) <= 32,
"The SPI LLD module is not designed for more, than 32 channels - you need to set ChannelUsedFlags to uint64_t if you want to handle it!");
821 used = IsChannelUsed(Channel);
832 bool oC_SPI_LLD_IsModulePinDefined( oC_SPI_Pin_t ModulePin )
834 oC_Pin_t pin = oC_ModulePin_GetPin(ModulePin);
835 return oC_GPIO_LLD_IsPinDefined(pin);
843 oC_ErrorCode_t oC_SPI_LLD_SetMode( oC_SPI_Channel_t Channel, oC_SPI_LLD_Mode_t Mode )
845 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
848 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet ) &&
849 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
850 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
851 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled) &&
852 oC_AssignErrorCodeIfFalse(&errorCode , Mode == oC_SPI_LLD_Mode_Master ||
853 Mode == oC_SPI_LLD_Mode_SlaveDisabledOutput ||
854 Mode == oC_SPI_LLD_Mode_SlaveEnabledOutput , oC_ErrorCode_ModeNotSupported)
857 SSICR1(Channel)->MS = (Mode & 1);
858 SSICR1(Channel)->SOD = ((Mode>>1) & 1) ;
860 errorCode = oC_ErrorCode_None;
871 oC_ErrorCode_t oC_SPI_LLD_ReadMode( oC_SPI_Channel_t Channel, oC_SPI_LLD_Mode_t * outMode )
873 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
876 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
877 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
878 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
879 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outMode) , oC_ErrorCode_OutputAddressNotInRAM)
882 if ((SSICR1(Channel)->MS == 1) && (SSICR1(Channel)->SOD == 0))
884 *outMode = oC_SPI_LLD_Mode_SlaveEnabledOutput;
886 else if ((SSICR1(Channel)->MS == 1) && (SSICR1(Channel)->SOD == 1))
888 *outMode = oC_SPI_LLD_Mode_SlaveDisabledOutput;
892 *outMode = oC_SPI_LLD_Mode_Master;
895 errorCode = oC_ErrorCode_None;
906 oC_ErrorCode_t oC_SPI_LLD_ReadModulePinsOfPin( oC_Pins_t Pin , oC_SPI_Pin_t * outPeripheralPinsArray , uint32_t * ArraySize)
908 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
911 oC_AssignErrorCodeIfFalse(&errorCode , oC_GPIO_LLD_IsSinglePin(Pin) , oC_ErrorCode_NotSinglePin ) &&
912 oC_AssignErrorCodeIfFalse(&errorCode , oC_SPI_LLD_IsModulePinDefined(Pin) , oC_ErrorCode_PinNotDefined ) &&
913 oC_AssignErrorCodeIfFalse(&errorCode ,
oC_MEM_LLD_IsRamAddress(outPeripheralPinsArray) , oC_ErrorCode_OutputAddressNotInRAM ) &&
914 oC_AssignErrorCodeIfFalse(&errorCode ,
oC_MEM_LLD_IsRamAddress(ArraySize) , oC_ErrorCode_OutputAddressNotInRAM ) &&
915 oC_AssignErrorCodeIfFalse(&errorCode , (*ArraySize) < 255 , oC_ErrorCode_ValueTooBig )
918 uint8_t outArrayIndex = 0;
920 errorCode = oC_ErrorCode_None;
922 oC_ModulePin_ForeachDefined(modulePin)
926 if(outArrayIndex < (*ArraySize))
928 outPeripheralPinsArray[outArrayIndex++] = modulePin->ModulePinIndex;
932 errorCode = oC_ErrorCode_OutputArrayToSmall;
937 if(outArrayIndex == 0)
939 errorCode = oC_ErrorCode_PeripheralPinNotDefined;
942 *ArraySize = outArrayIndex;
953 oC_ErrorCode_t oC_SPI_LLD_ConnectModulePin( oC_SPI_Pin_t ModulePin )
955 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
974 errorCode = oC_ErrorCode_None;
983 oC_ErrorCode_t oC_SPI_LLD_ConfigureGeneralChipSelectPin( oC_SPI_Channel_t Channel , oC_Pins_t Pin )
985 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
986 bool pinUnused =
false;
989 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
990 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel ) &&
991 oC_AssignErrorCodeIfFalse(&errorCode , oC_GPIO_LLD_IsPinDefined(Pin) , oC_ErrorCode_PinNotDefined)
995 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_ArePinsUnused(Pin,&pinUnused)) &&
996 oC_AssignErrorCodeIfFalse(&errorCode , pinUnused , oC_ErrorCode_PinIsUsed) &&
997 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetPinsUsed(Pin))
1001 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_BeginConfiguration(Pin)) &&
1002 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetMode(Pin , oC_GPIO_LLD_Mode_Output)) &&
1003 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetCurrent(Pin , oC_GPIO_LLD_Current_Minimum)) &&
1004 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetOutputCircuit(Pin , oC_GPIO_LLD_OutputCircuit_PushPull)) &&
1005 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetPull(Pin , oC_GPIO_LLD_Pull_Up)) &&
1006 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_FinishConfiguration(Pin))
1009 errorCode = oC_ErrorCode_None;
1013 oC_GPIO_LLD_SetPinsUnused(Pin);
1026 oC_ErrorCode_t oC_SPI_LLD_UnconfigureGeneralChipSelectPin( oC_SPI_Channel_t Channel , oC_Pins_t Pin )
1029 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1032 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel ) &&
1033 oC_AssignErrorCodeIfFalse(&errorCode , oC_GPIO_LLD_IsPinDefined(Pin) , oC_ErrorCode_PinNotDefined)
1036 errorCode = oC_GPIO_LLD_SetPinsUnused(Pin);
1048 oC_ErrorCode_t oC_SPI_LLD_SetGeneralChipSelectState( oC_SPI_Channel_t Channel , oC_Pins_t Pin , oC_SPI_LLD_State_t State )
1050 oC_ErrorCode_t errorCode = oC_ErrorCode_NotImplemented;
1052 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
1053 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel ) &&
1054 oC_AssignErrorCodeIfFalse(&errorCode , oC_GPIO_LLD_IsPinDefined(Pin) , oC_ErrorCode_PinNotDefined) &&
1055 oC_AssignErrorCodeIfFalse(&errorCode , State == oC_SPI_LLD_State_Active ||
1056 State == oC_SPI_LLD_State_NotActive , oC_ErrorCode_StateNotSupported)
1059 oC_GPIO_LLD_SetPinsState(Pin , State);
1061 errorCode = oC_ErrorCode_None;
1072 bool oC_SPI_LLD_IsDmaSupportPossible( oC_SPI_Channel_t Channel )
1074 bool result =
false;
1078 oC_DMA_Channel_t channelRx = 0;
1079 oC_DMA_Channel_t channelTx = 0;
1082 oC_ErrorOccur(oC_DMA_LLD_FindFreeDmaChannelForPeripheralTrade(&channelRx , Channel, oC_Machine_DmaSignalType_RX)) &&
1083 oC_ErrorOccur(oC_DMA_LLD_FindFreeDmaChannelForPeripheralTrade(&channelRx , Channel, oC_Machine_DmaSignalType_TX))
1089 oC_DMA_LLD_IsChannelSupportedOnDmaChannel(channelRx , Channel , oC_Machine_DmaSignalType_RX) &&
1090 oC_DMA_LLD_IsChannelSupportedOnDmaChannel(channelTx , Channel , oC_Machine_DmaSignalType_RX)
1104 oC_ErrorCode_t oC_SPI_LLD_Write( oC_SPI_Channel_t Channel ,
void * Buffer , oC_UInt_t BufferSize , oC_UInt_t ElementSize , oC_IoFlags_t IoFlags )
1106 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1109 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
1110 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
1111 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
1112 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsEnabled(Channel) , oC_ErrorCode_ChannelOperationsNotEnabled) &&
1113 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(Buffer) || IsRom(Buffer) , oC_ErrorCode_WrongAddress) &&
1114 oC_AssignErrorCodeIfFalse(&errorCode , BufferSize != 0 && ElementSize != 0 , oC_ErrorCode_SizeNotCorrect)
1117 void * endBuffer = Buffer + (BufferSize * ElementSize);
1119 for(;Buffer < endBuffer ; Buffer += ElementSize)
1126 while(IsTxFifoFull(Channel));
1131 errorCode = oC_ErrorCode_None;
1142 oC_ErrorCode_t oC_SPI_LLD_Read( oC_SPI_Channel_t Channel ,
void * outBuffer , oC_UInt_t BufferSize , oC_UInt_t ElementSize , oC_IoFlags_t IoFlags )
1144 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1146 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
1147 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
1148 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
1149 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsEnabled(Channel) , oC_ErrorCode_ChannelOperationsNotEnabled) &&
1150 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outBuffer) , oC_ErrorCode_OutputAddressNotInRAM) &&
1151 oC_AssignErrorCodeIfFalse(&errorCode , BufferSize != 0 && ElementSize != 0 , oC_ErrorCode_SizeNotCorrect)
1154 void * endOutBuffer = outBuffer + (BufferSize * ElementSize);
1156 for(
oC_uint32_t byteIndex = ElementSize , savedData = 0; outBuffer < endOutBuffer ; outBuffer++ , byteIndex++)
1158 if(byteIndex == ElementSize)
1165 while(IsRxFifoEmpty(Channel));
1167 savedData = SSIDR(Channel)->DATA;
1178 *(
oC_uint8_t*)outBuffer = savedData >> (byteIndex * 8);
1182 errorCode = oC_ErrorCode_None;
1194 oC_ErrorCode_t oC_SPI_LLD_WriteWithDma( oC_SPI_Channel_t Channel ,
void * Buffer , oC_UInt_t Size , oC_UInt_t ElementSize , oC_IoFlags_t IoFlags )
1196 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1197 oC_DMA_Channel_t channel = 0;
1200 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
1201 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
1202 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
1203 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsEnabled(Channel) , oC_ErrorCode_ChannelOperationsNotEnabled) &&
1204 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(Buffer) || IsRom(Buffer) , oC_ErrorCode_WrongAddress) &&
1205 oC_AssignErrorCodeIfFalse(&errorCode , Size != 0 , oC_ErrorCode_SizeNotCorrect) &&
1206 oC_AssignErrorCode(&errorCode , oC_DMA_LLD_FindFreeDmaChannelForPeripheralTrade(&channel,Channel,oC_Machine_DmaSignalType_TX) )
1209 oC_DMA_LLD_PeripheralTradeConfig_t dmaConfig;
1211 dmaConfig.Buffer = (
void*)Buffer;
1212 dmaConfig.BufferSize = Size;
1213 dmaConfig.ElementSize = ElementSize;
1214 dmaConfig.PeripheralChannel = Channel;
1215 dmaConfig.PeripheralData = (
void*)&SSIDR(Channel)->Value;
1216 dmaConfig.Priority = oC_DMA_LLD_Priority_Medium;
1217 dmaConfig.SignalType = oC_Machine_DmaSignalType_TX;
1218 dmaConfig.TransferCompleteEventHandler =
NULL;
1219 dmaConfig.TransmitDirection = oC_DMA_LLD_Direction_Transmit;
1221 SSIDMACTL(Channel)->TXDMAE = 1;
1223 errorCode = oC_DMA_LLD_ConfigurePeripheralTrade(channel,&dmaConfig);
1234 oC_ErrorCode_t oC_SPI_LLD_ReadWithDma( oC_SPI_Channel_t Channel ,
void * outBuffer , oC_UInt_t Size , oC_UInt_t ElementSize , oC_IoFlags_t IoFlags )
1236 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1237 oC_DMA_Channel_t channel = 0;
1240 oC_AssignErrorCodeIfFalse(&errorCode ,
ModuleEnabledFlag ==
true , oC_ErrorCode_ModuleNotStartedYet) &&
1241 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
1242 oC_AssignErrorCodeIfFalse(&errorCode , IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
1243 oC_AssignErrorCodeIfFalse(&errorCode , AreChannelOperationsEnabled(Channel) , oC_ErrorCode_ChannelOperationsNotEnabled) &&
1244 oC_AssignErrorCodeIfFalse(&errorCode , IsRam(outBuffer) , oC_ErrorCode_OutputAddressNotInRAM) &&
1245 oC_AssignErrorCodeIfFalse(&errorCode , Size > 0 , oC_ErrorCode_SizeNotCorrect) &&
1246 oC_AssignErrorCode(&errorCode , oC_DMA_LLD_FindFreeDmaChannelForPeripheralTrade(&channel,Channel,oC_Machine_DmaSignalType_RX) )
1249 oC_DMA_LLD_PeripheralTradeConfig_t dmaConfig;
1251 dmaConfig.Buffer = (
void*)outBuffer;
1252 dmaConfig.BufferSize = Size;
1253 dmaConfig.ElementSize = ElementSize;
1254 dmaConfig.PeripheralChannel = Channel;
1255 dmaConfig.PeripheralData = (
void*)&SSIDR(Channel)->Value;
1256 dmaConfig.Priority = oC_DMA_LLD_Priority_Medium;
1257 dmaConfig.SignalType = oC_Machine_DmaSignalType_RX;
1258 dmaConfig.TransferCompleteEventHandler =
NULL;
1259 dmaConfig.TransmitDirection = oC_DMA_LLD_Direction_Receive;
1261 SSIDMACTL(Channel)->RXDMAE = 1;
1263 errorCode = oC_DMA_LLD_ConfigurePeripheralTrade(channel,&dmaConfig);
1269 #undef _________________________________________FUNCTIONS_SECTION__________________________________________________________________________ 1271 #define ______________________________________LOCAL_FUNCTIONS_SECTION_______________________________________________________________________ 1279 static oC_ErrorCode_t CalculateDivisorsAndWriteRegisters( oC_SPI_Channel_t Channel ,
oC_Frequency_t Frequency ,
oC_Frequency_t AcceptableDifference )
1281 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1285 oC_Frequency_t minimumFrequency = oC_MACHINE_SPI_MINIMUM_TRANSMISION_FREQUENCY;
1286 oC_Frequency_t maximumFrequency = (oC_MACHINE_SPI_MAXIMUM_TRANSMISION_FREQUENCY <= (systemClockFrequency / 2)) ?
1287 oC_MACHINE_SPI_MAXIMUM_TRANSMISION_FREQUENCY : (systemClockFrequency / 2);
1292 oC_uint16_t frequencyRatio = systemClockFrequency / (Frequency);
1296 errorCode = oC_ErrorCode_FrequencyNotPossible;
1300 (bool)(frequencyRatio / CPSDVSR - 1) ?
1301 ( SCR=0 ) : ( SCR = frequencyRatio / CPSDVSR - 1 );
1303 calculatedFrequency = systemClockFrequency / CPSDVSR * (1 + SCR);
1305 if( (
oC_ABS(calculatedFrequency,Frequency) > AcceptableDifference ) || (calculatedFrequency > maximumFrequency) )
1311 if( (calculatedFrequency >= minimumFrequency) )
1313 SSICPSR(Channel)->CPSDVSR = CPSDVSR;
1314 SSICR0(Channel)->SCR = SCR;
1316 errorCode = oC_ErrorCode_None;
1326 #undef ______________________________________LOCAL_FUNCTIONS_SECTION__________________________________________________________________________
static bool ModuleEnabledFlag
double oC_Frequency_t
type to store frequency
#define oC_Bits_Mask_U32(FROM, TO)
uint32_t oC_uint32_t
type for 32 bit unsigned integer
The file with LLD interface for the SPI driver.
The file with LLD interface for the MEM driver.
uint16_t oC_uint16_t
type for 16 bit unsigned integer
uint8_t oC_uint8_t
type for 8 bit unsigned integer
oC_Frequency_t oC_CLOCK_LLD_GetClockFrequency(void)
returns frequency of the system clock
Something is powered off.
The file with LLD interface for the CLOCK driver.
oC_Channel_t
stores machine channel
#define oC_Channel_IsCorrect(MODULE_NAME, Channel)
checks if channel is correct
static bool oC_Bits_AreBitsClearU32(uint32_t BitMask, uint32_t BitsToCheck)
checks if all bits in field are clear
#define oC_Channel_FromIndex(MODULE_NAME, ChannelIndex)
returns channel according to index in module
#define oC_ModuleChannel_NumberOfElements(MODULE_NAME)
Number of elements in module channel.
The file with functions for the bits operation.
Static array definitions.
The file with interface for the machine module.
static oC_Power_t oC_Machine_GetPowerStateForChannel(oC_Channel_t Channel)
returns power state for channel
#define oC_Channel_ToIndex(MODULE_NAME, Channel)
returns index in module according to channel
static uint32_t oC_Bits_SetBitU32(uint32_t *outVariable, uint8_t BitIndex)
sets bit in the variable
The file with LLD interface for the DMA driver.
static bool oC_Machine_SetPowerStateForChannel(oC_Channel_t Channel, oC_Power_t Power)
configures power state for machine channel
oC_Power_t
stores registers power state
bool oC_MEM_LLD_IsRamAddress(const void *Address)
checks if the pointer is in ram section
#define NULL
pointer to a zero
static uint32_t oC_Bits_ClearBitU32(uint32_t *outVariable, uint8_t BitIndex)
clear selected bit