Skip to content

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

@Shaibal-Microsoft

Description

@Shaibal-Microsoft

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions