Added analogRead to GPIO
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
#define SHMINGO_HAL_SHAL_ADC_TYPES_H
|
#define SHMINGO_HAL_SHAL_ADC_TYPES_H
|
||||||
|
|
||||||
enum class ADC_Channel : uint32_t {
|
enum class ADC_Channel : uint32_t {
|
||||||
|
CH0 = ADC_CHSELR_CHSEL0,
|
||||||
CH1 = ADC_CHSELR_CHSEL1,
|
CH1 = ADC_CHSELR_CHSEL1,
|
||||||
CH2 = ADC_CHSELR_CHSEL2,
|
CH2 = ADC_CHSELR_CHSEL2,
|
||||||
CH3 = ADC_CHSELR_CHSEL3,
|
CH3 = ADC_CHSELR_CHSEL3,
|
||||||
|
|||||||
@@ -270,6 +270,79 @@ constexpr uint32_t getGPIOPortNumber(const GPIO_Key g){
|
|||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr SHAL_GPIO_Port_Info getGPIOPortInfo(GPIO_Key key){
|
||||||
|
switch(key){
|
||||||
|
case GPIO_Key::A0:
|
||||||
|
case GPIO_Key::B0:
|
||||||
|
case GPIO_Key::C0:
|
||||||
|
return {0,ADC_Channel::CH0};
|
||||||
|
case GPIO_Key::A1:
|
||||||
|
case GPIO_Key::B1:
|
||||||
|
case GPIO_Key::C1:
|
||||||
|
return {1,ADC_Channel::CH1};
|
||||||
|
case GPIO_Key::A2:
|
||||||
|
case GPIO_Key::B2:
|
||||||
|
case GPIO_Key::C2:
|
||||||
|
return {2,ADC_Channel::CH2};
|
||||||
|
case GPIO_Key::A3:
|
||||||
|
case GPIO_Key::B3:
|
||||||
|
case GPIO_Key::C3:
|
||||||
|
return {3,ADC_Channel::CH3};
|
||||||
|
case GPIO_Key::A4:
|
||||||
|
case GPIO_Key::B4:
|
||||||
|
case GPIO_Key::C4:
|
||||||
|
return {4,ADC_Channel::CH4};
|
||||||
|
case GPIO_Key::A5:
|
||||||
|
case GPIO_Key::B5:
|
||||||
|
case GPIO_Key::C5:
|
||||||
|
return {5,ADC_Channel::CH5};
|
||||||
|
case GPIO_Key::A6:
|
||||||
|
case GPIO_Key::B6:
|
||||||
|
case GPIO_Key::C6:
|
||||||
|
return {6,ADC_Channel::CH6};
|
||||||
|
case GPIO_Key::A7:
|
||||||
|
case GPIO_Key::B7:
|
||||||
|
case GPIO_Key::C7:
|
||||||
|
return {7,ADC_Channel::CH7};
|
||||||
|
case GPIO_Key::A8:
|
||||||
|
case GPIO_Key::B8:
|
||||||
|
case GPIO_Key::C8:
|
||||||
|
return {8,ADC_Channel::CH8};
|
||||||
|
case GPIO_Key::A9:
|
||||||
|
case GPIO_Key::B9:
|
||||||
|
case GPIO_Key::C9:
|
||||||
|
return {9,ADC_Channel::CH9};
|
||||||
|
case GPIO_Key::A10:
|
||||||
|
case GPIO_Key::B10:
|
||||||
|
case GPIO_Key::C10:
|
||||||
|
return {10,ADC_Channel::CH10};
|
||||||
|
case GPIO_Key::A11:
|
||||||
|
case GPIO_Key::B11:
|
||||||
|
case GPIO_Key::C11:
|
||||||
|
return {11,ADC_Channel::CH11};
|
||||||
|
case GPIO_Key::A12:
|
||||||
|
case GPIO_Key::B12:
|
||||||
|
case GPIO_Key::C12:
|
||||||
|
return {12,ADC_Channel::CH12};
|
||||||
|
case GPIO_Key::A13:
|
||||||
|
case GPIO_Key::B13:
|
||||||
|
case GPIO_Key::C13:
|
||||||
|
return {13,ADC_Channel::CH13};
|
||||||
|
case GPIO_Key::A14:
|
||||||
|
case GPIO_Key::B14:
|
||||||
|
case GPIO_Key::C14:
|
||||||
|
return {14,ADC_Channel::CH14};
|
||||||
|
case GPIO_Key::A15:
|
||||||
|
case GPIO_Key::B15:
|
||||||
|
case GPIO_Key::C15:
|
||||||
|
return {15,ADC_Channel::CH15};
|
||||||
|
case GPIO_Key::NUM_GPIO:
|
||||||
|
case GPIO_Key::INVALID:
|
||||||
|
return {0,ADC_Channel::CH0};
|
||||||
|
}
|
||||||
|
__builtin_unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //SHMINGO_HAL_SHAL_GPIO_REG_F072XB_H
|
#endif //SHMINGO_HAL_SHAL_GPIO_REG_F072XB_H
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
#include "SHAL_EXTI_CALLBACK.h"
|
#include "SHAL_EXTI_CALLBACK.h"
|
||||||
|
#include "SHAL_ADC.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -26,6 +27,11 @@ public:
|
|||||||
void setHigh();
|
void setHigh();
|
||||||
void setLow();
|
void setLow();
|
||||||
|
|
||||||
|
/// Uses the ADC to read an analog voltage value
|
||||||
|
/// \param sampleTime The amount of clock cycles to use for the ADC
|
||||||
|
/// \return ADC result
|
||||||
|
uint16_t analogRead(ADC_SampleTime sampleTime = ADC_SampleTime::C239);
|
||||||
|
|
||||||
void setPinMode(PinMode mode) volatile;
|
void setPinMode(PinMode mode) volatile;
|
||||||
|
|
||||||
void setAlternateFunction(GPIO_Alternate_Function AF) volatile;
|
void setAlternateFunction(GPIO_Alternate_Function AF) volatile;
|
||||||
@@ -39,6 +45,8 @@ public:
|
|||||||
|
|
||||||
void useAsExternalInterrupt(TriggerMode mode, EXTICallback callback);
|
void useAsExternalInterrupt(TriggerMode mode, EXTICallback callback);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
friend class GPIOManager;
|
friend class GPIOManager;
|
||||||
@@ -60,7 +68,7 @@ private:
|
|||||||
|
|
||||||
#define GET_GPIO(key) GPIOManager::get(key)
|
#define GET_GPIO(key) GPIOManager::get(key)
|
||||||
|
|
||||||
#define GPIO_A
|
#define SET_ANALOGREAD_ADC(x) GPIOManager::setGPIOADC(x)
|
||||||
|
|
||||||
//Manages instances of SHAL_GPIO objects
|
//Manages instances of SHAL_GPIO objects
|
||||||
class GPIOManager{
|
class GPIOManager{
|
||||||
@@ -69,6 +77,9 @@ public:
|
|||||||
|
|
||||||
static SHAL_GPIO& get(GPIO_Key);
|
static SHAL_GPIO& get(GPIO_Key);
|
||||||
|
|
||||||
|
static SHAL_ADC getGPIOADC(){ return m_GPIO_ADC;}
|
||||||
|
|
||||||
|
static void setGPIOADC(SHAL_ADC adc){m_GPIO_ADC = adc;}
|
||||||
|
|
||||||
GPIOManager() = delete;
|
GPIOManager() = delete;
|
||||||
|
|
||||||
@@ -76,6 +87,8 @@ private:
|
|||||||
|
|
||||||
inline static SHAL_GPIO m_gpios[AVAILABLE_PORTS][PINS_PER_PORT] = {{}};
|
inline static SHAL_GPIO m_gpios[AVAILABLE_PORTS][PINS_PER_PORT] = {{}};
|
||||||
|
|
||||||
|
inline static SHAL_ADC m_GPIO_ADC = SHAL_ADC(1);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#define SHAL_GPIO_TYPES_H
|
#define SHAL_GPIO_TYPES_H
|
||||||
|
|
||||||
#include "SHAL_CORE.h"
|
#include "SHAL_CORE.h"
|
||||||
|
#include "SHAL_ADC.h"
|
||||||
|
|
||||||
struct SHAL_EXTIO_Register{
|
struct SHAL_EXTIO_Register{
|
||||||
volatile uint32_t* EXT_ICR;
|
volatile uint32_t* EXT_ICR;
|
||||||
@@ -23,6 +24,11 @@ struct SHAL_Peripheral_Register {
|
|||||||
unsigned long offset;
|
unsigned long offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SHAL_GPIO_Port_Info{
|
||||||
|
uint8_t number;
|
||||||
|
ADC_Channel ADCChannel;
|
||||||
|
};
|
||||||
|
|
||||||
enum class PinMode : uint8_t{
|
enum class PinMode : uint8_t{
|
||||||
INPUT_MODE = 0x00,
|
INPUT_MODE = 0x00,
|
||||||
OUTPUT_MODE = 0x01,
|
OUTPUT_MODE = 0x01,
|
||||||
@@ -67,5 +73,4 @@ enum class TriggerMode : uint8_t{
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //SHMINGO_HAL_SHAL_GPIO_TYPES_H
|
#endif //SHMINGO_HAL_SHAL_GPIO_TYPES_H
|
||||||
|
|||||||
@@ -14,4 +14,6 @@
|
|||||||
#include "SHAL_I2C.h"
|
#include "SHAL_I2C.h"
|
||||||
#include "SHAL_ADC.h"
|
#include "SHAL_ADC.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -107,6 +107,13 @@ void SHAL_GPIO::useAsExternalInterrupt(TriggerMode mode, EXTICallback callback)
|
|||||||
__enable_irq(); //Enable IRQ just in case
|
__enable_irq(); //Enable IRQ just in case
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t SHAL_GPIO::analogRead(ADC_SampleTime sampleTime) {
|
||||||
|
|
||||||
|
ADC_Channel channel = getGPIOPortInfo(m_GPIO_KEY).ADCChannel;
|
||||||
|
|
||||||
|
return GPIOManager::getGPIOADC().singleConvertSingle(channel,sampleTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SHAL_GPIO& GPIOManager::get(GPIO_Key key) {
|
SHAL_GPIO& GPIOManager::get(GPIO_Key key) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user