Added --terse and --mailback options to the make stylecheck target. It
also does continue even if it enounters a possible error.
We decided on two exceptions from the linux kernel coding standard:
- Empty wait while loops may end with ; on the same line.
- All blocks after while, if, for have to be in brackets even if they
only contain one statement. Otherwise it is easy to introduce an
error.
Checkpatch needs to be adapted to reflect those changes.
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>
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>
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>