Commit Graph

146 Commits

Author SHA1 Message Date
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