Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DISCUSSION] Async timer trait for Counting and Capture timer in embedded-hal-async #638

Open
Shaibal-Microsoft opened this issue Nov 12, 2024 · 0 comments

Comments

@Shaibal-Microsoft
Copy link

Shaibal-Microsoft commented Nov 12, 2024

Hello Everyone,

This is my first open-source discussion. Apologies in case I am not aware of some etiquettes.

I wanted to propose following asynchronous trait in embedded-hal-async for HW timers which I have reviewed with respect to NXP RT6xx, STM32 and Infineon PSOC62 design its fitting correctly with the design. The requirements for the HW timer moduels are -

1 - User shall be able to start Counting Timer
2 - User shall be able to start Capture Timer for capturing timestamp for an event
3 - User shall be able to pass input event for capturing timestamp
4 - User shall be able to pass output event to capture timer match/capture event in a HW pin

TriggerInput -

  1. Logical event space for input events. Used to capturing timer counter value
  2. HW implementation needs to map from logical to physical event representation

TriggerOutput -

  1. Logical event space for output events. Used to set a GPIO pin based on match or capture event
  2. HW implementation needs to map from logical to physical event representation

// This super trait will be useful to access the logical timer ID
// An implementation can choose to implement a timer as a logical entity keeping HW details away from user. In that case, logical //entity is required to be identified with an ID field for later uses like resource release/cleanup once timer usage is completed.
// In case implementation chooses to expose HW details such as base address of the timer module, the get_id can be left blank or // return base address of the HW module
trait AsyncTimerId {
fn get_id(&self) -> usize;
}

pub trait AsyncTimer : AsyncTimerId {
/// Starts a timer with the specified count and event input/output.
/// # Arguments
/// * count - The count value for the timer.
/// * event_input - The event input for the timer.
/// * event_output - The event output for the timer.
/// This function takes event input and output as option to provide flexibility to user to use it or not.
fn start(&mut self, count: u32, event_input: Option, event_output: Option);

/// Waits asynchronously for the count/capture timer to complete or to record an event timestamp.
async fn wait(&mut self);

}

Please let me know in case I need to add more info.

Thanks and Regards
Shaibal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant