1720 Commits

Author SHA1 Message Date
Karl Palsson
c1c37a8b0f stm32f7: Update IRQs from latest ref manual
One name change and some new ones.
2015-10-15 10:36:54 +00:00
Frantisek Burian
3ef2c38120 [stm32f7] Add initial support of the family, GPIO support.
Most changes are noise from doxygen.
Readme udpated to explain newer FP_FLAGS for m7
stm32f7 library is skipped if the toolchain doesn't support it yet.
2015-10-15 10:34:28 +00:00
Karl Palsson
2e25d678ba Surround all macro parameters with ()
Followup from c72f3d588a637101262d5e2b276dc6cc5d926a6d
2015-10-15 01:03:18 +00:00
Karl Palsson
8f06818f03 doc: flash: syntax check parameters
Mostly just cleans up warnings in doxygen, for most purposes the output is
similar enough to have not been noticed.
2015-10-15 00:54:04 +00:00
Karl Palsson
8eb4ae09ea docs: adcv1: update example code 2015-10-15 00:13:45 +00:00
Karl Palsson
33a2d057f4 doc: exclude CRS from f1, f2, f3, f4, l1 2015-10-15 00:13:33 +00:00
Karl Palsson
3c9e80c6f1 doc: stm32l1: include rcc.c docs 2015-10-15 00:13:25 +00:00
Karl Palsson
75d508246e usb: otg: drop confusing invalid definitions
GUSBCFG TRDT fields have very particular meanings, and the field should be set
depending on your bus speed.  There's no 8/16bit meaning in any current
reference manual for this field.

Fixes github issue #530
2015-10-14 22:42:49 +00:00
Karl Palsson
c72f3d588a Surround all macro parameters with ()
All the macro arguments that are user supplied, or potentially, wrap properly
in () as good practice.

Probably missed one or two, and a lot of them are possibly unnecessary, but
it's straightforward to just do it always.

Fixes github issue #321
2015-10-14 22:15:15 +00:00
fenugrec
c899273c62 usb: Improved comments of USB API
usbd.h: more comments for bmRequestType and bmAttributes bitfield macros
usbd.h: migrated and added API doxyblocks from implementations (*.c)
2015-10-14 20:48:26 +00:00
Karl Palsson
7814d06095 usb: control complete callback has no return value
It's never used, so let's make it void to avoid any confusion.
It was also an unintentional change from void to int in 4b89272
2015-10-14 10:04:37 +00:00
Antal Szabó
f5c9dbdb8d stm32f1: rcc: Fix comments on clock speed. 2015-10-13 15:26:53 +00:00
Karl Palsson
27b826bc4a tests: Allow user override of C/CXX/CPP/LD flags
As recently added to the library, allow the tests to be compiled with user
overridable flags too
2015-10-11 19:15:06 +00:00
Tido Klaassen
aad8d06c3f make: rename CFLAGS in target Makefiles to TGT_CFLAGS
Renamed every instance of variable CFLAGS in target specific Makefiles
to TGT_CFLAGS to free up CFLAGS for user defined compiler flags.

Added information in README.md about existence and usage of CFLAGS
environment variable in build process.
2015-10-11 19:14:25 +00:00
Hunz
9217a5f888 ld generator: add STM32F302x8 2015-10-11 18:46:25 +00:00
Karl Palsson
3ed12b6fd9 usb: short control IN might need a ZLP
Control transfers can transfer less than was requested by the host in the
wLength field.  if this short transfer is a multiple of the endpoint's packet
size, a zero length packet must be sent.

Adds tests for a range of control transfer IN requests, and properly supports
this in the core.  Based heavily on work by Kuldeep Dhaka.

See https://github.com/libopencm3/libopencm3/pull/505
and https://github.com/libopencm3/libopencm3/pull/194 for original discussion.

Tested with stm32f4, stm32f103 and stm32l053.
2015-10-11 18:43:11 +00:00
Devan Lai
5270c11a09 stm32f0: Fix offset for GPIO_BRR
Correct as per RM0091rev5
2015-10-07 10:08:47 +00:00
Devan Lai
96fb10b7a8 stm32f0: include desig.o in build. 2015-10-07 10:02:50 +00:00
Karl Palsson
17bc66c46b stm32f4: fmc: Use standard form shift definitions.
It's confusing and unhelpful to use a different style of shift definitions for
bitfields.

