mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-07-12 01:23:34 +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") {
|
||||
public_configs = [ ":public_includes" ]
|
||||
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 = [
|
||||
"$PICO_ROOT/src/common/pico_base",
|
||||
"$PICO_ROOT/src/rp2_common/hardware_gpio",
|
||||
"$dir_pw_digital_io",
|
||||
"$dir_pw_status",
|
||||
]
|
||||
sources = [ "digital_io.cc" ]
|
||||
remove_configs = [ "$dir_pw_build:strict_warnings" ]
|
||||
}
|
||||
|
||||
pw_test("digital_io_test") {
|
||||
|
|
|
@ -30,6 +30,7 @@ Status Rp2040DigitalIn::DoEnable(bool enable) {
|
|||
|
||||
gpio_init(config_.pin);
|
||||
gpio_set_dir(config_.pin, GPIO_IN);
|
||||
gpio_set_pulls(config_.pin, config_.enable_pull_up, config_.enable_pull_down);
|
||||
return OkStatus();
|
||||
}
|
||||
|
||||
|
@ -54,6 +55,7 @@ Status Rp2040DigitalInOut::DoEnable(bool enable) {
|
|||
|
||||
gpio_init(config_.pin);
|
||||
gpio_set_dir(config_.pin, GPIO_OUT);
|
||||
gpio_set_pulls(config_.pin, config_.enable_pull_up, config_.enable_pull_down);
|
||||
return OkStatus();
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,11 @@ Example code to use GPIO pins:
|
|||
.pin = 16,
|
||||
.polarity = Polarity::kActiveHigh,
|
||||
};
|
||||
constexpr Rp2040Config button_connected_to_ground_config{
|
||||
.pin = 12,
|
||||
.polarity = Polarity::kActiveLow,
|
||||
.enable_pull_up = true,
|
||||
};
|
||||
|
||||
// Config output pin:
|
||||
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.
|
||||
out.SetState(State::kActive);
|
||||
|
||||
// Config input pin:
|
||||
// Config input pins:
|
||||
Rp2040DigitalIn in(input_pin_config);
|
||||
in.Enable();
|
||||
|
||||
Rp2040DigitalIn button(button_connected_to_ground_config);
|
||||
button.Enable();
|
||||
|
||||
// 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
|
||||
// low (grounded).
|
||||
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 {
|
||||
uint16_t pin;
|
||||
Polarity polarity;
|
||||
bool enable_pull_up = false;
|
||||
bool enable_pull_down = false;
|
||||
|
||||
bool operator==(const Rp2040Config& rhs) const {
|
||||
return polarity == rhs.polarity && pin == rhs.pin;
|
||||
|
|
Loading…
Reference in New Issue
Block a user