EICU. Timer widht (16-32 bits) now stored in driver field and detected durign startup
This commit is contained in:
parent
e75668f53b
commit
ae1ce0ea2b
|
@ -149,7 +149,7 @@ static eicuresult_t get_time_both(EICUDriver *eicup,
|
|||
unsigned subtraction math.*/
|
||||
|
||||
/* 16-bit timer */
|
||||
if (0xFFFF == eicup->tim->ARR) {
|
||||
if (EICU_WIDTH_16 == eicup->width) {
|
||||
uint16_t cmp = compare;
|
||||
uint16_t la = chp->last_active;
|
||||
uint16_t li = chp->last_idle;
|
||||
|
@ -159,7 +159,7 @@ static eicuresult_t get_time_both(EICUDriver *eicup,
|
|||
ret.period = p;
|
||||
}
|
||||
/* 32-bit timer */
|
||||
else if (0xFFFFFFFF == eicup->tim->ARR) {
|
||||
else if (EICU_WIDTH_32 == eicup->width) {
|
||||
ret.width = chp->last_idle - chp->last_active;
|
||||
ret.period = compare - chp->last_active;
|
||||
return ret;
|
||||
|
@ -193,14 +193,14 @@ static eicucnt_t get_time_width(EICUDriver *eicup,
|
|||
unsigned subtraction math.*/
|
||||
|
||||
/* 16-bit timer */
|
||||
if (0xFFFF == eicup->tim->ARR) {
|
||||
if (EICU_WIDTH_16 == eicup->width) {
|
||||
uint16_t cmp = compare;
|
||||
uint16_t la = chp->last_active;
|
||||
uint16_t ret = cmp - la;
|
||||
return ret;
|
||||
}
|
||||
/* 32-bit timer */
|
||||
else if (0xFFFFFFFF == eicup->tim->ARR) {
|
||||
else if (EICU_WIDTH_32 == eicup->width) {
|
||||
return compare - chp->last_active;
|
||||
}
|
||||
/* error trap */
|
||||
|
@ -231,14 +231,14 @@ static eicucnt_t get_time_period(EICUDriver *eicup,
|
|||
unsigned subtraction math.*/
|
||||
|
||||
/* 16-bit timer */
|
||||
if (0xFFFF == eicup->tim->ARR) {
|
||||
if (EICU_WIDTH_16 == eicup->width) {
|
||||
uint16_t cmp = compare;
|
||||
uint16_t li = chp->last_idle;
|
||||
uint16_t ret = cmp - li;
|
||||
return ret;
|
||||
}
|
||||
/* 32-bit timer */
|
||||
else if (0xFFFFFFFF == eicup->tim->ARR) {
|
||||
else if (EICU_WIDTH_32 == eicup->width) {
|
||||
return compare - chp->last_idle;
|
||||
}
|
||||
/* error trap */
|
||||
|
@ -807,6 +807,14 @@ void eicu_lld_start(EICUDriver *eicup) {
|
|||
eicup->tim->PSC = (uint16_t)psc;
|
||||
eicup->tim->ARR = (eicucnt_t)-1;
|
||||
|
||||
/* Detect width.*/
|
||||
if (0xFFFFFFFF == eicup->tim->ARR)
|
||||
eicup->width = EICU_WIDTH_32;
|
||||
else if (0xFFFF == eicup->tim->ARR)
|
||||
eicup->width = EICU_WIDTH_16;
|
||||
else
|
||||
osalSysHalt("Unsupported width");
|
||||
|
||||
/* Reset registers */
|
||||
eicup->tim->SMCR = 0;
|
||||
eicup->tim->CCMR1 = 0;
|
||||
|
|
|
@ -281,6 +281,14 @@ typedef enum {
|
|||
EICU_INPUT_BOTH
|
||||
} eicucapturemode_t;
|
||||
|
||||
/**
|
||||
* @brief Timer registers width in bits.
|
||||
*/
|
||||
typedef enum {
|
||||
EICU_WIDTH_16,
|
||||
EICU_WIDTH_32
|
||||
} eicutimerwidth_t;
|
||||
|
||||
/**
|
||||
* @brief EICU frequency type.
|
||||
*/
|
||||
|
@ -390,6 +398,10 @@ struct EICUDriver {
|
|||
* @brief Timer base clock.
|
||||
*/
|
||||
uint32_t clock;
|
||||
/**
|
||||
* @brief Timer registers width in bits.
|
||||
*/
|
||||
eicutimerwidth_t width;
|
||||
/**
|
||||
* @brief Pointer to configuration for the driver.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue