Commit Graph

1201 Commits

Author SHA1 Message Date
Ken Sarkies f5c9bdfe61 Changes to doxygen markup to solve a few problems that upset
doxygen, and to correct minor errors.
2013-06-02 18:17:49 -07:00
Karl Palsson bad5580492 [make] Use less shell variables
Use fixed variables for things that can't change, instead of variables
like SRCLIBDIR that was causing a shell call for every single use.

Use less functions in general and less shell expansions.

Use builtin functions like $(realpath blah) instead of $(shell
pwd)/blah  In particular, this was important for me trying to build on
windows with git-shell.  This should help a lot on smaller build
machines, but doesn't make a huge difference on my own.

Remove redundant clean print messages. These also cause more needless
shell expansions.
2013-06-02 18:11:49 -07:00
Paul Fleischer b876b72b39 lm4f: Add control over UART FIFOs 2013-06-02 18:05:49 -07:00
Gareth McMullin 662a2cb8fa sam: Add convenience function for clock setup using internal 4MHz. 2013-06-02 18:01:38 -07:00
Gareth McMullin ce3e3dc39b Split sam3x/sam3n support. 2013-06-02 18:01:38 -07:00
Alexandru Gagniuc 4535a4c9b6 lm4f: Implement GPIO interrupt control
Implement an API to specifiy the interrupt trigger for GPIO pins, and
control interrupts. This completes the GPIO API.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-06-02 16:16:46 -07:00
Alexandru Gagniuc f53839f33f lm4f: Implement GPIO configuration and control
Everything needed to set up and control the GPIO pins is implemented,
EXCEPT setting up interrupts. This is the subject of a subsequent patch.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-06-02 16:16:46 -07:00
Alexandru Gagniuc a3784aa54f lm4f: Add GPIO register definitions
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-06-02 16:16:46 -07:00
Alexandru Gagniuc 991fbd01be lm4f: Add all GPIO ports to memorymap.h
The base addresses for GPIO ports J through Q were missing. Add them.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-06-02 16:16:46 -07:00
Alexandru Gagniuc de55bbc46e lm4f: "Pretty-ize" the look of Doxygen comments in gpio.c/.h
Put the Doxygen blocks in well-formatted C comments. This looks better
and is less distracting than putting them in unformatted comments.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-06-02 16:16:46 -07:00
Alexandru Gagniuc 4c45702d2d lm4f: Switch GPIOs to using AHB bus ***WARNING***
The AHB bus allows faster control of GPIO pins versus the older APB bus.
The GPIO ports A through H default on the APB bus. Change the GPIOx
defines in gpio.h to use the base address of the AHB bus.

There's another reason to use the AHB bus: ports K tand highercan only be
accessed via the AHB bus.

***WARNING***
To work, GPIO acces to the AHB bus must be explictly enabled via the
GPIOHBCTL register. Without any additional change, this patch will break
any code using the older APB bus. If the GPIOHBCTL is not properly
modified, any acces to the GPIO register will cause a hard fault.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-06-02 16:16:46 -07:00
Alexandru Gagniuc 2184eb2b13 lm4f: Improve read/write endpoint performance
Modify lm4f_ep_read/write_packet() to take advantage of 32-bit and 16-bit
accesses to the USB FIFO, as opposed to using only 8-bit accesses. This
change increases endpoint performance in a number of configurations.

On the host side, we use usb_bulk_bench to test
https://github.com/mrnuke/usb_bulk_bench

With the following invocations:

usb_bulk_bench -d c03e:b007 -a -t 64 -q 32 -e [ep] [-I/-O]

On the device side, we use the usb_bulk_dev example:

https://github.com/mrnuke/libopencm3-examples/tree/stellaris
The example is in: examples/lm4f/stellaris-ek-lm4f120xl/usb_bulk_dev

(This example will be available in libopencm3-examples in the near future)

The endpoints configuration is the following:
* EP1 OUT - interrupt driven RX endpoint
* EP2 IN  - interrupt driven TX endpoint
* EP3 OUT - polled RX endpoint
* EP4 IN  - polled TX endpoint
* EP5 OUT - polled RX endpoint with unaligned buffer
* EP6 IN  - polled TX endpoint with unaligned buffer

We test the speed in each configuration, using different system clock
frequencies. We run the tests once without the patch applied, and once with
the patch applied. The results are given below:

Before patch (numbers in KiB/s):
freq:	80 MHz	57 MHz	40 MHz	30 MHz	20 MHz	16 MHz
EP1	562	562	562	562	562	550
EP2	936	872	812	812	687	625
EP3	1062	890	700	600	562	562
EP4	900	812	812	750	625	562
EP5	1062	890	700	600	562	562
EP6	930	812	812	750	625	562

