38 #ifndef SYSTEM_PORTABLE_INC_OC_PINS_H_ 39 #define SYSTEM_PORTABLE_INC_OC_PINS_H_ 42 #include <oc_pins_defs.h> 46 #include <oc_pinsmap.h> 49 #if !oC_Channel_IsModuleDefined(GPIO) 50 #error GPIO module is not defined 58 #define _________________________________________MACROS_SECTION_____________________________________________________________________________ 75 #define oC_ModulePin_IsModuleDefined(MODULE_NAME) defined(oC_MODULE_PINS_##MODULE_NAME) 89 #define oC_ModulePinFunctions_IsModuleDefined(MODULE_NAME) defined(oC_MODULE_PIN_FUNCTIONS_##MODULE_NAME) 106 #define oC_Pin_(PIN_NAME,...) oC_1WORD_FROM_2(oC_Pin_ , PIN_NAME) 114 #define oC_PinIndex_(PIN_NAME,...) oC_1WORD_FROM_2(oC_PinIndex_ , PIN_NAME) 122 #define oC_ModulePinIndex_(CHANNEL_NAME,PIN_FUNCTION,PIN_NAME,DIGITAL_VALUE) oC_1WORD_FROM_8( oC_ModulePinIndex_ , CHANNEL_NAME , _ , PIN_FUNCTION , _ , PIN_NAME , _ , DIGITAL_VALUE ) 130 #define oC_PinFunctionIndex_(PIN_FUNCTION) oC_1WORD_FROM_2(oC_PinFunctionIndex_ , PIN_FUNCTION) 139 #define oC_ModulePinFunction_(MODULE_NAME,PIN_FUNCTION) oC_1WORD_FROM_4(oC_,MODULE_NAME,_PinFunction_ , PIN_FUNCTION ) 150 #define oC_ModulePin_(MODULE_NAME,CHANNEL_NAME,PIN_FUNCTION,PIN_NAME,DIGITAL_VALUE) oC_1WORD_FROM_8(oC_ , MODULE_NAME, _Pin_ , CHANNEL_NAME , PIN_FUNCTION,PIN_NAME,_,DIGITAL_VALUE) 162 #define oC_ModulePinType_(MODULE_NAME) oC_1WORD_FROM_3(oC_,MODULE_NAME,_Pin_t) 176 #define oC_PinsInPortMask ( (1<<(oC_PORT_WIDTH)) - 1 ) 185 #define oC_PinFunctionMask ( (1<<(oC_MODULE_PIN_FUNCTION_WIDTH)) - 1 ) 195 #define oC_PinAlternateNumberMask ( (1<<(oC_ALTERNATE_NUMBER_FIELD_WIDTH)) - 1 ) 203 #define oC_Pin_PinsInPortMaskWidth (oC_PORT_WIDTH) 210 #define oC_Pin_ChannelMaskWidth (oC_CHANNEL_MASK_WIDTH) 217 #define oC_Pin_MaskWidth ((oC_Pin_PinsInPortMaskWidth) + (oC_Pin_ChannelMaskWidth)) 225 #define oC_Pin_PinsInPortMaskStartBit (0) 232 #define oC_Pin_ChannelMaskStartBit ((oC_Pin_PinsInPortMaskWidth) + (oC_Pin_PinsInPortMaskStartBit)) 239 #define oC_Pin_PinsInPortMask ((oC_PinsInPortMask) << (oC_Pin_PinsInPortMaskStartBit)) 246 #define oC_Pin_ChannelMask ((oC_ChannelMask) << (oC_Pin_ChannelMaskStartBit) ) 253 #define oC_Pin_Mask ( (1<<(oC_Pin_MaskWidth)) - 1 ) 264 #define oC_Make_PinFunctionsForModule(MODULE_NAME) oC_MODULE_PIN_FUNCTIONS_(MODULE_NAME)(MAKE_PIN_FUNCTION) 273 #define oC_Make_PinFunctionForModule(PIN_FUNCTION,...) oC_ModulePinFunction_(MODULE_NAME,PIN_FUNCTION) = oC_PinFunctionIndex_(PIN_FUNCTION) , 282 #define oC_Make_ModulePinForModule( PIN_NAME , CHANNEL_NAME , PIN_FUNCTION , ALTERNATE_FUNCTION , ... ) \ 283 oC_ModulePin_(MODULE_NAME,CHANNEL_NAME,PIN_FUNCTION,PIN_NAME,ALTERNATE_FUNCTION) = oC_ModulePinIndex_(CHANNEL_NAME,PIN_FUNCTION,PIN_NAME,ALTERNATE_FUNCTION), 298 #define oC_Pin_GetPinsInPort(Pin) ( ((Pin) & (oC_Pin_PinsInPortMask)) >> oC_Pin_PinsInPortMaskStartBit ) 312 #define oC_Pin_GetChannel(Pin) ( ((Pin) & (oC_Pin_ChannelMask)) >> oC_Pin_ChannelMaskStartBit ) 324 #define oC_Pin_GetPort(Pin) oC_Pin_GetChannel(Pin) 339 #define oC_Pin_Make(Port,PinsInPort) \ 340 oC_Bits_ValueWithMask( PinsInPort , oC_Pin_PinsInPortMaskStartBit, oC_Pin_PinsInPortMask) | \ 341 oC_Bits_ValueWithMask( Port , oC_Pin_ChannelMaskStartBit, oC_Pin_ChannelMask) \ 359 #define oC_Pins_ToSinglePin(Pins,PinIndex) ( ((Pins) & ((1<<PinIndex)<<oC_Pin_PinsInPortMaskStartBit)) | ((Pins) & oC_Pin_ChannelMask) ) 369 #define oC_ModulePin_GetData(ModulePin) (&oC_ModulePinsData[ModulePin]) 382 #define oC_ModulePin_GetPin(ModulePin) oC_ModulePin_GetData(ModulePin)->Pin 397 #define oC_ModulePin_GetPinFunction(ModulePin) oC_ModulePin_GetData(ModulePin)->PinFunction 411 #define oC_ModulePin_GetChannel(ModulePin) oC_ModulePin_GetData(ModulePin)->Channel 424 #define oC_ModulePin_GetAlternateNumber(ModulePin) oC_ModulePin_GetData(ModulePin)->AlternateNumber 439 #define oC_ModulePinFunction_DefineType \ 442 oC_MODULE_PIN_FUNCTIONS_(MODULE_NAME)(oC_Make_PinFunctionForModule) \ 443 oC_Make_PinFunctionForModule(NumberOfElements)\ 444 } oC_ModulePinFunction_(MODULE_NAME,t) 463 #define oC_ModulePin_DefineType \ 466 oC_MODULE_PINS_(MODULE_NAME)(oC_Make_ModulePinForModule) \ 467 } oC_ModulePinType_(MODULE_NAME) 485 #define oC_Pin_ForeachDefined(PinVariableName) oC_ARRAY_FOREACH_IN_ARRAY(oC_DefinedPins , PinVariableName) 505 #define oC_ModulePin_ForeachDefined(PinVariableName) oC_ARRAY_FOREACH_IN_ARRAY(oC_ModulePinsData , PinVariableName) 507 #undef _________________________________________MACROS_SECTION_____________________________________________________________________________ 515 #define _________________________________________TYPES_SECTION______________________________________________________________________________ 534 #define MAKE_CFG_PIN(USER_PIN_NAME , PIN_NAME) oC_Pin_(USER_PIN_NAME) = oC_Pin_(PIN_NAME) , 535 #define MAKE_PIN(BASE_ADDRESS_NAME , PIN_NAME , BIT_INDEX , PIN_NUMBER) \ 536 oC_Pin_(PIN_NAME) = oC_Pin_Make(oC_Channel_(BASE_ADDRESS_NAME) , 1 << BIT_INDEX) , 538 oC_PINS_LIST(MAKE_PIN)
539 oC_CFG_PINS(MAKE_CFG_PIN)
552 #define MAKE_PIN(BASE_ADDRESS_NAME , PIN_NAME , BIT_INDEX , PIN_NUMBER) \ 553 oC_PinIndex_(PIN_NAME) , 554 oC_PINS_LIST(MAKE_PIN)
555 oC_PinIndex_NumberOfElements
567 #define MAKE_MODULE_PIN( PIN_NAME , CHANNEL_NAME , PIN_FUNCTION , ALTERNATE_FUNCTION ) \ 568 oC_ModulePinIndex_(CHANNEL_NAME,PIN_FUNCTION,PIN_NAME,ALTERNATE_FUNCTION) , 569 #define MAKE_MODULE(MODULE_NAME) oC_MODULE_PINS_(MODULE_NAME)(MAKE_MODULE_PIN) 570 oC_MODULES_PINS_LIST(MAKE_MODULE)
572 #undef MAKE_MODULE_PIN 573 oC_ModulePinIndex_NumberOfElements
574 } oC_ModulePinIndex_t;
584 #define MAKE_MODULE_PIN_FUNCTION( PIN_FUNCTION ) \ 585 oC_PinFunctionIndex_(PIN_FUNCTION) , 586 #define MAKE_MODULE(MODULE_NAME) oC_MODULE_PIN_FUNCTIONS_(MODULE_NAME)(MAKE_MODULE_PIN_FUNCTION) 587 oC_MODULES_PINS_LIST(MAKE_MODULE)
589 #undef MAKE_MODULE_PIN_FUNCTION 590 oC_PinFunctionIndex_NumberOfElements
591 } oC_PinFunctionIndex_t;
602 typedef oC_Pin_t oC_Pins_t;
624 #if oC_PORT_WIDTH <= 8 638 typedef uint8_t oC_PinsInPort_t;
639 #elif oC_PORT_WIDTH <= 16 653 typedef uint16_t oC_PinsInPort_t;
654 #elif oC_PORT_WIDTH <= 32 668 typedef uint32_t oC_PinsInPort_t;
669 #elif oC_PORT_WIDTH <= 64 683 typedef uint64_t oC_PinsInPort_t;
685 # error oC_PORT_WIDTH is too big! (max 64) 688 #if oC_ALTERNATE_NUMBER_FIELD_WIDTH <= 8 698 typedef uint8_t oC_PinAlternateNumber_t;
699 #elif oC_ALTERNATE_NUMBER_FIELD_WIDTH <= 16 709 typedef uint16_t oC_PinAlternateNumber_t;
710 #elif oC_ALTERNATE_NUMBER_FIELD_WIDTH <= 32 720 typedef uint32_t oC_PinAlternateNumber_t;
721 #elif oC_ALTERNATE_NUMBER_FIELD_WIDTH <= 64 731 typedef uint64_t oC_PinAlternateNumber_t;
733 # error oC_ALTERNATE_NUMBER_FIELD_WIDTH is too big! (max 64) 736 #if oC_MODULE_PIN_FUNCTION_WIDTH <= 8 743 typedef uint8_t oC_PinFunction_t;
744 #elif oC_MODULE_PIN_FUNCTION_WIDTH <= 16 751 typedef uint16_t oC_PinFunction_t;
752 #elif oC_MODULE_PIN_FUNCTION_WIDTH <= 32 759 typedef uint32_t oC_PinFunction_t;
760 #elif oC_MODULE_PIN_FUNCTION_WIDTH <= 64 767 typedef uint64_t oC_PinFunction_t;
769 # error oC_MODULE_PIN_FUNCTION_WIDTH is too big! (max 64) 782 typedef oC_PinsInPort_t oC_PinsMask_t;
794 } oC_DefinedPinData_t;
805 oC_PinAlternateNumber_t AlternateNumber;
807 oC_PinFunction_t PinFunction;
808 oC_ModulePinIndex_t ModulePinIndex;
809 } oC_ModulePinData_t;
811 #undef _________________________________________TYPES_SECTION______________________________________________________________________________ 819 #define _________________________________________VARIABLES_SECTION__________________________________________________________________________ 829 extern const oC_DefinedPinData_t oC_DefinedPins[oC_PinIndex_NumberOfElements];
839 extern const oC_ModulePinData_t oC_ModulePinsData[oC_ModulePinIndex_NumberOfElements];
841 #undef _________________________________________VARIABLES_SECTION__________________________________________________________________________ Contains macros for creating one word from more words in macros.
oC_Channel_t
stores machine channel
The file with functions for the bits operation.
Static array definitions.
The file with interface for Channel module.
Interface for Machine Base Addresses (BA) module.