Andrew Tridgell
5e0f175223
HAL_ChibiOS: adjust UART buffer sizes for new UART code
...
this gains about 20k of RAM, and has almost no impact on log download
speed at 921600 on a F427. The improved threading means we can afford
to have smaller buffers
2021-02-20 14:37:11 +11:00
Andy Piper
4e61ba2dc8
AP_HAL_ChibiOS: reduce stack sizes for rcout, uart_rx and storage.
2021-02-20 14:37:11 +11:00
Andy Piper
f9c5f9be00
AP_HAL_ChibiOS: make dshot DMA unlock event driven in order to allow unlocking from rcout thread
...
refactor rcout into separate thread and process all dshot requests there
move uart DMA completion to event model
process dshot locks in strick reverse order when unlocking
convert Shared_DMA to use mutexes
move UART transmit to a thread-per-uart
do blocking UART DMA transactions
do blocking dshot DMA transactions
trim stack sizes
cancel dma transactions on dshot when timeout occurs
support contention stats on blocking locking
move thread supression into chibios_hwdef.py
invalidate DMA bounce buffer correctly
separate UART initialisation into two halves
cleanup UART transaction timeouts
add @SYS/uarts.txt
move half-duplex handling to TX thread
correct thread statistics after use of ExpandingString
set unbuffered TX thread priority owner + 1
correctly unlock serial_led_send()
don't share IMU RX on KakuteF7Mini
observe dshot pulse time more accurately.
set TRBUFF bit for UART DMA transfers
deal with UART DMA timeouts correctly
don't deadlock on reverse ordered DMA locks
change PORT_INT_REQUIRED_STACK to 128
2021-02-20 14:37:11 +11:00
Andy Piper
4c2cbdab8d
AP_HAL_ChibiOS: only setup half-duplex for receive when transmit is fully over
2021-02-17 20:09:48 +11:00
Andy Piper
5c32007cdf
AP_HAL_ChibiOS: ensure stop bits can be set before UART begin
2021-02-17 20:09:48 +11:00
Andrew Tridgell
9de1519928
HAL_ChibiOS: prevent hw flow control from hogging a DMA channel
...
When hw flow control is enabled check the CTS pin before we grab the
DMA channel to prevent a long timeout trying to send to a blocked port
from holding a DMA channel against another device
this fixes issue #16587
2021-02-15 07:23:56 +11:00
Andrew Tridgell
afbdd69165
AP_HAL_ChibiOS: adjust stack sizes
2021-01-10 08:28:55 +11:00
Andrew Tridgell
46976c4358
HAL_ChibiOS: fixed remapping of ioline_t with BRD_ALT_CONFIG
...
when a peripheral is made available via BRD_ALT_CONFIG we need to
remap the existing ioline_t in the UART and I2C drivers to use the new
pin.
This fixes an issue with half-duplex, inverted, swapped UART pins for
protocols like FPort and FPort2
2020-10-28 19:51:45 +11:00
Andrew Tridgell
989f8c5d41
HAL_ChibiOS: fixed a race condition in UART DMA transmit
...
this fixes an issue seen on one board which caused a watchdog on high
uart DMA load. We have reproduced the issue on another board by
forcing a very high DMA transfer rate on the same DMA channel while
also requesting very high transfer rates on the UART. The likely race
is in the DMA transmit timeout code, and the simplest fix is to lock
out interrupts during the DMA setup to ensure the tx timeout cannot
trigger during the setup
2020-10-12 13:25:48 +11:00
Siddharth Purohit
a7d641c705
AP_HAL_ChibiOS: add available method for locked state
2020-08-19 17:31:09 +10:00
Peter Barker
931c77fa77
AP_HAL_ChibiOS: correct clearing of UART drivers
2020-06-03 17:00:44 +10:00
Peter Barker
6d9e563ede
AP_HAL_ChibiOS: override read(buffer,count) method to be more efficient
2020-05-26 15:59:11 +10:00
Peter Barker
8f54de4184
AP_HAL_ChibiOS: add discard_input method on UARTDriver
2020-05-26 09:20:32 +10:00
Andrew Tridgell
db8fdeebeb
HAL_ChibiOS: fixed Hott telem half duplex handling
...
this fixes an issue with single byte writes with half duplex. It isn't
an elegent solution, but nicely separates the different types of half
duplex operation
2020-04-17 17:52:28 +10:00
Andrew Tridgell
fc0b2ef920
HAL_ChibiOS: added half-duplex protection for non-inverted
...
to prevent output bytes being seen as input bytes we disable half
duplex during transmit. This was previously only done for non-inverted
UARTs. This patch enables it whether we are inverted or not. This
greatly reduces the number of bad input bytes.
2020-03-20 12:37:52 +11:00
Andrew Tridgell
8b93e0f57d
HAL_ChibiOS: prevent double init of USB
...
this prevented init of USB CubeBlack on Windows. Thanks to Randy for
reporting
2020-02-12 17:44:09 +11:00
Andrew Tridgell
e8ab35a192
HAL_ChibiOS: fixed stdout in early startup bug
...
this caused a failure to boot on some boards if they tried to print
messages in early startup code before hal was initialised
thanks to @Shadowru for reporting the issue
2020-02-12 13:51:10 +11:00
Andrew Tridgell
a8501a91c7
HAL_ChibiOS: fixed handling of write mutex
...
this fixes an issue with log download on USB and mavlink throughput
caused lock contention. The issue was introduced with the changes for
unbuffered writes recently (does not affect stable releases)
2020-01-21 08:37:25 +11:00
Andrew Tridgell
a935b764f4
HAL_ChibiOS: fixed UART DMA issue on F4
...
disabling in rx irq callback should only be done on F3
2020-01-18 07:13:11 +11:00
Andrew Tridgell
9554103418
HAL_ChibiOS: don't extend alloc of iomcu uart
2020-01-18 07:13:11 +11:00
Andrew Tridgell
a7b83b1e26
HAL_ChibiOS: allow for unbuffered writes without DMA
2020-01-16 20:36:54 +11:00
Andrew Tridgell
bb5c1d07e1
HAL_ChibiOS: implement new UART option bits
2020-01-03 17:32:23 +11:00
Andrew Tridgell
b1ca7380be
HAL_ChibiOS: re-implement half-duplex using HDSEL switching
...
this makes half-duplex more reliable on UARTs with pullups or level
shifters
2020-01-02 09:52:57 +11:00
Andrew Tridgell
faf34970e1
HAL_ChibiOS: automatically control pullup/pulldown on inverted UARTs
...
this makes setup of sport telemetry much easier
2020-01-02 09:52:57 +11:00
Andrew Tridgell
4b4642dd4d
HAL_ChibiOS: allow handling of much higher receiver baudrates with DMA
...
this uses two DMA RX bouncebuffers to minimise the time with DMA
disabled so that we can handle much higher baudrates
2019-12-26 10:42:48 +11:00
Andrew Tridgell
58292821b3
HAL_ChibiOS: fix DMA on UARTs for F303
2019-12-26 10:42:48 +11:00
Andrew Tridgell
ccd1ce406c
HAL_ChibiOS: scale uart rx buffer size with baudrate
...
this ensures we have enough buffer space for a RTK GPS, as well as for
high speed comms with a companion computer
2019-12-23 09:54:36 +11:00
Andrew Tridgell
bc1de7a208
HAL_ChibiOS: support STM32F3xx MCUs
2019-11-01 10:53:53 +11:00
Mirko Denecke
b84dcd483d
AP_HAL_ChibiOS: remove unnecessary tabs and whitespaces
2019-10-21 08:01:56 +11:00
Andrew Tridgell
bf2cf7834d
HAL_ChibiOS: fixed a bug in parity/stop-bit setting on STM32F7 and H7
...
and add get_options() method
2019-09-06 08:51:45 +10:00
Andrew Tridgell
d1565a96c5
HAL_ChibiOS: wrap cacheBuffer functions
...
needed to avoid problem with end() method in UARTDriver shadowing with
F7 implementation of cache macros
2019-08-27 15:40:43 +10:00
Andrew Tridgell
16bdaaa1af
HAL_ChibiOS: added support for STM31F10x for AP_Periph
2019-08-27 10:29:56 +10:00
Andrew Tridgell
8080efbc6a
HAL_ChibiOS: allow for blocking unbuffered uarts
...
this is used by AP_IOMCU to avoid a race condition where the mutex is
busy on write() causing a zero-length write and delayed output
2019-08-17 17:36:41 +10:00
Andrew Tridgell
afc8a70ce4
HAL_ChibiOS: fixed a bug in wait_timeout() on UARTs
...
wait_timeout() could return true on a read of less bytes than are
expected.
2019-08-17 17:36:41 +10:00
Siddharth Purohit
2f0d1336e6
HAL_ChibiOS: add support for dual usd cdc
2019-07-12 17:01:21 +10:00
Andrew Tridgell
7e1048c89b
HAL_ChibiOS: enable UART inversion on H7
2019-03-01 11:39:27 +11:00
Andrew Tridgell
64681cb05c
HAL_ChibiOS: allocate threads from any heap
...
this fixes a failure on MatekF405-Wing where it fails to allocate the
SPI thread for the IMU
2019-02-27 11:54:28 +11:00
Andrew Tridgell
dad1774330
HAL_ChibiOS: fixed channel selection for F4/F7 uart driver
2019-02-26 16:18:26 +11:00
Andrew Tridgell
9647a68c9e
HAL_ChibiOS: fixed UART RX DMA for H7
2019-02-26 16:18:26 +11:00
Andrew Tridgell
231117e9b1
HAL_ChibiOS: invalidate before read on rx, not on DMA setup
...
more efficient, as we only invalidate what was used
2019-02-26 16:18:26 +11:00
Andrew Tridgell
071d5e01af
HAL_ChibiOS: added DMAMUX channel assignment calls
2019-02-26 16:18:26 +11:00
Andrew Tridgell
f4e31ce65b
HAL_ChibiOS: added more cache flush ops
2019-02-26 16:18:26 +11:00
Andrew Tridgell
dd8115c9b4
HAL_ChibiOS: check for already allocated TX dma in UART driver
2019-02-26 16:18:26 +11:00
Andrew Tridgell
d9c888ab45
HAL_ChibiOS: port SPI, I2C and UART drivers to H7
2019-02-26 16:18:26 +11:00
Andrew Tridgell
bbd25350eb
HAL_ChibiOS: support ChibiOS kernel major 6
...
preparing for STM32H7 support
2019-02-26 16:18:26 +11:00
Siddharth Purohit
b5fbdc9888
HAL_ChibiOS: invoke serial data event signal for non dma ports as well
2019-01-23 15:57:05 +11:00
Andrew Tridgell
8c43db1a00
HAL_ChibiOS: implement half-duplex delay and read locking
2018-12-29 15:58:22 +11:00
Andrew Tridgell
013f1d55e8
HAL_ChibiOS: added support for swapping UART pins
2018-11-20 18:25:35 +11:00
Andrew Tridgell
d84bc9f556
HAL_ChibiOS: fixed STM32F7 RXINV flag
2018-11-16 15:48:21 +11:00
Andrew Tridgell
85243ad522
HAL_ChibiOS: enable support for half-duplex uart config
2018-11-14 19:05:09 +11:00
Andrew Tridgell
acf03980ca
HAL_ChibiOS: added UART inversion options
...
support GPIO pins or STM32F7
2018-11-14 19:05:09 +11:00
Andrew Tridgell
8c962e6f0f
HAL_ChibiOS: use a larger TX buffer on USB
...
this is needed for fast log download on vehicles with 50Hz main loop
2018-08-28 08:50:50 +10:00
Francisco Ferreira
1b46104a98
AP_HAL_ChibiOS: fix warning when STDOUT is defined
...
../../libraries/AP_HAL_ChibiOS/UARTDriver.cpp:118:12: warning: 'int hal_console_vprintf(const char*, va_list)' defined but not used [-Wunused-function]
static int hal_console_vprintf(const char *fmt, va_list arg)
^
2018-08-14 10:17:38 +10:00
Andrew Tridgell
7aba99e229
HAL_ChibiOS: fixes for ChibiOS version update
2018-08-03 13:44:59 +10:00
Siddharth Purohit
395c48933c
HAL_ChibiOS: move tto using updated time conversion API
2018-08-03 13:44:59 +10:00
Andrew Tridgell
44fd85ff29
HAL_ChibiOS: reduce memory used by serial buffers
...
this does not appear to affect log download speed. It saves about 27k
of memory
2018-08-01 13:11:16 +10:00
Andrew Tridgell
83f38d536e
HAL_ChibiOS: fixed flow control auto-detect without DMA
...
this fixes automatic flow control detection when we are not using DMA
for TX
2018-07-13 07:34:30 +10:00
Andrew Tridgell
50f7e55f0b
HAL_ChibiOS: don't clear buffers if no baudrate change
2018-07-12 11:41:31 +10:00
Michael du Breuil
153ee6ca8e
AP_HAL_ChibiOS: Clear UART buffers when opening a port
2018-06-26 02:18:18 +01:00
Michael du Breuil
037e53ba8a
AP_HAL_ChibiOS: Reduce flash space of UARTDriver
...
Saves 32 bytes
2018-06-26 02:18:18 +01:00
Andrew Tridgell
369ac5edd0
HAL_ChibiOS: save more space in the bootloader
2018-06-25 21:22:31 +10:00
Andrew Tridgell
e3b68876a9
HAL_ChibiOS: fixed tx_len on tx DMA timeout
2018-06-19 09:08:45 +10:00
Andrew Tridgell
8431a677d9
HAL_ChibiOS: added a timeout to DMA UART TX
...
this prevents a shared DMA channel being held for a long time if a CTS
pin is held either by not being connected or by a radio
2018-06-19 09:08:45 +10:00
Andrew Tridgell
2493cdbcb6
HAL_ChibiOS: switch to new bouncebuffer system
...
this removes the dma_flush and dma_invalidate methods and uses a
common bouncebuffer system for all CPU types. This enables microSD
support on STM32F7
2018-06-06 07:15:41 +10:00
Andrew Tridgell
0fade4eb9e
HAL_ChibiOS: make sure the UART bounce buffers are DMA safe
2018-06-06 07:15:41 +10:00
Andrew Tridgell
edb831653f
HAL_ChibiOS: added dma_flush and dma_invalidate operations
...
these are needed to manage the data cache on the STM32F7
2018-06-06 07:15:41 +10:00
Andrew Tridgell
7b720aae46
HAL_ChibiOS: allow printf() to work on systems without debug console
...
map to hal.console once initialised
2018-05-26 19:06:25 +10:00
Andrew Tridgell
89898bae1d
HAL_ChibiOS: take account of available bytes in receive_time_constraint_us
2018-05-21 14:53:18 +10:00
Andrew Tridgell
7005383f82
HAL_ChibiOS: implement uart receive timestamp API
2018-05-16 18:49:22 +10:00
mirkix
cb50639e27
AP_HAL_ChibiOS: add STM32F7 UART support
2018-05-15 07:23:56 +10:00
Andrew Tridgell
5854ccbb4c
HAL_ChibiOS: removed stray debug code
...
thanks to @alielectric for noticing
2018-05-03 17:04:14 +10:00
Andrew Tridgell
e4ce2f532b
HAL_ChibiOS: make smaller builds possible
...
this allows for much smaller builds when you disable a lot of
options. This is part of an effort to create a bootloader of less than
16k using ChibiOS
2018-04-12 11:50:44 +10:00
Andrew Tridgell
e448b5d069
HAL_ChibiOS: implement UART port locking
2018-04-07 09:10:29 +10:00
Andrew Tridgell
bc32276966
HAL_ChibiOS: support DShot output
...
use DMAR burst DMA to minimise number of DMA channels needed
thanks to betaflight for the great reference implementation!
2018-04-07 09:10:29 +10:00
Andrew Tridgell
a64819cbf2
HAL_ChibiOS: minimise DMA TX latency on contended UARTs
...
try to prevent long delays on other users of a DMA channel
2018-04-07 09:10:29 +10:00
Andrew Tridgell
556f3ba53f
HAL_ChibiOS: make UARTs non-blocking by default
...
we never want blocking ports any more with ArduPilot, so defaulting to
blocking makes no sense
2018-03-02 21:39:38 +11:00
Andrew Tridgell
91c741ef07
HAL_ChibiOS: use a non-blocking lock for UART shared DMA
...
we can have multiple UARTs on the same thread sharing the same DMA TX
channel. That can lead to deadlock with blocking locks on DMA. This
makes UART requests for DMA locks non-blocking to fix the issue
2018-03-02 21:39:38 +11:00
Andrew Tridgell
306d35655e
HAL_ChibiOS: allow for bare board builds
...
this allows for a build with no UARTs, no SPI, no I2C, no PWM. Great
for initial board bringup with just USB
2018-03-02 12:52:50 +11:00
Andrew Tridgell
d0eb2970c7
HAL_ChibiOS: ensure RTS and CTS are both disabled for no flow control
2018-02-07 20:33:45 +11:00
Andrew Tridgell
82f1f462ae
HAL_ChibiOS: ensure we don't init a uart driver twice
2018-02-07 20:33:45 +11:00
Andrew Tridgell
41758348e5
HAL_ChibiOS: added checking of lock state in shared_dma
...
and use lock around check for tx completion in UART handler
2018-02-07 20:33:45 +11:00
Andrew Tridgell
dce4c90467
HAL_ChibiOS: moved UART thread to UART driver
...
use an event model for triggering sends from tx complete DMA handler
for unbuffered uarts
2018-02-07 20:33:45 +11:00
Andrew Tridgell
4d018cf5e2
HAL_ChibiOS: take lock on DMA allocate/deallocate
...
this is required for the stm32_dma_stream bitmask manipulation
2018-02-07 20:33:45 +11:00
Andrew Tridgell
e002fbdb8d
HAL_ChibiOS: fixed a build warning
2018-02-07 20:33:45 +11:00
Andrew Tridgell
85acbcb21d
HAL_ChibiOS: fixed UART send from TX complete IRQ
2018-02-07 20:33:45 +11:00
Andrew Tridgell
979a2a4796
HAL_ChibiOS: removed debug code
2018-02-07 20:33:45 +11:00
Siddharth Purohit
538af2a58a
HAL_ChibiOS: fix parity and stop bit setting
2018-02-07 20:33:45 +11:00
Siddharth Purohit
df4bf7e476
HAL_ChibiOS: fix irq clash with unnecessary access to readbuf ring buffer
2018-02-07 20:33:45 +11:00
Siddharth Purohit
02696882e9
HAL_ChibiOS: if unbuffered write, do continue to invoke DMA writes
...
adds higher latency to device sharing DMA
2018-02-07 20:33:45 +11:00
Andrew Tridgell
3dacbd1b36
HAL_ChibiOS: hold write lock for unbuffered writes
2018-02-07 20:33:45 +11:00
Andrew Tridgell
ad26ca4a27
HAL_ChibiOS: implement parity and stop bits controls
2018-02-07 20:33:45 +11:00
Andrew Tridgell
2e15285c51
HAL_ChibiOS: refuse unbuffered writes without DMA
...
we would need much more complex code to handle this
2018-02-07 20:33:45 +11:00
Andrew Tridgell
3f2cc2c9d6
HAL_ChibiOS: implement low latency UART writes
...
this implements the set_unbuffered_writes() API by performing writes
directly in the write() call and not from a timer
2018-02-07 20:33:45 +11:00
Andrew Tridgell
f14a847b97
HAL_ChibiOS: rename classes to remove 'Chibi'
...
it is redundent as all classes are in ChibiOS namespace, and makes the
code harder to read
2018-01-15 11:46:02 +11:00
Andrew Tridgell
d1f93cd66c
HAL_Chibios: auto-generate I2C, SPI and UART device lists
...
this is less error prone and make a port faster as more information is
in hwdef.dat
2018-01-15 11:46:02 +11:00
Andrew Tridgell
280140bf25
HAL_ChibiOS: added support for MindPX-v2
2018-01-15 11:46:02 +11:00
Andrew Tridgell
41be81af34
HAL_Chibios: added hardware flow control for UARTs
...
implement RTS in software and CTS in hardware
2018-01-15 11:46:02 +11:00
Andrew Tridgell
c3435e45c5
HAL_ChibiOS: initial port to FMUv4
2018-01-15 11:46:02 +11:00
Andrew Tridgell
8b6bab7b17
HAL_Chibios: added ChibiOS HAL
...
this is based on initial work by Sid, reset here for easier merging
2018-01-15 11:46:02 +11:00