void exDio_SetPinDirection(uint32_t channelId,Port_PinDirectionType Direction) { uint8_t portDir; uint8_t bit; if(channelId < Port_PIN_NUM) { portDir = Dio_Reg.Direction[DIO_GET_PORT_FROM_CHANNEL_ID(channelId)]; bit = DIO_GET_BIT_FROM_CHANNEL_ID(channelId); if(PORT_PIN_IN == Direction) { portDir &= ~bit; } else { portDir |= bit; } Dio_Reg.Direction[DIO_GET_PORT_FROM_CHANNEL_ID(channelId)] = portDir; } }
void Dio_WriteChannel(Dio_ChannelType channelId, Dio_LevelType level) { VALIDATE( DioGlobal.InitRun, DIO_WRITECHANNEL_ID, DIO_E_UNINIT ); /** @req SWS_Dio_00074 */ VALIDATE( IS_VALID_CHANNEL(channelId), DIO_WRITECHANNEL_ID, DIO_E_PARAM_INVALID_CHANNEL_ID); Dio_PortLevelType portVal = GPIO_ReadOutputData(GPIO_ports[DIO_GET_PORT_FROM_CHANNEL_ID(channelId)]); Dio_PortLevelType bit = DIO_GET_BIT_FROM_CHANNEL_ID(channelId); if(level == STD_HIGH){ portVal |= bit; }else{ portVal &= ~bit; } Dio_WritePort(DIO_GET_PORT_FROM_CHANNEL_ID(channelId), portVal); return; }
void Dio_WriteChannel(Dio_ChannelType channelId, Dio_LevelType level) { VALIDATE_CHANNEL(channelId, DIO_WRITECHANNEL_ID); Dio_PortLevelType portVal = Dio_ReadPort(DIO_GET_PORT_FROM_CHANNEL_ID(channelId)); Dio_PortLevelType bit = DIO_GET_BIT_FROM_CHANNEL_ID(channelId); if(level == STD_HIGH){ portVal |= bit; } else { portVal &= ~bit; } Dio_WritePort(DIO_GET_PORT_FROM_CHANNEL_ID(channelId), portVal); #if ( DIO_DEV_ERROR_DETECT == STD_ON ) cleanup: #endif return; }
Dio_LevelType Dio_ReadChannel(Dio_ChannelType channelId) { Dio_LevelType level; VALIDATE_RV( DioGlobal.InitRun, DIO_READCHANNEL_ID, DIO_E_UNINIT, (Dio_LevelType)0 ); /** @req SWS_Dio_00074 */ VALIDATE_RV( IS_VALID_CHANNEL(channelId), DIO_READCHANNEL_ID, DIO_E_PARAM_INVALID_CHANNEL_ID, (Dio_LevelType)0 ); Dio_PortLevelType portVal = Dio_ReadPort(DIO_GET_PORT_FROM_CHANNEL_ID(channelId)); Dio_PortLevelType bit = DIO_GET_BIT_FROM_CHANNEL_ID(channelId); if ((portVal & bit) != STD_LOW){ level = STD_HIGH; } else{ level = STD_LOW; } return (level); }
Dio_LevelType Dio_ReadChannel(Dio_ChannelType channelId) { Dio_LevelType level; VALIDATE_CHANNEL(channelId, DIO_READCHANNEL_ID); Dio_PortLevelType portVal = Dio_ReadPort(DIO_GET_PORT_FROM_CHANNEL_ID(channelId)); Dio_PortLevelType bit = DIO_GET_BIT_FROM_CHANNEL_ID(channelId); if ((portVal & bit) != STD_LOW){ level = STD_HIGH; } else { level = STD_LOW; } #if ( DIO_DEV_ERROR_DETECT == STD_ON ) cleanup: #endif return (level); }