With patch  (numbers in KiB/s):
freq:	80 MHz	57 MHz	40 MHz	30 MHz	20 MHz	16 MHz
EP1	1062	1062	1062	690	562	562
EP2	1125	936	936	936	870	812
EP3	1062	960	750	750	562	562
EP4	936	936	870	870	770	700
EP5	1062	900	700	630	562	562
EP6	930	930	870	870	740	650

Percent change in speed (*):
freq:	80 MHz	57 MHz	40 MHz	30 MHz	20 MHz	16 MHz
EP1	89.0	89.0	89.0	22.8	0.0	2.2
EP2	20.2	7.3	15.3	15.3	26.6	29.9
EP3	0.0	7.9	7.1	25.0	0.0	0.0
EP4	4.0	15.3	7.1	16.0	23.2	24.6
EP5	0.0	1.1	0.0	5.0	0.0	0.0
EP6	0.0	14.5	7.1	16.0	18.4	15.7

(*) Numbers given as percent change relative to speed before applying this
patch.

We see throughput increases across the board.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-20 17:52:33 -05:00
Alexandru Gagniuc 9d46103ced lm4f: Add functions for controlling USB interrupts
Add functions to enable and disable USB interrupts, and document how to
use these functions to run usbd_poll() from the usb ISR.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-16 01:36:17 -05:00
Alexandru Gagniuc ad048f7d5a lm4f: Add doxygen documentation for the USB driver
Add minimal documentation for the USB driver. The internal functions and
structs are excluded.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-16 01:36:10 -05:00
Alexandru Gagniuc 2fda5282ab lm4f: Implement a basic USB driver
Implement a basic driver for the LM4F USB controller. The driver is in a
basic form. DMA is not yet implemented. Double-buffering is supported by
the hardware, but is not yet implemented

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-15 18:17:48 -05:00
Alexandru Gagniuc df5bc49245 lm4f: Add USB register definitions
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-15 18:17:06 -05:00
Fergus Noble 4ad30d56b4 Add higher level flash_program function for f2/f4 to write a buffer into flash. 2013-05-10 18:53:19 -07:00
Fergus Noble 410be2a39a **** WARNING **** This change may break your code!!!
Change flash_erase_sector (f2/f4) to take numerical sector argument.

