diff --git a/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h b/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h index 8e9187455..ad7cc685a 100644 --- a/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h +++ b/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h @@ -40,8 +40,17 @@ * @details Frequency of the system timer that drives the system ticks. This * setting also defines the system tick time unit. */ -#if !defined(CH_CFG_FREQUENCY) || defined(__DOXYGEN__) -#define CH_CFG_FREQUENCY 10000 +#if !defined(CH_CFG_ST_FREQUENCY) || defined(__DOXYGEN__) +#define CH_CFG_ST_FREQUENCY 10000 +#endif + +/** + * @brief Realtime Counter frequency. + * @details Frequency of the system counter used for realtime delays and + * measurements. + */ +#if !defined(CH_CFG_RTC_FREQUENCY) || defined(__DOXYGEN__) +#define CH_CFG_RTC_FREQUENCY 72000000 #endif /** diff --git a/os/halnew/osal/chibios/osal.h b/os/halnew/osal/chibios/osal.h index 9c6170d4b..ca3c3f8b5 100644 --- a/os/halnew/osal/chibios/osal.h +++ b/os/halnew/osal/chibios/osal.h @@ -95,7 +95,7 @@ /** * @brief Required systick frequency or resolution. */ -#define OSAL_SYSTICK_FREQUENCY CH_CFG_FREQUENCY +#define OSAL_SYSTICK_FREQUENCY CH_CFG_ST_FREQUENCY /*===========================================================================*/ /* Module pre-compile time settings. */ @@ -123,6 +123,13 @@ typedef int32_t msg_t; typedef uint32_t systime_t; #endif +#if 0 +/** + * @brief Type of realtime counter. + */ +typedef uint32_t rtcnt_t; +#endif + /** * @brief Type of a thread reference. */ @@ -309,6 +316,20 @@ static inline void osalSysUnlockFromISR(void) { chSysUnlockFromISR(); } +/** + * @brief Polled delay. + * @note The real delay is always few cycles in excess of the specified + * value. + * + * @param[in] cycles number of cycles + * + * @xclass + */ +static inline void osalSysPolledDelayX(rtcnt_t cycles) { + + chSysPolledDelayX(cycles); +} + /** * @brief Systick callback for the underlying OS. * @note This callback is only defined if the OSAL requires such a diff --git a/os/halnew/platforms/STM32F30x/adc_lld.c b/os/halnew/platforms/STM32F30x/adc_lld.c index e951df14e..009f4dde3 100644 --- a/os/halnew/platforms/STM32F30x/adc_lld.c +++ b/os/halnew/platforms/STM32F30x/adc_lld.c @@ -89,7 +89,7 @@ static void adc_lld_vreg_on(ADCDriver *adcp) { #if STM32_ADC_DUAL_MODE adcp->adcs->CR = ADC_CR_ADVREGEN_0; #endif - halPolledDelay(US2RTT(10)); + osalSysPolledDelayX(US2RTC(10)); } /** diff --git a/os/kernel/include/chsys.h b/os/kernel/include/chsys.h index 9eaf5d8e6..2d7cfa430 100644 --- a/os/kernel/include/chsys.h +++ b/os/kernel/include/chsys.h @@ -109,75 +109,71 @@ * @details Converts from seconds to realtime counter cycles. * @note The result is rounded upward to the next tick boundary. * - * @param[in] freq realtime counter operating frequency * @param[in] sec number of seconds * @return The number of cycles. * * @api */ -#define S2RTV(freq, sec) ((freq) * (sec)) +#define S2RTV(sec) (CH_CFG_RTC_FREQUENCY * (sec)) /** * @brief Milliseconds to realtime counter. * @details Converts from milliseconds to realtime counter cycles. * @note The result is rounded upward to the next tick boundary. * - * @param[in] freq realtime counter operating frequency * @param[in] msec number of milliseconds * @return The number of cycles. * * @api */ -#define MS2RTC(freq, msec) (rtcnt_t)((((freq) + 999UL) / 1000UL) * (msec)) +#define MS2RTC(msec) (rtcnt_t)(((CH_CFG_RTC_FREQUENCY + 999UL) / \ + 1000UL) * (msec)) /** * @brief Microseconds to realtime counter. * @details Converts from microseconds to realtime counter cycles. * @note The result is rounded upward to the next tick boundary. * - * @param[in] freq realtime counter operating frequency * @param[in] usec number of microseconds * @return The number of cycles. * * @api */ -#define US2RTC(freq, usec) (rtcnt_t)((((freq) + 999999UL) / 1000000UL) * (usec)) +#define US2RTC(usec) (rtcnt_t)(((CH_CFG_RTC_FREQUENCY + 999999UL) / \ + 1000000UL) * (usec)) /** * @brief Realtime counter cycles to seconds. * @details Converts from realtime counter cycles number to seconds. * - * @param[in] freq realtime counter operating frequency * @param[in] n number of cycles * @return The number of seconds. * * @api */ -#define RTC2S(freq, n) (rtcnt_t)((n) / (freq)) +#define RTC2S(n) (rtcnt_t)(CH_CFG_RTC_FREQUENCY / (freq)) /** * @brief Realtime counter cycles to milliseconds. * @details Converts from realtime counter cycles number to milliseconds. * - * @param[in] freq realtime counter operating frequency * @param[in] n number of cycles * @return The number of milliseconds. * * @api */ -#define RTC2MS(freq, n) ((n) / ((freq) / 1000UL)) +#define RTC2MS(n) ((n) / (CH_CFG_RTC_FREQUENCY / 1000UL)) /** * @brief Realtime counter cycles to microseconds. * @details Converts from realtime counter cycles number to microseconds. * - * @param[in] freq realtime counter operating frequency * @param[in] n number of cycles * @return The number of microseconds. * * @api */ -#define RTC2US(freq, n) ((n) / ((freq) / 1000000UL)) +#define RTC2US(n) ((n) / (CH_CFG_RTC_FREQUENCY / 1000000UL)) /** @} */ /** diff --git a/os/kernel/include/chvt.h b/os/kernel/include/chvt.h index 10168a66e..75823f954 100644 --- a/os/kernel/include/chvt.h +++ b/os/kernel/include/chvt.h @@ -41,12 +41,12 @@ /* Derived constants and error checks. */ /*===========================================================================*/ -#if CH_CFG_FREQUENCY <= 0 -#error "invalid CH_CFG_FREQUENCY specified" +#if CH_CFG_ST_FREQUENCY <= 0 +#error "invalid CH_CFG_ST_FREQUENCY specified" #endif #if (CH_CFG_TIMEDELTA < 0) || (CH_CFG_TIMEDELTA == 1) -#error "invalid NIL_CFG_TIMEDELTA specified" +#error "invalid CH_CFG_TIMEDELTA specified" #endif #if (CH_CFG_TIMEDELTA > 0) && (CH_CFG_TIME_QUANTUM > 0) @@ -125,7 +125,7 @@ struct virtual_timer { * @api */ #define S2ST(sec) \ - ((systime_t)((uint32_t)(sec) * (uint32_t)CH_CFG_FREQUENCY)) + ((systime_t)((uint32_t)(sec) * (uint32_t)CH_CFG_ST_FREQUENCY)) /** * @brief Milliseconds to system ticks. @@ -138,8 +138,8 @@ struct virtual_timer { * @api */ #define MS2ST(msec) \ - ((systime_t)(((((uint32_t)(msec)) * ((uint32_t)CH_CFG_FREQUENCY) - 1UL) / \ - 1000UL) + 1UL)) + ((systime_t)(((((uint32_t)(msec)) * \ + ((uint32_t)CH_CFG_ST_FREQUENCY) - 1UL) / 1000UL) + 1UL)) /** * @brief Microseconds to system ticks. @@ -152,8 +152,8 @@ struct virtual_timer { * @api */ #define US2ST(usec) \ - ((systime_t)(((((uint32_t)(usec)) * ((uint32_t)CH_CFG_FREQUENCY) - 1UL) / \ - 1000000UL) + 1UL)) + ((systime_t)(((((uint32_t)(usec)) * \ + ((uint32_t)CH_CFG_ST_FREQUENCY) - 1UL) / 1000000UL) + 1UL)) /** @} */ /*===========================================================================*/