mirror of
https://github.com/firewalkwithm3/Sensor-Watch.git
synced 2024-11-23 03:30:30 +08:00
run watch at 4 MHz unless USB is enabled
This commit is contained in:
parent
eb3d9b26cb
commit
fbd9ae4b67
|
@ -147,7 +147,7 @@
|
||||||
// <i> This defines the oscillator frequency (Mhz)
|
// <i> This defines the oscillator frequency (Mhz)
|
||||||
// <id> osc16m_freq
|
// <id> osc16m_freq
|
||||||
#ifndef CONF_OSC16M_FSEL
|
#ifndef CONF_OSC16M_FSEL
|
||||||
#define CONF_OSC16M_FSEL OSCCTRL_OSC16MCTRL_FSEL_8_Val
|
#define CONF_OSC16M_FSEL OSCCTRL_OSC16MCTRL_FSEL_4_Val
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// <q> Oscillator Calibration Control
|
// <q> Oscillator Calibration Control
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
* \brief CPU's Clock frequency
|
* \brief CPU's Clock frequency
|
||||||
*/
|
*/
|
||||||
#ifndef CONF_CPU_FREQUENCY
|
#ifndef CONF_CPU_FREQUENCY
|
||||||
#define CONF_CPU_FREQUENCY 8000000
|
#define CONF_CPU_FREQUENCY 4000000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// <y> RTC Clock Source
|
// <y> RTC Clock Source
|
||||||
|
|
|
@ -167,7 +167,8 @@ static inline uint32_t _get_cycles_for_us_internal(const uint16_t us, const uint
|
||||||
*/
|
*/
|
||||||
uint32_t _get_cycles_for_us(const uint16_t us)
|
uint32_t _get_cycles_for_us(const uint16_t us)
|
||||||
{
|
{
|
||||||
return _get_cycles_for_us_internal(us, CONF_CPU_FREQUENCY, CPU_FREQ_POWER);
|
int32_t freq = hri_usbdevice_get_CTRLA_ENABLE_bit(USB) ? 8000000 : 4000000;
|
||||||
|
return _get_cycles_for_us_internal(us, freq, CPU_FREQ_POWER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -196,5 +197,6 @@ static inline uint32_t _get_cycles_for_ms_internal(const uint16_t ms, const uint
|
||||||
*/
|
*/
|
||||||
uint32_t _get_cycles_for_ms(const uint16_t ms)
|
uint32_t _get_cycles_for_ms(const uint16_t ms)
|
||||||
{
|
{
|
||||||
return _get_cycles_for_ms_internal(ms, CONF_CPU_FREQUENCY, CPU_FREQ_POWER);
|
int32_t freq = hri_usbdevice_get_CTRLA_ENABLE_bit(USB) ? 8000000 : 4000000;
|
||||||
|
return _get_cycles_for_ms_internal(ms, freq, CPU_FREQ_POWER);
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,8 +54,14 @@ void _watch_enable_tcc() {
|
||||||
hri_tcc_wait_for_sync(TCC0, TCC_SYNCBUSY_ENABLE);
|
hri_tcc_wait_for_sync(TCC0, TCC_SYNCBUSY_ENABLE);
|
||||||
hri_tcc_write_CTRLA_reg(TCC0, TCC_CTRLA_SWRST);
|
hri_tcc_write_CTRLA_reg(TCC0, TCC_CTRLA_SWRST);
|
||||||
hri_tcc_wait_for_sync(TCC0, TCC_SYNCBUSY_SWRST);
|
hri_tcc_wait_for_sync(TCC0, TCC_SYNCBUSY_SWRST);
|
||||||
// have prescaler divide our 8 MHz clock down to 1 MHz.
|
// divide the clock down to 1 MHz
|
||||||
hri_tcc_write_CTRLA_reg(TCC0, TCC_CTRLA_PRESCALER_DIV8);
|
if (hri_usbdevice_get_CTRLA_ENABLE_bit(USB)) {
|
||||||
|
// if USB is enabled, we are running an 8 MHz clock.
|
||||||
|
hri_tcc_write_CTRLA_reg(TCC0, TCC_CTRLA_PRESCALER_DIV8);
|
||||||
|
} else {
|
||||||
|
// otherwise it's 4 Mhz.
|
||||||
|
hri_tcc_write_CTRLA_reg(TCC0, TCC_CTRLA_PRESCALER_DIV4);
|
||||||
|
}
|
||||||
// We're going to use normal PWM mode, which means period is controlled by PER, and duty cycle is controlled by
|
// We're going to use normal PWM mode, which means period is controlled by PER, and duty cycle is controlled by
|
||||||
// each compare channel's value:
|
// each compare channel's value:
|
||||||
// * Buzzer tones are set by setting PER to the desired period for a given frequency, and CC[1] to half of that
|
// * Buzzer tones are set by setting PER to the desired period for a given frequency, and CC[1] to half of that
|
||||||
|
@ -98,6 +104,9 @@ void _watch_enable_usb() {
|
||||||
// disable USB, just in case.
|
// disable USB, just in case.
|
||||||
hri_usb_clear_CTRLA_ENABLE_bit(USB);
|
hri_usb_clear_CTRLA_ENABLE_bit(USB);
|
||||||
|
|
||||||
|
// bump clock up to 8 MHz
|
||||||
|
hri_oscctrl_write_OSC16MCTRL_FSEL_bf(OSCCTRL, OSCCTRL_OSC16MCTRL_FSEL_8_Val);
|
||||||
|
|
||||||
// reset flags and disable DFLL
|
// reset flags and disable DFLL
|
||||||
OSCCTRL->INTFLAG.reg = OSCCTRL_INTFLAG_DFLLRDY;
|
OSCCTRL->INTFLAG.reg = OSCCTRL_INTFLAG_DFLLRDY;
|
||||||
OSCCTRL->DFLLCTRL.reg = 0;
|
OSCCTRL->DFLLCTRL.reg = 0;
|
||||||
|
|
Loading…
Reference in a new issue