aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* [FIXME] Resurrected, shinier USART support.Marti Bolivar2012-04-1111-175/+836
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FIXME: - Test F1 support - Solve problem of duplicated bytes being TXed unless delay is inserted after configuration but before first bytes are TXed. Rip out nonportable bits from top-level interfaces. The USART register maps are basically the same between F1 and F2, so leave these, but add register bit definitions which had name changes to the libmaple header to avoid needless repetition. There are also a few new bits in the F2 USART registers; add definitions for these in the F2 USART header. Add Doxygen comments for all USART bit definitions. Deprecate struct usart_dev's max_baud field. This is just bloat that doesn't bring us much real benefit. Add new series-specific USART files for F1 and F2: - libmaple/stm32f[1,2]/usart.c - libmaple/stm32f[1,2]/include/series/usart.h These are standard series-specific files, providing register map base pointers, defining devices, implementing nonportable routines, etc. We need a portable way to configure the USART GPIOs. To this end, add usart_async_gpio_cfg() to the top-level USART interface. This function is implemented in new F1 and F2 USART backends to take the appropriate action to configure the RX and TX pins for asynchronous full duplex mode. USART baud rate calculation is done differently on the different series. Keep the usart_set_baud_rate() declaration in the top-level USART header, but move the implementations into the series-specific usart.c files. In usart_set_baud_rate(), allow for deriving clock_speed automatically by letting user tell us to figure out the peripheral clock speed by mapping the device's rcc_clk_id onto an STM32_PCLK[1,2] value. This preserves flexibility for users with non-default clock configurations, but makes things easier on everyone else. Add private USART files for portable private USART routines: - libmaple/usart_private.h - libmaple/usart_private.c Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* stm32f2: Improve GPIO alternate function support.Marti Bolivar2012-04-112-9/+85
| | | | | | | | | Add GPIO_AFRL and GPIO_AFRH bit definitions; these seem to have been overlooked. Add enum gpio_af to give labels to the various functions. Add gpio_set_af() convenience routine for configuring a GPIO's alternate function. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* rcc_reconfigure_pll(): Assert that the PLL is disabled.Marti Bolivar2012-04-112-0/+6
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* RCC: Add rcc_is_clk_on().Marti Bolivar2012-04-112-0/+10
| | | | | | This is a convenience function for checking if a clock line is on. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Style change to libmaple/rules.mk.Marti Bolivar2012-04-111-7/+7
| | | | | | New style makes for cleaner diffs. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* stm32.h: Cleanups.Marti Bolivar2012-04-111-6/+2
| | | | | | | Fix include guard name. Remove unused STM32_FLASH_WAIT_STATES (which was superseded by FLASH_SAFE_WAIT_STATES). Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* wirish/boards.cpp: Use __weak instead of GCC attribute.Marti Bolivar2012-04-111-1/+2
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Add __weak to <libmaple/libmaple_types.h>.Marti Bolivar2012-04-111-0/+1
| | | | | | This is just an alias for __attribute__((weak)). Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* [FIXME] Resurrect boards.cpp for F2 and F1.Marti Bolivar2012-04-116-106/+363
| | | | | | | | | | | | | | | | FIXME: - F1 support currently appears to be failing in start_c.c, for some unknown reason. This will need to get sorted out later. Add a new wirish namespace, and a sub-namespace wirish::priv::. Put a bunch of board setup routines in this namespace, and declare them in new wirish/boards_private.h. boards.cpp uses this to perform initialization tasks in a portable way, with two new boards_setup.cpp files under wirish/stm32f1 and wirish/stm32f2 handling the series-specific details. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* RCC: Add new mechanism for configuring the main PLL.Marti Bolivar2012-04-115-22/+126
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new style for configuring the PLL is to initialize a (series-specific) struct rcc_pll_cfg, and pass a pointer to it to rcc_configure_pll(). After that's done, you can use rcc_turn_on_clk(RCC_CLK_PLL) to turn on the main PLL, and busy-wait until rcc_is_clk_ready(RCC_CLK_PLL) is true to make sure the new configuration took effect. - libmaple/rcc.h: -- Add struct rcc_pll_cfg, which specifies a PLL configuration. This specifies a PLL source and a void pointer to series-specific PLL configuration data. -- Add rcc_configure_pll(), which takes a pointer to struct rcc_pll_cfg, and configures the main PLL. It's up to each series to define this function. - stm32f1/rcc.h: Add struct stm32f1_rcc_pll_data, to store F1-specific PLL configuration state. - stm32f1/rcc.c: Add an implementation for rcc_configure_pll(). - stm32f2/rcc.h: Add struct stm32f2_rcc_pll_data, to store F2-specific PLL configuration data. - stm32f2/rcc.c: Add an implementation for rcc_configure_pll(). Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* stm32f1/rcc.h: Deprecate rcc_clk_init().Marti Bolivar2012-04-111-0/+1
| | | | | | We're going to replace this with a more portable mechanism. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple/rcc.h: Add rcc_enable_css(), rcc_disable_css().Marti Bolivar2012-04-111-0/+17
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple_types.h: Add __deprecated.Marti Bolivar2012-04-111-0/+1
| | | | | | This is a define for __attribute__((deprecated)). Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* RCC: Clean up and sanitize interfaces across F1, F2 series.Marti Bolivar2012-04-116-49/+224
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Additions: - rcc_switch_sysclk(): For changing the clock used as SYSCLK's source. - enum rcc_clk: One for each system and secondary clock source (e.g. HSE, LSE). These are defined on a per-series basis in each of the <series/rcc.h>. - rcc_turn_on_clk(), rcc_turn_off_clk(), rcc_is_clk_ready(): For turning on system and secondary clock sources, and checking whether or not they're ready. Uses enum rcc_clk. Removals: - rcc_clk_init(): There's no way to port this to F2. Move it to the F1 header. This also means we can remove the empty implementation and enum rcc_pll_multiplier from the F2 RCC header, where it doesn't make any sense. Also fix up some includes, and rewrite rcc_clk_init() in terms of the new clock source management functions. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Clean up Flash interface; add flash_enable_features().Marti Bolivar2012-04-117-87/+42
| | | | | | | | | | | | | | | | Make a single function, flash_enable_features(), to control the access characteristics of Flash memory (i.e. to write to the non-latency bits of ACR). In so doing, make everybody pretend to allow instruction and data caching. On STM32F1, trying to turn these on simply has no effect. This allows unconditionally trying to turn them on, which will simplify users' lives. This has the ancillary benefit of making the stm32f2- and stm32f1-specific flash.c files unnecessary; delete these. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* STM32F2 Flash support.Marti Bolivar2012-04-113-0/+236
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* [WIP] boards: Add st_stm3220g_eval.Marti Bolivar2012-04-112-0/+109
| | | | | | | This supports ST's STM3220G-EVAL, the standard "kitchen-sink" evaluation board for the STM32F2 series. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* stm32f2/stm32.h: Add support for STM32F207IG.Marti Bolivar2012-04-112-10/+19
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* ld/make: Add support for STM3220G-EVAL board.Marti Bolivar2012-04-112-0/+21
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* [UNDO] Rip out a bunch of F1-only bits from libmaple properMarti Bolivar2012-04-113-43/+34
| | | | | | | We'll need to bring this functionality back online piecemeal as we add F2 support. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* [UNDO] Rip out everything but libmaple and Wirish startup code.Marti Bolivar2012-04-112-23/+23
| | | | | | | We'll need to bring all this functionality back online piecemeal as we add F2 support. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Initial STM32F2 series/stm32.h.Marti Bolivar2012-04-111-0/+83
| | | | | | This still has some FIXMEs, but it's enough to get going. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Initial STM32F2 GPIO support.Marti Bolivar2012-04-113-0/+380
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Initial STM32F2 RCC support.Marti Bolivar2012-04-113-1/+1088
| | | | | | Largely untested. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple_types.h: Add offsetof().Marti Bolivar2012-04-111-1/+5
| | | | | | | | Rather than rely on newlib's stddef.h, define our own offsetof() in terms of GCC's __builtin_offsetof(). Don't override an existing offsetof() definition, in case the user already has one they prefer. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* STM32F2 NVIC support.Marti Bolivar2012-04-111-0/+156
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* STM32F2: Add vector table and weak ISR definitions.Marti Bolivar2012-04-113-1/+458
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Add skeleton libmaple/stm32f2/rules.mk.Marti Bolivar2012-04-111-0/+29
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* support/ld: Add STM32F2 vector symbols.Marti Bolivar2012-04-111-0/+98
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Make BKP support STM32F1-only.Marti Bolivar2012-04-114-2/+2
| | | | | | | | | - libmaple/bkp.h: Mark availability restriction. - Move libmaple/bkp.c to libmaple/stm32f1; adjust rules.mk files accordingly. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Add build support for targeting multiple STM32 series.Marti Bolivar2012-04-117-6/+12
| | | | | | | | | | | | | | | | | | | Add an MCU_SERIES variable to each of the files under support/make/board-includes, which declares the series as "stm32f1" in each case. Use this in target-config.mk when determining LD_SERIES_PATH (with a hack since we only support performance line) and LIBMAPLE_MODULE_SERIES. We must move support/ld/stm32/series/f1 to .../series/stm32f1 as a side-effect. Adding support for other series (e.g. "stm32f2") should now be a matter of filling in the contents of libmaple/<series>/ and support/ld/stm32/<series>/ appropriately (along with moving the rest of the nonportable code out of the libmaple core and into the STM32F1 series submodule). Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Delete .gdbinit.Marti Bolivar2012-04-111-9/+0
| | | | | | This is specific to openocd; it shouldn't be here. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Makefile: use $(MAKEDIR) instead of $(SUPPORT_PATH)/make.Marti Bolivar2012-04-111-2/+2
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* build system: Add board include files for target-config.mk.Marti Bolivar2012-04-116-45/+33
| | | | | | | | | | | | target-config.mk is getting a little long with all the boards in it. Break out the board-specific bits into individual files under support/make/board-includes. This has the added benefit that adding a new board requires less dirtying of the working tree, which is nice for jumping around branches with an experimental board. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple/stm32: Add enum stm32_series, STM32_MCU_SERIES.Marti Bolivar2012-04-112-3/+23
| | | | | | | | | | enum stm32_series gives a tag to each STM32 series, including the ones we don't yet support. STM32_MCU_SERIES is a define which the series stm32.h header must provide, identifying the series of the MCU being targeted. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Great renaming: use "series" instead of "family".Marti Bolivar2012-04-1114-25/+25
| | | | | | | | | | | | | | | | | This is for greater consistency with the ST application notes, which refer to migrating "across" series (e.g. F1 to F2), but compatibility "within" a family (e.g. F1). So: - Move libmaple/stm32x/include/family to .../include/series/ and fix up includes appropriately. - Refer to "family" headers as "series" headers in comments. - Make similar "find and replace"-style changes to build system variable names and comments. - Move support/ld/stm32/family to .../stm32/series. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* boards.cpp: Remove implementation details from Doxygen comments.Marti Bolivar2012-04-111-6/+9
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* wirish/boards.cpp: Use FLASH_SAFE_WAIT_STATES.Marti Bolivar2012-04-111-1/+1
| | | | | | | Do this instead of hard-coding a number of wait states to use in setupFlash(), which is called by init(). This helps future-proof. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple/flash: Add family-specific FLASH_SAFE_WAIT_STATES.Marti Bolivar2012-04-112-6/+22
| | | | | | | | | | | | This is the smallest wait state value that is safe for use when the MCU is at its fastest rate, not considering overclocking. This requires moving the FLASH_WAIT_STATE defines above the family include, so do that, and add the missing #defines (for wait states up to 7). For the STM32F1, the correct value for FLASH_SAFE_WAIT_STATES is FLASH_WAIT_STATE_2; say so in the F1-family flash.h. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple/flash.h: Doxygen fixups.Marti Bolivar2012-04-111-3/+2
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Move nonportable bits of libmaple/stm32.h into libmaple/stm32f1.Marti Bolivar2012-04-112-135/+168
| | | | | | | | These go in a new family header, libmaple/stm32f1/include/family/stm32.h. While we're at it, do some reorganizing. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Rename GLOBAL_FLAGS to TARGET_FLAGS, remove from Makefile.Marti Bolivar2012-04-112-9/+19
| | | | | | | | Move into target-config.mk. Build it up bit-by-bit as the build goes on. Repeat the DENSITY defines once per board in target-config.mk, since they don't make sense on STM32F2. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple/nvic.h: Explanatory commenting.Marti Bolivar2012-04-111-1/+3
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* stm32f1: License headers, portability markers.Marti Bolivar2012-04-112-2/+54
| | | | | | | | | Add license headers to libmaple/stm32f1/isrs_performance.S and libmaple/stm32f1/vector_table_performance.S. Copyright to Perry Hung. I was present when Perry wrote these files. Also mark these as STM32F1 specific (rather than "STM32", say "STM32F1"). Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* stm32f1/rcc.c: Add cautionary comment.Marti Bolivar2012-04-111-0/+4
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* RCC: Break out some portable functionality from stm32f1/.Marti Bolivar2012-04-114-34/+119
| | | | | | | | | | | | | Portions of rcc_clk_enable(), rcc_reset_dev(), and rcc_set_prescaler() are portable; break these into static inline helpers in rcc_private.h. These guts of these are portable, but the arrays of registers etc. are not. Also add an extern declaration for rcc_dev_table into rcc_private.h. This lets us put rcc_dev_clk() into a newly resurrected libmaple/rcc.c, since that's portable. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple: Add build infrastructure for private headers.Marti Bolivar2012-04-113-3/+4
| | | | | | | | | | | libmaple/rules.mk: Add LIBMAPLE_PRIVATE_INCLUDES, a place for storing headers which should be commonly available throughout libmaple, but not made public. Currently, this is just the libmaple directory. Add LIBMAPLE_PRIVATE_INCLUDES to the target flags in the STM32F1 and USB submodules. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Move GPIO support for STM32F1 to libmaple/stm32f1.Marti Bolivar2012-04-115-589/+676
| | | | | | | | | | | | | | | Make a new family header, libmaple/stm32f1/include/family/gpio.h, and supporting libmaple/stm32f1/gpio.c. Beyond registers and devices, these also include anything mentioning AFIO, which doesn't exist on F2. Update libmaple/stm32f1/rules.mk for new gpio.c. Alter gpio_write_bit() to use dev->regs->BSRR only. BRRs are not present on STM32F2. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* libmaple/nvic.c: Cosmetics.Marti Bolivar2012-04-111-11/+15
| | | | Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
* Move NVIC support for STM32F1 to libmaple/stm32f1.Marti Bolivar2012-04-112-111/+150
| | | | | | Backwards-compatible. Only the headers need to change. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>