123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- #ifndef MBED_TICKER_API_H
- #define MBED_TICKER_API_H
- #include <stdint.h>
- #include <stdbool.h>
- #include "device.h"
- typedef uint32_t timestamp_t;
- typedef uint64_t us_timestamp_t;
- typedef struct ticker_event_s {
- us_timestamp_t timestamp;
- uint32_t id;
- struct ticker_event_s *next;
- } ticker_event_t;
- typedef void (*ticker_event_handler)(uint32_t id);
- typedef struct {
- uint32_t frequency;
- uint32_t bits;
- } ticker_info_t;
- typedef struct {
- void (*init)(void);
- uint32_t (*read)(void);
- void (*disable_interrupt)(void);
- void (*clear_interrupt)(void);
- void (*set_interrupt)(timestamp_t timestamp);
- void (*fire_interrupt)(void);
- const ticker_info_t *(*get_info)(void);
- } ticker_interface_t;
- typedef struct {
- ticker_event_handler event_handler;
- ticker_event_t *head;
- uint32_t frequency;
- uint32_t bitmask;
- uint32_t max_delta;
- uint64_t max_delta_us;
- uint32_t tick_last_read;
- uint64_t tick_remainder;
- us_timestamp_t present_time;
- bool initialized;
- bool dispatching;
- uint8_t frequency_shifts;
- } ticker_event_queue_t;
- typedef struct {
- const ticker_interface_t *interface;
- ticker_event_queue_t *queue;
- } ticker_data_t;
- #ifdef __cplusplus
- extern "C" {
- #endif
- void ticker_set_handler(const ticker_data_t *const ticker, ticker_event_handler handler);
- void ticker_irq_handler(const ticker_data_t *const ticker);
- void ticker_remove_event(const ticker_data_t *const ticker, ticker_event_t *obj);
- void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj, timestamp_t timestamp, uint32_t id);
- void ticker_insert_event_us(const ticker_data_t *const ticker, ticker_event_t *obj, us_timestamp_t timestamp, uint32_t id);
- timestamp_t ticker_read(const ticker_data_t *const ticker);
- us_timestamp_t ticker_read_us(const ticker_data_t *const ticker);
- int ticker_get_next_timestamp(const ticker_data_t *const ticker, timestamp_t *timestamp);
- int _ticker_match_interval_passed(timestamp_t prev_tick, timestamp_t cur_tick, timestamp_t match_tick);
- #ifdef __cplusplus
- }
- #endif
- #endif
|