mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-08-02 06:46:04 +00:00
pw_digital_io_rp2040: Add pull up/down resistors to Rp2040Config
Change-Id: Ia9334962b601825c5502cba21256db1e7a1decb1 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/219731 Reviewed-by: Keir Mierle <keir@google.com> Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com> Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com> Pigweed-Auto-Submit: Anthony DiGirolamo <tonymd@google.com> Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
bfaf596d3e
commit
97438c6e83
|
@ -25,17 +25,13 @@ config("public_includes") {
|
||||||
pw_source_set("pw_digital_io_rp2040") {
|
pw_source_set("pw_digital_io_rp2040") {
|
||||||
public_configs = [ ":public_includes" ]
|
public_configs = [ ":public_includes" ]
|
||||||
public = [ "public/pw_digital_io_rp2040/digital_io.h" ]
|
public = [ "public/pw_digital_io_rp2040/digital_io.h" ]
|
||||||
deps = [
|
|
||||||
"$PICO_ROOT/src/common/pico_base",
|
|
||||||
"$PICO_ROOT/src/common/pico_stdlib",
|
|
||||||
"$PICO_ROOT/src/rp2_common/hardware_gpio",
|
|
||||||
]
|
|
||||||
public_deps = [
|
public_deps = [
|
||||||
|
"$PICO_ROOT/src/common/pico_base",
|
||||||
|
"$PICO_ROOT/src/rp2_common/hardware_gpio",
|
||||||
"$dir_pw_digital_io",
|
"$dir_pw_digital_io",
|
||||||
"$dir_pw_status",
|
"$dir_pw_status",
|
||||||
]
|
]
|
||||||
sources = [ "digital_io.cc" ]
|
sources = [ "digital_io.cc" ]
|
||||||
remove_configs = [ "$dir_pw_build:strict_warnings" ]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pw_test("digital_io_test") {
|
pw_test("digital_io_test") {
|
||||||
|
|
|
@ -30,6 +30,7 @@ Status Rp2040DigitalIn::DoEnable(bool enable) {
|
||||||
|
|
||||||
gpio_init(config_.pin);
|
gpio_init(config_.pin);
|
||||||
gpio_set_dir(config_.pin, GPIO_IN);
|
gpio_set_dir(config_.pin, GPIO_IN);
|
||||||
|
gpio_set_pulls(config_.pin, config_.enable_pull_up, config_.enable_pull_down);
|
||||||
return OkStatus();
|
return OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,6 +55,7 @@ Status Rp2040DigitalInOut::DoEnable(bool enable) {
|
||||||
|
|
||||||
gpio_init(config_.pin);
|
gpio_init(config_.pin);
|
||||||
gpio_set_dir(config_.pin, GPIO_OUT);
|
gpio_set_dir(config_.pin, GPIO_OUT);
|
||||||
|
gpio_set_pulls(config_.pin, config_.enable_pull_up, config_.enable_pull_down);
|
||||||
return OkStatus();
|
return OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,11 @@ Example code to use GPIO pins:
|
||||||
.pin = 16,
|
.pin = 16,
|
||||||
.polarity = Polarity::kActiveHigh,
|
.polarity = Polarity::kActiveHigh,
|
||||||
};
|
};
|
||||||
|
constexpr Rp2040Config button_connected_to_ground_config{
|
||||||
|
.pin = 12,
|
||||||
|
.polarity = Polarity::kActiveLow,
|
||||||
|
.enable_pull_up = true,
|
||||||
|
};
|
||||||
|
|
||||||
// Config output pin:
|
// Config output pin:
|
||||||
Rp2040DigitalInOut out(output_pin_config);
|
Rp2040DigitalInOut out(output_pin_config);
|
||||||
|
@ -46,11 +51,24 @@ Example code to use GPIO pins:
|
||||||
// This pulls pin to ground since the polarity is kActiveLow.
|
// This pulls pin to ground since the polarity is kActiveLow.
|
||||||
out.SetState(State::kActive);
|
out.SetState(State::kActive);
|
||||||
|
|
||||||
// Config input pin:
|
// Config input pins:
|
||||||
Rp2040DigitalIn in(input_pin_config);
|
Rp2040DigitalIn in(input_pin_config);
|
||||||
in.Enable();
|
in.Enable();
|
||||||
|
|
||||||
|
Rp2040DigitalIn button(button_connected_to_ground_config);
|
||||||
|
button.Enable();
|
||||||
|
|
||||||
// Get the pin state. Since the polarity is kActiveHigh this will return
|
// Get the pin state. Since the polarity is kActiveHigh this will return
|
||||||
// State::kActive if the pin is high or and State::kInactive if the pin is
|
// State::kActive if the pin is high or and State::kInactive if the pin is
|
||||||
// low (grounded).
|
// low (grounded).
|
||||||
State pin_state = in.GetState();
|
State pin_state = in.GetState();
|
||||||
|
|
||||||
|
auto button_result = button.GetState();
|
||||||
|
if (button_result.ok()) {
|
||||||
|
if (button_result.value() == State::kActive) {
|
||||||
|
PW_LOG_INFO("Button is pressed.");
|
||||||
|
}
|
||||||
|
if (button_result.value() == State::kInactive) {
|
||||||
|
PW_LOG_INFO("Button is released.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@ namespace pw::digital_io {
|
||||||
struct Rp2040Config {
|
struct Rp2040Config {
|
||||||
uint16_t pin;
|
uint16_t pin;
|
||||||
Polarity polarity;
|
Polarity polarity;
|
||||||
|
bool enable_pull_up = false;
|
||||||
|
bool enable_pull_down = false;
|
||||||
|
|
||||||
bool operator==(const Rp2040Config& rhs) const {
|
bool operator==(const Rp2040Config& rhs) const {
|
||||||
return polarity == rhs.polarity && pin == rhs.pin;
|
return polarity == rhs.polarity && pin == rhs.pin;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user