Originally reported by "mox-mox" in
https://github.com/libopencm3/libopencm3/pull/467
2015-10-06 01:26:56 +00:00
Karl Palsson
4b54b35582 tests:gadget0: stm32l0: drop RCC test code
Don't commit commented out code! bad!
2015-10-06 01:06:30 +00:00
Karl Palsson
52dc61403d tests: gadget0: use proper usb enumerations
Eliminate warnings.  carry over from developing in a different tree.
2015-10-06 01:05:36 +00:00
Karl Palsson
e7ea622037 tests: gadget0: Add stm32l053 disco support
Much more complicated clock setup, but tests all pass once you get past that
step.
2015-10-06 00:54:53 +00:00
Karl Palsson
f1d8a7ef04 stm32l0: Add USB support via st_usbfs driver. 2015-10-06 00:54:17 +00:00
Robin Kreis
add087aafc stm32l0: include desig.c (device electronic signature)
Simple functional peripheral, just needs to be included in the build.
2015-10-06 00:53:51 +00:00
Robin Kreis
8e7a89ac75 stm32l0: add EXTI definitions 2015-10-06 00:53:51 +00:00
Robin Kreis
112cf5d085 stm32l0: commonize PWR definitions and add to l0 2015-10-06 00:53:51 +00:00
Robin Kreis
0a76a24286 stm32l0: add LPTIM definitions 2015-10-06 00:53:51 +00:00
Robin Kreis
232a33b01d stm32l0: add SYSCFG definitions
Modified to update to latest reference manual.

Changes to CFGR3, some extra bits.

Signed-off-by: Karl Palsson <karlp@tweak.net.au>
2015-10-06 00:53:51 +00:00
Karl Palsson
29ede503f3 stm32l0: rcc: add more helper routines. 2015-10-06 00:53:51 +00:00
Karl Palsson
cebc335846 stm32l0: Simplify rcc defines.
More could probably be found, but this makes some of the basic RCC defines for
the L0 much more inline with other platforms, and much less verbose.  This
helps us have more identical code for library users across different targets.
2015-10-06 00:53:02 +00:00
Karl Palsson
63cfc6932a stm32l0: Add Clock Recovery System to build 2015-10-06 00:53:02 +00:00
Karl Palsson
d67aec1cc8 stm32: Clock Recovery System is a common peripheral.
Pull it out of the F0 directory ready to be used by other devices with this
peripheral.
2015-10-06 00:52:39 +00:00
Karl Palsson
c097343634 tests: gadget0: F0: drop unnecessary code.
* Only the L1 needed to include flash settings
* whitespace and comment cleanup
* drop redundant clock setting calls
2015-10-04 00:28:16 +00:00
Karl Palsson
f5eb96caf3 usb: Add st_usbfs_v2 for f0/l0 devices
Based on previous work, add a new driver for the v2 usb peripheral found on
stm32f0 and l0 devices.

Correspondingly, add a usb gadget zero test suite for the f0.  L0 device level
code isn't yet ready, but will add the test case when it moves in.

Work by Frantisek Burian, Kuldeep
Singh Dhaka, Robin Kreis, fenugrec and zyp on irc, and all those forgotten.
2015-10-03 02:03:58 +00:00
Karl Palsson
cffaf1ee60 stm32:f0: Add a common range of ld scripts
a couple from the f03, f04, f05 and f07 ranges, which, while having ST wide
consistent flash size codes, differ in ram amounts.
2015-10-03 01:57:01 +00:00
Karl Palsson
b9c3c14d7a usb: core code cannot use bitbanding.
Bitbanding is not available on CortexM0/M0+, so don't use any bitbanding
accesses in core code.
2015-10-03 01:32:46 +00:00
Karl Palsson
e121243ce2 usb: extract ST USB FS peripheral core. [BREAKING CHANGE]
The breaking changes here changes in header location, and changes in driver
name passed down to the usb stack.

Changes affect: stm32f102/f103, stm32l1, and some f3 parts

* instead of the confusingly generic "usb" use the name "st_usbfs" for the USB
  Full speed peripheral ST provides in a variety of their stm32 products.
  Include directives should change as:
      #include <libopencm3/stm32/usb.h> => <libopencm3/stm32/st_usbfs.h>

* instead of the confusingly specific "f103" name for the driver, use
  "st_usbfs_v1"  [BREAKING_CHANGE]

  Instead of:
    usbd_init(&stm32f103_usb_driver, .....) ==>
    usbd_init(&st_usbfs_v1_usb_driver, .....) ==>

The purpose of these changes is to reduce some confusion around naming, but
primarily to prepare for the "v2" peripheral available on stm32f0/l0 and some
f3 devices.

Work by Frantisek Burian, Kuldeep Singh Dhaka, Robin Kreis, fenugrec and zyp
on irc, and all those forgotten.
2015-10-03 01:32:34 +00:00
Karl Palsson
1480c6ee4b tests: gadget0: add stm32l1 target
As with F103 generic, there's no readily available L1 board with USB device
A custom LED is used to track boot process, but otherwise this should be
portable to any L1 board, except for the openocd configuration file.

Tests pass straight away, which is good, as it uses the existing f103 usb
driver.
2015-10-03 01:29:49 +00:00
Karl Palsson
58d5de26f3 tests: gadget0: add stm32f103 target
There's no F1 discovery style board with usb device, so this is for a "generic"
device.  The USB portion should be safe, but there's a led used for bootup that
is board specific, and of course the clock source is board specific.

Related, the openocd config file is rather custom to my own setup, but shows
what you need to customize for your test environment.