As opposed to using one of the defines in the header, this is more convenient when programatically deciding which sectors to erase.
2013-05-10 18:51:01 -07:00
Fergus Noble b039504494 Moving stm32 f2/f4 flash code into the common area. 2013-05-10 18:34:55 -07:00
Fergus Noble 4d15da995e Adding basic support for v7m sync primatives and mutex convenience functions. 2013-05-10 14:30:17 -07:00
Alexandru Gagniuc 5507e14cd4 lm4f: Implement DMA enable/disable functions for the UART
Add basic rx/tx_dma_enable/disable functionality.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-10 14:20:12 -07:00
Alexandru Gagniuc a8fc67d569 lm4f: Implement UART interrupt control
Add a complete API for controlling the UART interrupts.
Doxygen documentation with inline code examples is also provided in this patch.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-10 14:20:11 -07:00
Alexandru Gagniuc 8112861b60 lm4f: Add basic UART implementation
Add basic functionality needed to setup the UART and send/recieve data.
Interrupts, DMA, and more advanced features are not implemented in this patch.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-10 14:20:11 -07:00
Alexandru Gagniuc a105bcaa83 lm4f: Add UART "convenience" macros
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-10 14:20:11 -07:00
Alexandru Gagniuc 3573bf170a lm4f: Add UART register definitions
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-10 14:20:11 -07:00
Piotr Esden-Tempski ce42531283 Added *.tag files and the new generated sam3x include subdirectory to gitignores. 2013-05-10 14:13:30 -07:00
Alexandru Gagniuc 7b9e8ba2e4 lm4f-doc: Sanitize doxygen structure in rcc.h
By somo copypaste error, the doxygen group rcc_defines was defined twice.
Don't do that. Keep Ken's doxygen structure and drop the old one.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-10 14:11:24 -07:00
Michael Aherne b9a6bbe56e Minor fix to compile functions in rtc.h 2013-05-10 14:09:06 -07:00
Gareth McMullin 05fb6fa19f sam3x: Add usart funciton to enable rx interrupt. 2013-05-10 14:01:17 -07:00
Gareth McMullin e2eadfddb8 sam3x: Add convenince functions for setting clocks and usart baudrate. 2013-05-10 14:01:17 -07:00
Gareth McMullin 8265953b35 sam3x: Add missing return types to pwm functions. 2013-05-10 14:01:16 -07:00
Gareth McMullin c9cd2d9ab1 sam3x: Correct pmc_xtal_enable to use startup time parameter. 2013-05-10 14:01:16 -07:00
Gareth McMullin 060839ee4c sam3x: Add some pwm convenience funcitons. 2013-05-10 14:01:16 -07:00
Gareth McMullin 614e26a3b1 sam3x: Add gpio_init convenience function. 2013-05-10 14:01:16 -07:00
Gareth McMullin f311966f09 sam3x: Add USART registers and come convenience functions. 2013-05-10 14:01:16 -07:00
Gareth McMullin fcd527d31b sam3x: Add some PMC convenience functions. 2013-05-10 14:01:16 -07:00
Gareth McMullin dde1d82fb1 sam3x: clean up gpio mess. 2013-05-10 14:01:16 -07:00
Gareth McMullin f0bace7838 sam3x support. 2013-05-10 14:01:16 -07:00
Alexandru Gagniuc 90172f9d72 lm4f: Fix include guard in nvic.h
The lm4f/nvic.h include guard was wrongfully named LIBOPENCM3_LM3S_NVIC_H.
This caused the lm3s/nvic.h include a few lines down to not be compiled.
Rename the inlcude guard to the more appropriate LIBOPENCM3_LM4F_NVIC_H.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-08 11:23:55 -05:00
Alexandru Gagniuc f4eca5400e lm4f: Properly set PLL divisor
rcc_set_pll_divisor() would take the number we wanted to divide the 400MHz
clock and put it directly in the RCC2 register. This caused the clock to always
be one speed tier slower than expected. The value of the divisor must be
decremented by 1, so a divisor of 5 will be written as 4 in the RCC2.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
2013-05-07 02:05:47 -05:00
Felix Ruess af98521301 [stm32] update doxy for usart_set_baudrate 2013-04-29 18:35:06 +02:00
Felix Ruess 1b818a3679 [stm32] usart6 for F2/F4 2013-04-29 18:14:36 +02:00
Ken Sarkies 92d1134a16 STM32: moved timer_ic_set_polarity from timer_common_all to
f1/timer.
Added timer_ic_set_polarity to timer_common_f24 with
the enum tim_ic_pol now including trigger on both edges.
Changed timer_slave_set_polarity to use enum tim_et_pol
rather than tim_ic_pol.

In response to suggestion of stinkydiver73 on 24 March that
timers in all families have an option for triggers on both
edges, except F1.
2013-04-26 15:30:07 +09:30
Ken Sarkies cbb4756440 As requested (6 Feb 2013) change DMA interrupt flag names
in STM32/common, for dma_common_f24, to match those used in dma_common_f13.
Examples compile OK
2013-04-26 12:12:03 +09:30
Andrey Smirnov 113e5c22e6 Change the way buffer for control requests data is allocated
Current way of having a globally, but weakly defined static buffer has
several shortcomings:
 - It forces user to have a certain "magic" byte array variable if
   they want to have a control buffer of different size.
 - Having a globally defined static array and a separate function to
   tell USB core about its size is error prone.
 - Its inner workings are not easily understandable form cursory look
   at API and one needs to go and look at the implementation code to
   connect all the pieces into a solid picture of how it works

This commit adds two parameters to 'usbd_init' call that allow user to
specify the pointer to the area of memory and a size of that memory
which would be used by the USB core to store the data received during
DATA stage of control requests. This approach, while further
complicating the prototype of 'usbd_init', provides user with more
flexibility allowing for any custom area of memory of any size to be
used as control buffer. It also forces user to provide both address
and memory size at the same time thus avoiding the possibility of user
redefining 'usbd_control_buffer', but not calling
'usbd_set_control_buffer_size' after that.
2013-04-25 17:24:27 -07:00
Matthew Peddie ea15d962ab Remove redundant access size argument in F4 flash code. 2013-04-25 17:13:51 -07:00
millerd 6313af8869 Small improvements of using FLASH memory in STM32F1XX 2013-04-24 15:55:15 -07:00
Nicolas Schodet b2df978eae Add support for static constructors and destructors 2013-04-24 22:49:25 +02:00
Nicolas Schodet cba01fff5e Synchronise linker scripts which are supposed to be identical
This also report bug fixes about data alignment and bss storage to EFM32 &
LM3S targets.

Note: removed chrysn copyright statement as the file is a verbatim copy of
previous files.
2013-04-24 22:49:25 +02:00
Piotr Esden-Tempski c0aefb6ad3 Fixed dma interrupt flag related definitions. 2013-04-23 20:25:42 -07:00