27 #include <oc_uart_lld.h> 30 #include <oc_gpio_mslld.h> 45 #define _________________________________________MACROS_SECTION_____________________________________________________________________________ 47 #define USE_INTERRUPTS_FOR_TX false 48 #define SOFTWARE_RING_COUNT 10 49 #define IsRam(Address) (oC_LSF_IsRamAddress(Address) || oC_LSF_IsExternalAddress(Address)) 50 #define IsRom(Address) oC_LSF_IsRomAddress(Address) 51 #define IsChannelCorrect(Channel) oC_Channel_IsCorrect(UART,Channel) 52 #define IsChannelPoweredOn(Channel) (oC_Machine_GetPowerStateForChannel(Channel) == oC_Power_On) 53 #define AreOperationsDisabled(Channel) (USARTx_CR1(Channel)->UE == 0) 54 #define AreOperationsEnabled(Channel) (USARTx_CR1(Channel)->UE == 1) 55 #define USARTx_CR1(Channel) oC_Machine_Register(Channel , USARTx_CR1) 56 #define USARTx_CR2(Channel) oC_Machine_Register(Channel , USARTx_CR2) 57 #define USARTx_CR3(Channel) oC_Machine_Register(Channel , USARTx_CR3) 58 #define USARTx_BRR(Channel) oC_Machine_Register(Channel , USARTx_BRR) 59 #define USARTx_SR(Channel) oC_Machine_Register(Channel , USARTx_SR) 60 #define USARTx_DR(Channel) oC_Machine_Register(Channel , USARTx_DR) 61 #define USARTx_GPTR(Channel) oC_Machine_Register(Channel , USARTx_GPTR) 62 #define TransmitDataMovedToFifo(Channel) (USARTx_SR(Channel)->TXE == 1) 63 #define ReceiveDataAvailable(Channel) (USARTx_SR(Channel)->RXNE == 1) 64 #define RCC_DCKCFGR oC_Register(RCC,RCC_DCKCFGR) 65 #define RxRing(Channel) SoftwareRxRings[oC_Channel_ToIndex(UART,Channel)] 66 #define IsSoftwareRxRingEmpty(Channel) (RxRing(Channel).Counter == 0) 67 #define IsSoftwareRxRingFull(Channel) (RxRing(Channel).Counter == SOFTWARE_RING_COUNT) 68 #define TxRing(Channel) SoftwareTxRings[oC_Channel_ToIndex(UART,Channel)] 69 #define IsSoftwareTxRingEmpty(Channel) (TxRing(Channel).Counter == 0) 70 #define IsSoftwareTxRingFull(Channel) (TxRing(Channel).Counter == SOFTWARE_RING_COUNT) 73 #undef _________________________________________MACROS_SECTION_____________________________________________________________________________ 80 #define _________________________________________TYPES_SECTION______________________________________________________________________________ 84 uint16_t Buffer[SOFTWARE_RING_COUNT];
90 #undef _________________________________________TYPES_SECTION______________________________________________________________________________ 97 #define _________________________________________LOCAL_PROTOTYPES_SECTION___________________________________________________________________ 103 #undef _________________________________________LOCAL_PROTOTYPES_SECTION___________________________________________________________________ 111 #define _________________________________________VARIABLES_SECTION__________________________________________________________________________ 113 static oC_UART_LLD_Interrupt_t RxNotEmptyHandler =
NULL;
114 static oC_UART_LLD_Interrupt_t TxNotFullHandler =
NULL;
117 #if oC_ModuleChannel_NumberOfElements(UART) <= 8 118 static uint8_t UsedChannels = 0;
119 #elif oC_ModuleChannel_NumberOfElements(UART) <= 16 120 static uint16_t UsedChannels = 0;
121 #elif oC_ModuleChannel_NumberOfElements(UART) <= 32 122 static uint32_t UsedChannels = 0;
123 #elif oC_ModuleChannel_NumberOfElements(UART) <= 64 124 static uint64_t UsedChannels = 0;
126 # error Number of UART channels is too big (max 64) 129 #undef _________________________________________VARIABLES_SECTION__________________________________________________________________________ 136 #define _________________________________________FUNCTIONS_SECTION__________________________________________________________________________ 144 bool oC_UART_LLD_IsChannelCorrect( oC_UART_Channel_t Channel )
155 bool oC_UART_LLD_IsChannelIndexCorrect( oC_UART_LLD_ChannelIndex_t ChannelIndex )
166 oC_UART_LLD_ChannelIndex_t oC_UART_LLD_ChannelToChannelIndex( oC_UART_Channel_t Channel )
177 oC_UART_Channel_t oC_UART_LLD_ChannelIndexToChannel( oC_UART_LLD_ChannelIndex_t Channel )
188 oC_UART_Channel_t oC_UART_LLD_GetChannelOfModulePin( oC_UART_Pin_t ModulePin )
190 return oC_ModulePin_GetChannel(ModulePin);
199 oC_ErrorCode_t oC_UART_LLD_TurnOnDriver(
void )
201 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
208 errorCode = oC_ErrorCode_None;
209 RxNotEmptyHandler =
NULL;
210 TxNotFullHandler =
NULL;
213 memset(SoftwareRxRings,0,
sizeof(SoftwareRxRings));
214 memset(SoftwareTxRings,0,
sizeof(SoftwareTxRings));
228 oC_ErrorCode_t oC_UART_LLD_TurnOffDriver(
void )
230 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
237 errorCode = oC_ErrorCode_None;
251 oC_ErrorCode_t oC_UART_LLD_SetDriverInterruptHandlers( oC_UART_LLD_Interrupt_t RxNotEmpty , oC_UART_LLD_Interrupt_t TxNotFull)
253 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
260 ErrorCondition( IsRam(RxNotEmpty) || IsRom(RxNotEmpty) , oC_ErrorCode_WrongEventHandlerAddress) &&
261 ErrorCondition( RxNotEmptyHandler ==
NULL , oC_ErrorCode_InterruptHandlerAlreadySet) &&
262 ErrorCondition( IsRam(TxNotFull) || IsRom(TxNotFull) , oC_ErrorCode_WrongEventHandlerAddress) &&
263 ErrorCondition( TxNotFullHandler ==
NULL , oC_ErrorCode_InterruptHandlerAlreadySet)
266 RxNotEmptyHandler = RxNotEmpty;
267 TxNotFullHandler = TxNotFull;
268 errorCode = oC_ErrorCode_None;
283 oC_ErrorCode_t oC_UART_LLD_SetPower( oC_UART_Channel_t Channel ,
oC_Power_t Power )
285 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
292 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
295 ErrorCondition( oC_Channel_EnableInterrupt(Channel,PeripheralInterrupt) , oC_ErrorCode_CannotEnableInterrupt)
304 errorCode = oC_ErrorCode_None;
319 oC_ErrorCode_t oC_UART_LLD_ReadPower( oC_UART_Channel_t Channel ,
oC_Power_t * outPower )
321 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
328 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
329 ErrorCondition( IsRam(outPower) , oC_ErrorCode_OutputAddressNotInRAM)
333 errorCode = oC_ErrorCode_None;
347 oC_ErrorCode_t oC_UART_LLD_DisableOperations( oC_UART_Channel_t Channel )
349 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
356 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
357 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn)
360 USARTx_CR1(Channel)->UE = 0;
361 errorCode = oC_ErrorCode_None;
376 oC_ErrorCode_t oC_UART_LLD_EnableOperations( oC_UART_Channel_t Channel )
378 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
385 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
386 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn)
389 USARTx_CR1(Channel)->UE = 1;
390 USARTx_CR1(Channel)->TE = 1;
391 USARTx_CR1(Channel)->RE = 1;
392 USARTx_CR1(Channel)->RXNEIE = 1;
393 errorCode = oC_ErrorCode_None;
408 oC_ErrorCode_t oC_UART_LLD_RestoreDefaultStateOnChannel( oC_UART_Channel_t Channel )
410 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
417 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
421 errorCode = oC_ErrorCode_None;
436 oC_ErrorCode_t oC_UART_LLD_SetWordLength( oC_UART_Channel_t Channel , oC_UART_LLD_WordLength_t WordLength )
438 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
445 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
446 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
447 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
452 case oC_UART_LLD_WordLength_5Bits:
453 errorCode = oC_ErrorCode_NotSupportedOnTargetMachine;
455 case oC_UART_LLD_WordLength_6Bits:
456 errorCode = oC_ErrorCode_NotSupportedOnTargetMachine;
458 case oC_UART_LLD_WordLength_7Bits:
459 errorCode = oC_ErrorCode_NotSupportedOnTargetMachine;
461 case oC_UART_LLD_WordLength_8Bits:
462 USARTx_CR1(Channel)->M = 0;
463 errorCode = oC_ErrorCode_None;
465 case oC_UART_LLD_WordLength_9Bits:
466 USARTx_CR1(Channel)->M = 1;
474 errorCode = oC_ErrorCode_ProhibitedByArchitecture;
477 errorCode = oC_ErrorCode_WordLengthNotCorrect;
494 oC_ErrorCode_t oC_UART_LLD_ReadWordLength( oC_UART_Channel_t Channel , oC_UART_LLD_WordLength_t * outWordLength )
496 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
501 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
502 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
503 ErrorCondition( IsRam(outWordLength) , oC_ErrorCode_OutputAddressNotInRAM)
506 if( USARTx_CR1(Channel)->M == 0 )
508 *outWordLength = oC_UART_LLD_WordLength_8Bits;
509 errorCode = oC_ErrorCode_None;
511 else if( USARTx_CR1(Channel)->M == 1 )
513 *outWordLength = oC_UART_LLD_WordLength_9Bits;
514 errorCode = oC_ErrorCode_None;
518 errorCode = oC_ErrorCode_MachineCanBeDamaged;
532 oC_ErrorCode_t oC_UART_LLD_SetBitRate( oC_UART_Channel_t Channel , uint32_t BitRate )
534 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
541 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
542 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
543 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled) &&
544 ErrorCondition( BitRate > 0 , oC_ErrorCode_BitRateNotCorrect)
548 uint32_t usartDiv = (clockFrequency / BitRate);
550 if(usartDiv <= UINT16_MAX)
552 USARTx_CR1(Channel)->OVER8 = 0;
553 USARTx_BRR(Channel)->BRR = usartDiv;
554 errorCode = oC_ErrorCode_None;
558 errorCode = oC_ErrorCode_BitRateNotSupported;
574 oC_ErrorCode_t oC_UART_LLD_ReadBitRate( oC_UART_Channel_t Channel , uint32_t * outBitRate )
576 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
581 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
582 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
583 ErrorCondition( IsRam(outBitRate) , oC_ErrorCode_OutputAddressNotInRAM)
587 uint32_t usartDiv = USARTx_BRR(Channel)->BRR;
591 *outBitRate = clockFrequency / usartDiv;
598 errorCode = oC_ErrorCode_None;
611 oC_ErrorCode_t oC_UART_LLD_SetParity( oC_UART_Channel_t Channel , oC_UART_LLD_Parity_t Parity )
613 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
620 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
621 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
622 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
627 case oC_UART_LLD_Parity_None:
628 USARTx_CR1(Channel)->PCE = 0;
629 errorCode = oC_ErrorCode_None;
631 case oC_UART_LLD_Parity_Even:
632 USARTx_CR1(Channel)->PCE = 1;
633 USARTx_CR1(Channel)->PS = 0;
634 errorCode = oC_ErrorCode_None;
636 case oC_UART_LLD_Parity_Odd:
637 USARTx_CR1(Channel)->PCE = 1;
638 USARTx_CR1(Channel)->PS = 1;
639 errorCode = oC_ErrorCode_None;
642 errorCode = oC_ErrorCode_ParityNotCorrect;
659 oC_ErrorCode_t oC_UART_LLD_ReadParity( oC_UART_Channel_t Channel , oC_UART_LLD_Parity_t * outParity )
661 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
666 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
667 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
668 ErrorCondition( IsRam(outParity) , oC_ErrorCode_OutputAddressNotInRAM)
671 if(USARTx_CR1(Channel)->PCE == 0)
673 *outParity = oC_UART_LLD_Parity_None;
674 errorCode = oC_ErrorCode_None;
676 else if(USARTx_CR1(Channel)->PS == 0)
678 *outParity = oC_UART_LLD_Parity_Even;
679 errorCode = oC_ErrorCode_None;
681 else if(USARTx_CR1(Channel)->PS == 1)
683 *outParity = oC_UART_LLD_Parity_Odd;
684 errorCode = oC_ErrorCode_None;
688 errorCode = oC_ErrorCode_MachineCanBeDamaged;
702 oC_ErrorCode_t oC_UART_LLD_SetStopBit( oC_UART_Channel_t Channel , oC_UART_LLD_StopBit_t StopBit )
704 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
711 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
712 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
713 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
719 case oC_UART_LLD_StopBit_0p5Bit:
720 USARTx_CR2(Channel)->STOP = 1;
721 errorCode = oC_ErrorCode_None;
723 case oC_UART_LLD_StopBit_1Bit:
724 USARTx_CR2(Channel)->STOP = 0;
725 errorCode = oC_ErrorCode_None;
727 case oC_UART_LLD_StopBit_1p5Bits:
728 USARTx_CR2(Channel)->STOP = 3;
729 errorCode = oC_ErrorCode_None;
731 case oC_UART_LLD_StopBit_2Bits:
732 USARTx_CR2(Channel)->STOP = 2;
733 errorCode = oC_ErrorCode_None;
736 errorCode = oC_ErrorCode_StopBitNotSupported;
754 oC_ErrorCode_t oC_UART_LLD_ReadStopBit( oC_UART_Channel_t Channel , oC_UART_LLD_StopBit_t * outStopBit )
756 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
761 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
762 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
763 ErrorCondition( IsRam(outStopBit) , oC_ErrorCode_OutputAddressNotInRAM)
766 if(USARTx_CR2(Channel)->STOP == 1)
768 *outStopBit = oC_UART_LLD_StopBit_0p5Bit;
769 errorCode = oC_ErrorCode_None;
771 else if(USARTx_CR2(Channel)->STOP == 0)
773 *outStopBit = oC_UART_LLD_StopBit_1Bit;
774 errorCode = oC_ErrorCode_None;
776 else if(USARTx_CR2(Channel)->STOP == 3)
778 *outStopBit = oC_UART_LLD_StopBit_1p5Bits;
779 errorCode = oC_ErrorCode_None;
781 else if(USARTx_CR2(Channel)->STOP == 2)
783 *outStopBit = oC_UART_LLD_StopBit_2Bits;
784 errorCode = oC_ErrorCode_None;
788 errorCode = oC_ErrorCode_MachineCanBeDamaged;
802 oC_ErrorCode_t oC_UART_LLD_SetBitOrder( oC_UART_Channel_t Channel , oC_UART_LLD_BitOrder_t BitOrder )
804 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
811 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
812 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
813 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
817 errorCode = oC_ErrorCode_None;;
832 oC_ErrorCode_t oC_UART_LLD_ReadBitOrder( oC_UART_Channel_t Channel , oC_UART_LLD_BitOrder_t * outBitOrder )
834 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
839 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
840 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
841 ErrorCondition( IsRam(outBitOrder) , oC_ErrorCode_OutputAddressNotInRAM)
844 *outBitOrder= oC_UART_LLD_BitOrder_LSBFirst;
857 oC_ErrorCode_t oC_UART_LLD_SetInvert( oC_UART_Channel_t Channel , oC_UART_LLD_Invert_t Invert )
859 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
866 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
867 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
868 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)&&
869 ErrorCondition( Invert == oC_UART_LLD_Invert_NotInverted , oC_ErrorCode_InvertNotSupported)
872 errorCode = oC_ErrorCode_None;
887 oC_ErrorCode_t oC_UART_LLD_ReadInvert( oC_UART_Channel_t Channel , oC_UART_LLD_Invert_t * outInvert )
889 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
894 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
895 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
896 ErrorCondition( IsRam(outInvert) , oC_ErrorCode_OutputAddressNotInRAM)
899 *outInvert = oC_UART_LLD_Invert_NotInverted;
900 errorCode = oC_ErrorCode_None;
913 oC_ErrorCode_t oC_UART_LLD_SetLoopback( oC_UART_Channel_t Channel ,
bool Loopback )
915 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
922 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
923 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
924 ErrorCondition( AreOperationsDisabled(Channel) , oC_ErrorCode_ChannelOperationsNotDisabled)
929 errorCode = oC_ErrorCode_None;
933 errorCode = oC_ErrorCode_LoopbackNotSupported;
949 oC_ErrorCode_t oC_UART_LLD_ReadLoopback( oC_UART_Channel_t Channel ,
bool * outLoopback )
951 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
956 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
957 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
958 ErrorCondition( IsRam(outLoopback) , oC_ErrorCode_OutputAddressNotInRAM)
961 *outLoopback =
false;
962 errorCode = oC_ErrorCode_None;
975 oC_ErrorCode_t oC_UART_LLD_ConnectModulePin( oC_UART_Pin_t ModulePin )
977 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
981 oC_UART_Channel_t channel = oC_ModulePin_GetChannel(ModulePin);
982 oC_Pin_t pin = oC_ModulePin_GetPin(ModulePin);
985 ErrorCondition( IsChannelCorrect(channel) , oC_ErrorCode_WrongChannel ) &&
986 ErrorCondition( oC_GPIO_LLD_IsPinDefined(pin) , oC_ErrorCode_PinNotDefined )
994 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_ArePinsUnused(pin,&unused) ) &&
995 ErrorCondition( unused , oC_ErrorCode_PinIsUsed ) &&
996 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetPinsUsed(pin) ) &&
997 oC_AssignErrorCode(&errorCode , oC_GPIO_MSLLD_ConnectModulePin(ModulePin) )
1000 errorCode = oC_ErrorCode_None;
1004 oC_GPIO_LLD_SetPinsUnused(pin);
1020 oC_ErrorCode_t oC_UART_LLD_DisconnectModulePin( oC_UART_Pin_t ModulePin )
1022 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1026 oC_UART_Channel_t channel = oC_ModulePin_GetChannel(ModulePin);
1027 oC_Pin_t pin = oC_ModulePin_GetPin(ModulePin);
1030 ErrorCondition( IsChannelCorrect(channel) , oC_ErrorCode_WrongChannel ) &&
1031 ErrorCondition( oC_GPIO_LLD_IsPinDefined(pin) , oC_ErrorCode_PinNotDefined )
1037 oC_AssignErrorCode(&errorCode , oC_GPIO_LLD_SetPinsUnused(pin) ) &&
1038 oC_AssignErrorCode(&errorCode , oC_GPIO_MSLLD_DisconnectModulePin(ModulePin) )
1041 errorCode = oC_ErrorCode_None;
1057 oC_ErrorCode_t oC_UART_LLD_SetChannelUsed( oC_UART_Channel_t Channel )
1059 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1065 if( ErrorCondition(IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) )
1068 errorCode = oC_ErrorCode_None;
1083 oC_ErrorCode_t oC_UART_LLD_SetChannelUnused( oC_UART_Channel_t Channel )
1085 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1091 if( ErrorCondition(IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) )
1094 errorCode = oC_ErrorCode_None;
1109 bool oC_UART_LLD_IsChannelUsed( oC_UART_Channel_t Channel )
1115 if(IsChannelCorrect(Channel))
1130 oC_ErrorCode_t oC_UART_LLD_ReadModulePinsOfPin( oC_Pin_t Pin , oC_UART_Pin_t * outModulePinsArray , uint32_t * ArraySize , oC_UART_PinFunction_t PinFunction )
1132 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1138 ErrorCondition( oC_GPIO_LLD_IsPinDefined(Pin) , oC_ErrorCode_PinNotDefined) &&
1139 ErrorCondition( IsRam(ArraySize) , oC_ErrorCode_OutputAddressNotInRAM) &&
1140 ErrorCondition(outModulePinsArray ==
NULL || IsRam(outModulePinsArray) , oC_ErrorCode_OutputAddressNotInRAM)
1143 uint32_t foundPins = 0;
1145 errorCode = oC_ErrorCode_None;
1147 oC_ModulePin_ForeachDefined(modulePin)
1149 if(modulePin->Pin == Pin &&
oC_Channel_IsCorrect(UART,modulePin->Channel) && modulePin->PinFunction == PinFunction)
1151 if(outModulePinsArray !=
NULL)
1153 if(foundPins < *ArraySize)
1155 outModulePinsArray[foundPins] = modulePin->ModulePinIndex;
1159 errorCode = oC_ErrorCode_OutputArrayToSmall;
1166 *ArraySize = foundPins;
1175 oC_ErrorCode_t oC_UART_LLD_ClearRxFifo( oC_UART_Channel_t Channel )
1177 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1181 ClearSoftwareRing(&RxRing(Channel));
1182 errorCode = oC_ErrorCode_None;
1194 bool oC_UART_LLD_IsTxFifoFull( oC_UART_Channel_t Channel )
1196 #if USE_INTERRUPTS_FOR_TX 1197 return IsSoftwareTxRingFull(Channel);
1209 bool oC_UART_LLD_IsRxFifoEmpty( oC_UART_Channel_t Channel )
1211 return IsSoftwareRxRingEmpty(Channel);
1220 void oC_UART_LLD_PutData( oC_UART_Channel_t Channel ,
char Data )
1222 #if USE_INTERRUPTS_FOR_TX 1224 USARTx_CR1(Channel)->TCIE = 1;
1226 if(IsSoftwareTxRingEmpty(Channel) && TransmitDataMovedToFifo(Channel))
1228 USARTx_DR(Channel)->DR = Data;
1236 while(TransmitDataMovedToFifo(Channel) !=
true);
1237 USARTx_DR(Channel)->DR = Data;
1247 char oC_UART_LLD_GetData( oC_UART_Channel_t Channel )
1258 oC_ErrorCode_t oC_UART_LLD_WriteWithDma( oC_UART_Channel_t Channel ,
const char * Buffer , oC_UInt_t Size )
1260 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1265 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
1266 ErrorCondition( IsRam(Buffer) || IsRom(Buffer) , oC_ErrorCode_WrongAddress) &&
1267 ErrorCondition( Size > 0 , oC_ErrorCode_SizeNotCorrect) &&
1268 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
1269 ErrorCondition( AreOperationsEnabled(Channel) , oC_ErrorCode_ChannelOperationsNotEnabled)
1272 errorCode = oC_ErrorCode_NotImplemented;
1285 oC_ErrorCode_t oC_UART_LLD_ReadWithDma( oC_UART_Channel_t Channel ,
char * outBuffer , oC_UInt_t Size )
1287 oC_ErrorCode_t errorCode = oC_ErrorCode_ImplementError;
1292 ErrorCondition( IsChannelCorrect(Channel) , oC_ErrorCode_WrongChannel) &&
1293 ErrorCondition( IsRam(outBuffer) , oC_ErrorCode_OutputAddressNotInRAM) &&
1294 ErrorCondition( Size > 0 , oC_ErrorCode_SizeNotCorrect) &&
1295 ErrorCondition( IsChannelPoweredOn(Channel) , oC_ErrorCode_ChannelNotPoweredOn) &&
1296 ErrorCondition( AreOperationsEnabled(Channel) , oC_ErrorCode_ChannelOperationsNotEnabled)
1299 errorCode = oC_ErrorCode_NotImplemented;
1306 #undef _________________________________________FUNCTIONS_SECTION__________________________________________________________________________ 1313 #define _________________________________________LOCAL_FUNCTIONS_SECTION____________________________________________________________________ 1322 if(Ring->Counter >= SOFTWARE_RING_COUNT)
1328 Ring->Buffer[Ring->PutIndex++] = Data;
1331 if(Ring->PutIndex >= SOFTWARE_RING_COUNT)
1344 uint16_t data = 0xFFFF;
1346 if(Ring->Counter > 0)
1349 data = Ring->Buffer[Ring->GetIndex++];
1350 if(Ring->GetIndex >= SOFTWARE_RING_COUNT)
1369 #undef _________________________________________LOCAL_FUNCTIONS_SECTION____________________________________________________________________ 1377 #define _________________________________________INTERRUPTS_SECTION_________________________________________________________________________ 1379 #define MODULE_NAME UART 1380 #define INTERRUPT_TYPE_NAME PeripheralInterrupt 1389 if(USARTx_SR(Channel)->TC == 1)
1391 while(IsSoftwareTxRingEmpty(Channel) ==
false && (TransmitDataMovedToFifo(Channel)))
1396 if(TxNotFullHandler)
1398 TxNotFullHandler(Channel);
1401 if(IsSoftwareTxRingEmpty(Channel))
1403 USARTx_CR1(Channel)->TCIE = 0;
1407 if(USARTx_SR(Channel)->RXNE == 1)
1409 while(ReceiveDataAvailable(Channel))
1414 if(RxNotEmptyHandler)
1416 RxNotEmptyHandler(Channel);
1420 USARTx_SR(Channel)->Value = 0x864;
1423 #undef _________________________________________INTERRUPTS_SECTION_________________________________________________________________________
double oC_Frequency_t
type to store frequency
The file contains definitions for the compiler, that helps to manage errors, etc. ...
The file with interface for LSF module.
The file with LLD interface for the MEM driver.
The file with interface for the module library.
oC_Frequency_t oC_CLOCK_LLD_GetClockFrequency(void)
returns frequency of the system clock
static bool oC_Module_IsTurnedOn(oC_Module_t Module)
checks if the module is turned on
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
#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.
static void oC_Module_TurnOn(oC_Module_t Module)
sets module as turned on
The file with functions for the bits operation.
static void oC_MCS_EnterCriticalSection(void)
Enters to critical section.
Static array definitions.
static void PutToSoftwareRing(SoftwareRing_t *SoftwareRing, oC_Netif_t Netif, oC_Net_Packet_t *Packet)
puts packet to the software ring
static oC_Power_t oC_Machine_GetPowerStateForChannel(oC_Channel_t Channel)
returns power state for channel
static bool oC_Module_TurnOffVerification(oC_ErrorCode_t *outErrorCode, oC_Module_t Module)
verify if module is turned off
static bool oC_MCS_ExitCriticalSection(void)
Exits from critical section.
static bool oC_Module_TurnOnVerification(oC_ErrorCode_t *outErrorCode, oC_Module_t Module)
verify if module is turned on
#define oC_Channel_ToIndex(MODULE_NAME, Channel)
returns index in module according to channel
The file with LLD interface for the DMA driver.
static bool GetFromSoftwareRing(SoftwareRing_t *SoftwareRing, const oC_Net_Address_t *Address, oC_Net_Packet_t *outPacket, oC_Netif_t *outNetif, oC_NetifMan_PacketFilterFunction_t FilterFunction, const void *Parameter)
reads packet from the software ring
#define oC_Channel_InterruptHandler(ChannelVariableName)
creates common interrupt handler for channel
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
The most important interrupt priority, that is possible in the machine.
#define NULL
pointer to a zero
static void oC_Module_TurnOff(oC_Module_t Module)
sets module as turned off