Initial commit.

This commit is contained in:
Piotr Esden-Tempski
2013-04-19 17:19:32 -07:00
commit 9d5526f773
324 changed files with 22845 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
##
## This file is part of the libopencm3 project.
##
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
##
## This library is free software: you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this library. If not, see <http://www.gnu.org/licenses/>.
##
BINARY = rtc
LDSCRIPT = ../stm32vl-discovery.ld
include ../../Makefile.include

View File

@@ -0,0 +1,9 @@
------------------------------------------------------------------------------
README
------------------------------------------------------------------------------
This is a small RTC example project.
It blinks the ST STM32VLDISCOVERY's blue LED at 1Hz, and sends the value of
the RTC counter register down the serial line (PA9) at 38400,8N1.

View File

@@ -0,0 +1,129 @@
/*
* This file is part of the libopencm3 project.
*
* Copyright (C) 2010 Lord James <lordjames@y7mail.com>
* Copyright (C) 2011 Mark Panajotovic <marko@electrontube.org>
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libopencm3/stm32/f1/rcc.h>
#include <libopencm3/stm32/f1/gpio.h>
#include <libopencm3/stm32/rtc.h>
#include <libopencm3/stm32/usart.h>
#include <libopencm3/stm32/pwr.h>
#include <libopencm3/cm3/nvic.h>
static void clock_setup(void)
{
rcc_clock_setup_in_hse_8mhz_out_24mhz();
/* Enable GPIOC clock. */
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN);
/* Enable clocks for GPIO port A (for GPIO_USART1_TX) and USART1. */
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN);
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_USART1EN);
}
static void usart_setup(void)
{
/* Setup GPIO pin GPIO_USART1_TX/GPIO9 on GPIO port A for transmit. */
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ,
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART1_TX);
/* Setup UART parameters. */
// usart_set_baudrate(USART1, 38400);
/* TODO usart_set_baudrate() doesn't support 24MHz clock (yet). */
/* This is the equivalent: */
USART_BRR(USART1) = (u16)((24000000 << 4) / (38400 * 16));
usart_set_databits(USART1, 8);
usart_set_stopbits(USART1, USART_STOPBITS_1);
usart_set_mode(USART1, USART_MODE_TX);
usart_set_parity(USART1, USART_PARITY_NONE);
usart_set_flow_control(USART1, USART_FLOWCONTROL_NONE);
/* Finally enable the USART. */
usart_enable(USART1);
}
static void gpio_setup(void)
{
/* Set GPIO8 (in GPIO port C) to 'output push-pull'. */
/* This drives the blue LED on the STM32VLDISCOVERY. */
gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ,
GPIO_CNF_OUTPUT_PUSHPULL, GPIO8);
}
static void nvic_setup(void)
{
/* Without this the RTC interrupt routine will never be called. */
nvic_enable_irq(NVIC_RTC_IRQ);
nvic_set_priority(NVIC_RTC_IRQ, 1);
}
void rtc_isr(void)
{
volatile u32 j = 0, c = 0;
/* The interrupt flag isn't cleared by hardware, we have to do it. */
rtc_clear_flag(RTC_SEC);
/* Visual output. */
gpio_toggle(GPIOC, GPIO8);
c = rtc_get_counter_val();
/* Display the current counter value in binary via USART1. */
for (j = 0; j < 32; j++) {
if ((c & (0x80000000 >> j)) != 0)
usart_send_blocking(USART1, '1');
else
usart_send_blocking(USART1, '0');
}
usart_send_blocking(USART1, '\n');
usart_send_blocking(USART1, '\r');
}
int main(void)
{
clock_setup();
gpio_setup();
usart_setup();
/*
* If the RTC is pre-configured just allow access, don't reconfigure.
* Otherwise enable it with the LSE as clock source and 0x7fff as
* prescale value.
*/
rtc_auto_awake(LSE, 0x7fff);
/* The above mode will not reset the RTC when you press the RST button.
* It will also continue to count while the MCU is held in reset. If
* you want it to reset, comment out the above and use the following:
*/
// rtc_awake_from_off(LSE);
// rtc_set_prescale_val(0x7fff);
/* Setup the RTC interrupt. */
nvic_setup();
/* Enable the RTC interrupt to occur off the SEC flag. */
rtc_interrupt_enable(RTC_SEC);
while(1);
return 0;
}