Further, as the F1 usb core doesn't include support for soft disconnect, use
the very hacky method of dragging the pin low to force reenumeration on reset.
Very very useful for development purposes!
2015-10-03 01:18:17 +00:00
Karl Palsson
39c29b8fdf tests: rules.mk: kill rcs/sccs support
If you can read this, you're not using a version control system affected by
this change ;)

Before: make -d | wc -l ==> 992
After:  make -d | wc -l ==> 452
2015-10-03 00:59:26 +00:00
Karl Palsson
44f3fc98ea tests: rules.mk: scrap legacy suffix search
Instead of just adding elf/bin and friends, actively delete the original
suffixes and include only things we care about.

Before vs After:
make -d | wc -l ==> 4497
make -d | wc -l ==> 932

Now, if only I could turn off the RCS/SCCS support so easily.
2015-10-03 00:59:26 +00:00
Karl Palsson
34f00a7d5a tests: usb: gadget0 compatible interface (stm32f4)
This introduces the first firmware setup specifically for automated testing.
Based heavily on the linux kernel project's "USB Gadget Zero" idea, and in
theory, this should be testable with <kernelsrc>/tools/usb/testusb.c but...
not yet.  It's tricky to set that up and poorly documented, so we've got our
own tests instead. Instead, we include a set of python unit tests using pyusb.

These currently only test a basic core subset of functionality, but have already been
very helpful in finding latent bugs.

In this first stage, we support only the stm32f4 disco board, (MB997) and
FullSpeed USB devices.  A generic "rules.mk" is introduced to support multi
platform builds. (See below)

Some basic performance tests are included, but as they take some time to run,
you must manually enable them. See the README for more information

NOTE! Only the source/sink functional interface is supported, loopback will require
some comparision with a real gadget zero to check exactly how it's working.

FOOTNOTES 1:

This introduces a rules.mk file that is arguably substantially simpler[1] for
re-use, and then uses this rules.mk file to support multiple target outputs
from the same shared source tree. Less path requirements are imposed, and less
variables need to be defined in each project's makefile.  A separate bin
directory is created for each project.

All useful settings and configurations imported from the original library rules
file.

cxx support untested, but lifted from the original library rules file.

[1] Than the file in the libopencm3-examples repo it is loosely based on.
2015-10-03 00:58:43 +00:00
Karl Palsson
f49cbee683 usb: otg-dev: disable and flush endpoints on reset
Only resetting the fifo memory pointers can result in corrupt data.

Tested on f4 disco board with the gadget0 test suite.
2015-09-22 22:28:02 +00:00
Karl Palsson
53c1d2c8d9 usb: get_configuration should return bConfigurationValue
Rather than the index of the config. This happens to be the same
thing if you have zero based sequential configurations.
2015-09-22 22:28:02 +00:00
Kuldeep Singh Dhaka
7cd7212577 usb: Validate and accept set_configuration properly
Setting the same configuration again should act as a lightweight reset, not be
ignored.  This resulted in data toggle bits not being reset and alternet
settings not being reset.

Further, completely invalid configurations were accepted, when they should have
result in a stall. (Section 9.4.7 of USB 2.0 spec)

fixes Github issue #302

Tested-by: Karl Palsson <karlp@tweak.net.au>
2015-09-22 22:28:02 +00:00
Karl Palsson
eb18cc19cb stm32l1: Add eeprom to memory maps
By adding an "eep" memory section, and a NOLOAD step into the linker
scripts, you can now let gcc allocate variables in eeprom for you.
However, as fitting for eeprom, they cannot be initialized, and will not
be loaded at any time.  This simply lets you get place variables in the
eeprom space.

Example:

struct whatever __attribute__((section(".eeprom"))) blah;
struct another __attribute__((section(".eeprom"))) wop;
printf("%#x", &blah); // ==> 0x08080000
printf("%#x", &wop); // ==> 0x08080000 +  sizeof(blah)

You can read directly out of these variables, but need to use the
eeprom_ routines for writing to them.
2015-09-22 22:26:48 +00:00
Hanspeter Portner
15a6103f8e stm32f3: ld: stm32f3x3x[bc] have 32K/40K RAM only.
Correct memory sizes in ld/devices.data for:

* stm32f3[01]3?c from RAM=48K to RAM=40K.
* stm32f303?b from RAM=40K to RAM=32K.

Reviewed-by: Karl Palsson <karlp@tweak.net.au>
2015-09-07 20:52:34 +00:00
Karl Palsson
7063e5cdc9 stm32f0: rcc: properly set USB clock source
Missing breaks in switch statement.

Fixes Github issue #524
2015-09-05 16:12:39 +00:00
Karl Palsson
4053bd6e14 stm32f1: add standard ldscripts for medium/high density
We haven't yet moved everything over to any autogenerated linker scripts, so
include more common templates instead of proliferating mountains of them in
every example.
2015-08-31 22:35:23 +00:00
Hanspeter Portner
be56146407 stm32f3: fix ADC2/4 "slave" memory map.
Main memory map just lists the base address for the pairs, doesn't clarify the
offset for the slave devices.
2015-08-23 11:34:21 +00:00