remove square wave handling (should be done by user directly)
This commit is contained in:
parent
0853d630e4
commit
ddde6ca7f7
|
@ -16,7 +16,7 @@
|
|||
* @file rtc_ds1307.c
|
||||
* @author King Kévin <kingkevin@cuvoodoo.info>
|
||||
* @date 2016-2017
|
||||
* @note peripherals used: I2C @ref rtc_ds1307_i2c, GPIO & timer @ref rtc_ds1307_square_wave_timer
|
||||
* @note peripherals used: I2C @ref rtc_ds1307_i2c
|
||||
*/
|
||||
|
||||
/* standard libraries */
|
||||
|
@ -28,9 +28,6 @@
|
|||
#include <libopencm3/stm32/rcc.h> // real-time control clock library
|
||||
#include <libopencm3/stm32/gpio.h> // general purpose input output library
|
||||
#include <libopencm3/stm32/i2c.h> // I2C library
|
||||
#include <libopencm3/cm3/nvic.h> // interrupt handler
|
||||
#include <libopencmsis/core_cm3.h> // Cortex M3 utilities
|
||||
#include <libopencm3/stm32/timer.h> // timer utilities
|
||||
|
||||
#include "global.h" // global utilities
|
||||
#include "rtc_ds1307.h" // RTC header and definitions
|
||||
|
@ -43,24 +40,6 @@
|
|||
#define RTC_DS1307_I2C_ADDR 0x68 /**< DS1307 I2C address (fixed to 0b1101000) */
|
||||
/** @} */
|
||||
|
||||
/** @defgroup rtc_ds1307_square_wave_timer timer peripheral used to count timer based on RTC IC square wave output
|
||||
* @note comment out SQUARE_WAVE_TICS to not disable feature
|
||||
* @{
|
||||
*/
|
||||
//#define RTC_DS1307_SQUARE_WAVE_TICKS (RTC_DS1307_SQUARE_WAVE_FREQUENCY/256) /**< number of square wave tics before setting rtc_ds1307_tic_flag */
|
||||
#define RTC_DS1307_SQUARE_WAVE_FREQUENCY 4096 /**< square wave output frequency from the RTC IC */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER TIM2 /**< timer peripheral */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER_RCC RCC_TIM2 /**< timer peripheral clock */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER_IC TIM_IC1 /**< input capture channel (for TIM2_CH1) */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER_IN TIM_IC_IN_TI1 /**< input capture input source (TIM2_CH1 becomes TI1, then TI1F, then TI1FP1) */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER_TS TIM_SMCR_TS_IT1FP1 /**< input capture trigger (actually TI1FP1) */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER_IRQ NVIC_TIM2_IRQ /**< timer interrupt */
|
||||
#define RTC_DS1307_SQUARE_WAVE_TIMER_ISR tim2_isr /**< timer interrupt service routine */
|
||||
#define RTC_DS1307_SQUARE_WAVE_GPIO_RCC RCC_GPIOA /**< timer port peripheral clock (TIM2_CH1 on PA0)*/
|
||||
#define RTC_DS1307_SQUARE_WAVE_GPIO_PORT GPIOA /**< timer port (TIM2_CH1 on PA0) */
|
||||
#define RTC_DS1307_SQUARE_WAVE_GPIO_PIN GPIO_TIM2_CH1_ETR /**< timer pin input, connect to RTC IC square wave output (TIM2_CH1 on PA0) */
|
||||
/** @} */
|
||||
|
||||
#if defined(RTC_DS1307_SQUARE_WAVE_TICKS)
|
||||
volatile uint32_t rtc_ds1307_ticks = 0;
|
||||
volatile bool rtc_ds1307_tick_flag = false;
|
||||
|
@ -82,29 +61,6 @@ void rtc_ds1307_setup(void)
|
|||
i2c_set_ccr(I2C(RTC_DS1307_I2C), rcc_apb1_frequency/(100000*2)); // set Thigh/Tlow to generate frequency of 100 kHz
|
||||
i2c_set_trise(I2C(RTC_DS1307_I2C), rcc_apb1_frequency/1000000); // max rise time for 100 kHz is 1000 ns (~1 MHz)
|
||||
i2c_peripheral_enable(I2C(RTC_DS1307_I2C)); // enable I2C after configuration completed
|
||||
|
||||
#if defined(RTC_DS1307_SQUARE_WAVE_TICKS)
|
||||
// setup timer to generate tick from square wave output
|
||||
rcc_periph_clock_enable(RTC_DS1307_SQUARE_WAVE_GPIO_RCC); // enable clock for GPIO peripheral
|
||||
gpio_set_mode(RTC_DS1307_SQUARE_WAVE_GPIO_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, RTC_DS1307_SQUARE_WAVE_GPIO_PIN); // set pin as input
|
||||
gpio_set(RTC_DS1307_SQUARE_WAVE_GPIO_PORT, RTC_DS1307_SQUARE_WAVE_GPIO_PIN); // enable pull-up
|
||||
rcc_periph_clock_enable(RTC_DS1307_SQUARE_WAVE_TIMER_RCC); // enable clock for timer peripheral
|
||||
timer_reset(RTC_DS1307_SQUARE_WAVE_TIMER); // reset timer state
|
||||
timer_ic_set_input(RTC_DS1307_SQUARE_WAVE_TIMER, RTC_DS1307_SQUARE_WAVE_TIMER_IC, RTC_DS1307_SQUARE_WAVE_TIMER_IN); // configure channel as input capture
|
||||
timer_ic_set_filter(RTC_DS1307_SQUARE_WAVE_TIMER, RTC_DS1307_SQUARE_WAVE_TIMER_IC, TIM_IC_OFF); // use no input capture filter
|
||||
timer_ic_set_polarity(RTC_DS1307_SQUARE_WAVE_TIMER, RTC_DS1307_SQUARE_WAVE_TIMER_IC, TIM_IC_FALLING); //capture on falling edge
|
||||
timer_slave_set_trigger(RTC_DS1307_SQUARE_WAVE_TIMER, RTC_DS1307_SQUARE_WAVE_TIMER_TS); // select trigger
|
||||
timer_slave_set_mode(RTC_DS1307_SQUARE_WAVE_TIMER, TIM_SMCR_SMS_ECM1); // select external clock more 1 as input
|
||||
timer_ic_enable(RTC_DS1307_SQUARE_WAVE_TIMER, RTC_DS1307_SQUARE_WAVE_TIMER_IC); // enable input capture
|
||||
timer_set_mode(RTC_DS1307_SQUARE_WAVE_TIMER, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); // set timer mode, use undivided timer clock, edge alignment (simple count), and count up
|
||||
timer_set_prescaler(RTC_DS1307_SQUARE_WAVE_TIMER, 0); // no need to prescale
|
||||
timer_set_period(RTC_DS1307_SQUARE_WAVE_TIMER, RTC_DS1307_SQUARE_WAVE_TICKS-1); // set the tick period
|
||||
timer_enable_irq(RTC_DS1307_SQUARE_WAVE_TIMER, TIM_DIER_UIE); // enable interrupt for timer
|
||||
nvic_enable_irq(RTC_DS1307_SQUARE_WAVE_TIMER_IRQ); // allow interrupt for timer
|
||||
rtc_ds1307_tick_flag = false; // reset RTC tick flag
|
||||
timer_enable_counter(RTC_DS1307_SQUARE_WAVE_TIMER); // enable timer to count ticks
|
||||
rtc_ds1307_write_square_wave(RTC_DS1307_SQUARE_WAVE_FREQUENCY); // set square wave output frequency
|
||||
#endif
|
||||
}
|
||||
|
||||
/** read memory from RTC IC
|
||||
|
@ -493,16 +449,3 @@ bool rtc_ds1307_write_ram(uint8_t* data, uint8_t start, uint8_t length)
|
|||
}
|
||||
return rtc_ds1307_write_memory(0x08+start, data, length); // write RAM (starting at 0x08)
|
||||
}
|
||||
|
||||
#if defined(RTC_DS1307_SQUARE_WAVE_TICKS)
|
||||
/** timer interrupt service routine called when number of ticks have been received */
|
||||
void RTC_DS1307_SQUARE_WAVE_TIMER_ISR(void)
|
||||
{
|
||||
if (timer_get_flag(RTC_DS1307_SQUARE_WAVE_TIMER, TIM_SR_UIF)) { // overflow even happened
|
||||
timer_clear_flag(RTC_DS1307_SQUARE_WAVE_TIMER, TIM_SR_UIF); // clear flag
|
||||
rtc_ds1307_ticks++; // increment count
|
||||
rtc_ds1307_tick_flag = true; // update flag
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,15 +16,10 @@
|
|||
* @file rtc_ds1307.h
|
||||
* @author King Kévin <kingkevin@cuvoodoo.info>
|
||||
* @date 2016-2017
|
||||
* @note peripherals used: I2C @ref rtc_ds1307_i2c, GPIO & timer @ref rtc_ds1307_square_wave_timer
|
||||
* @note peripherals used: I2C @ref rtc_ds1307_i2c
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#if defined(RTC_DS1307_SQUARE_WAVE_TICKS)
|
||||
extern volatile uint32_t rtc_ds1307_ticks; /**< increment on SQUARE_WAVE_TICS square wave ticks */
|
||||
extern volatile bool rtc_ds1307_tick_flag; /**< set on SQUARE_WAVE_TICS square wave ticks */
|
||||
#endif
|
||||
|
||||
/** setup communication with RTC IC
|
||||
* configure the I2C port defined in the sources
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue