Andrew Tridgell
5a68e21435
HAL_ChibiOS: support STM32L431
2021-10-17 20:30:20 +11:00
Iampete1
9751cb5b24
AP_HAL_ChibiOS: move is_dshot_protocol up to AP_HAL
2021-10-06 18:59:57 +11:00
Michel Pastor
a9fed2f9bc
RCOutput: fix full throttle bug
2021-10-05 11:47:04 +11:00
Andrew Tridgell
6953778b4c
HAL_ChibiOS: use micros16() for blheli pass-thru IRQ
...
saves some IRQ overhead, makes time handling more consistent
2021-10-02 18:26:39 +10:00
Iampete1
53ee7d861d
AP_HAL_ChibiOS: remove safe PWM
2021-09-14 09:23:02 +10:00
Iampete1
529a3a9122
AP_HAL_ChibiOS: convert back to full range on IOMCU ONESHOT125 read
2021-09-08 18:01:50 +10:00
Andy Piper
68fd87091c
AP_HAL_ChibiOS: output initializing from PWM banner when not available
2021-08-12 19:07:51 +09:00
Andy Piper
a51e58022f
AP_HAL_ChibiOS: add accessor for reversed mask
...
allow mask updates to be disabled
send dshot commands even if armed - they will be accepted as long as throttle is at zero
only accept low-priority dshot commands while disarmed
apply reversed and reversible mask as servo channels
2021-08-12 19:00:51 +09:00
Andrew Tridgell
54e53ed71c
HAL_ChibiOS: use is_GPIO() instead of BRD_PWM_COUNT
2021-07-22 07:48:12 +10:00
Andy Piper
60b0df0a25
AP_HAL_ChibiOS: only control widest pulse for dshot and oneshot
2021-07-14 17:50:06 +10:00
Andrew Tridgell
7ac895db77
HAL_ChibiOS: always send zero DShot when disarmed
...
this prevents a misconfigured system (for example SERVOn_REVERSED=1)
from running a motor while disarmed.
See https://discuss.ardupilot.org/t/plane-4-1-0-beta/72434/34?u=tridge
2021-07-03 11:37:28 +10:00
Andy Piper
9e99f724e5
AP_HAL_ChibiOS: add 1Hz update_channel_masks()
...
Send dshot commands in update function
2021-06-22 09:55:27 +10:00
Dr.-Ing. Amilcar do Carmo Lucas
8593672f4c
AP_HAL_ChibiOS: fix compilation when HAL_WITH_ESC_TELEM == 0
2021-06-09 21:42:51 +10:00
Andy Piper
a7a9fa93f0
AP_HAL_ChibiOS: correct enabled mask for motor channel output
2021-05-24 07:57:51 +09:00
Andy Piper
6447bd1cdd
AP_HAL_ChibiOS: use AP_ESC_Telem to record erpm data and error rate
...
don't output RPM data if bi-dir dshot is not enabled
2021-05-12 17:01:11 +10:00
Andy Piper
dbd9b3a9ae
AP_HAL_ChibiOS: ESC telemetry is orthogonal to RPM telemetry
2021-05-05 17:41:24 +10:00
Andy Piper
384ecd4a5b
AP_HAL_ChibiOS: check command queue is empty before arming
2021-05-05 17:41:24 +10:00
Andy Piper
66fadf53a1
AP_HAL_ChibiOS: remove dshot calibration step
2021-05-05 17:41:24 +10:00
Andy Piper
f3f3056dba
AP_HAL_ChibiOS: add support for dshot commands to rcout
...
add support for dshot beepcodes through tonealarm
add support for dshot reversal and command queue
add support for dshot commands to all channels
correctly manage channel enablement in PWM groups
Correctly send dshot commands when using bi-dir dshot
allow reversible settings to be changed
ChibiOS: allow more than one type of ESC for dshot commands
Only execute reverse/reversible commands on BLHeli
add support for checking active ESCS
mark ESCs active when bdshot telemetry is returned
allow dshot alarm to be disabled
allow priroitized dshot commands
2021-05-05 17:41:24 +10:00
Andrew Tridgell
f9866dc27e
HAL_ChibiOS: fixed LED_SAFETY attached to FMU with recent DShot updates
2021-04-30 17:26:33 +10:00
Andy Piper
4bb4e2fb22
AP_HAL_ChibiOS: adjust GPIO settings for serial passthru
2021-04-20 10:35:22 +10:00
Iampete1
ec90ab13f4
AP_HAL_ChibiOS: RCOutput: print DMA alocation errors
2021-04-07 17:24:25 +10:00
Iampete1
15509f314c
AP_HAL_ChibiOS: RCOuput: LED setup re-work
2021-04-07 17:24:25 +10:00
Andy Piper
721850d00a
AP_HAL_ChibiOS: fix dshot150.
2021-04-06 10:24:04 +10:00
Andy Piper
cb3b37d181
AP_HAL_ChibiOS: ensure that non-dshot modes get regular 1Khz updates
2021-04-06 10:24:04 +10:00
Andy Piper
ea3291520c
AP_HAL_ChibiOS: add fast cycle calibration step
2021-04-06 10:24:04 +10:00
Andy Piper
74d4af9ac9
AP_HAL_ChibiOS: reset bdshot IC correctly
...
don't allow dshot rates below 800Hz.
set pin speed to MID1 to avoid glitching
don't run receive pulses on a timer
2021-04-06 10:24:04 +10:00
Andy Piper
477ff72214
AP_HAL_ChibiOS: allow dshot rate to be set so as to both regularize the output as well as
...
allow faster rates synchronized to the loop rate
synchronize 1Khz and use Betaflight definition for prescaler
adjust dshot bitrates
don't allocate IC DMA if already allocated
cancel DMA pulses correctly
try really hard to align pulses with push() by making each dshot pulse event driven
2021-04-06 10:24:04 +10:00
Andrew Tridgell
744a2fe535
HAL_ChibiOS: use uint32_t for bit timing in passthru
...
we should not use systime_t as it may be 16 bit
2021-03-23 12:01:20 +11:00
Andrew Tridgell
7496b8bff5
HAL_ChibiOS: fixed DMAR register offset
...
use offsetof() instead of a magic value
2021-03-23 12:01:20 +11:00
Andrew Tridgell
f2ac61f6ba
HAL_ChibiOS: enable DShot on G4
2021-03-23 12:01:20 +11:00
Andrew Tridgell
5b59445471
AP_HAL_ChibiOS: fixes for build with 20.3.x ChibiOS
2021-03-23 12:01:20 +11:00
Andy Piper
968d05a637
AP_HAL_ChibiOS: allow further LED channels to be allocated at the same length
2021-03-17 18:24:11 +11:00
Andrew Tridgell
243cf2199d
HAL_ChibiOS: disable shared DMA on IOMCU
...
this saves about 600 bytes of ram
2021-02-24 18:21:08 +11:00
Andrew Tridgell
eec05c1f48
HAL_ChibiOS: fixed a race and null ptr deref in dshot
...
if a dshot is cancelled then the waiter can be nullptr
2021-02-24 15:39:10 +11:00
Andy Piper
b102391163
AP_HAL_ChibiOS: don't send rcout events without rcout thread
2021-02-24 08:55:12 +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
3a9107245c
AP_HAL_ChibiOS: allocate DMA and LED buffers correctly when the length changes
...
calculate DMAR pulse times correctly
ensure 50us pulse separation for LED
make sure the LEDs are signalled for output
only allow LED length to be set once
2021-02-17 18:36:36 +11:00
Andrew Tridgell
0cc4409845
HAL_ChibiOS: fixed handling of invalid channel for LED write
...
this prevents a null ptr dereference when an invalid channel (such as
one on IOMCU) is used for LEDs
2021-02-13 15:11:10 +11:00
Andy Piper
9249b73e8b
AP_HAL_ChibiOS: correctly allow mixing of bidir and non-bidir channels
2021-01-27 18:49:15 +11:00
Andy Piper
2b885cd79f
AP_HAL_ChibiOS: ensure that serial LED setup goes via an intermediate buffer
...
protect serial LED buffer transfers with mutex
protect serial LED buffer size with mutex
prevent serial LED interactions before rcout is ready
allocate a serial led buffer per channel that needs it
setup clock mask when needed
2021-01-20 18:10:18 +11:00
Andy Piper
fdbf2d369a
AP_HAL_ChibiOS: do not take bi-dir path when in serial DMA
2021-01-13 18:03:41 +11:00
Andy Piper
e9ea360a99
AP_HAL_ChibiOS: don't timeout after 11 bits on serial irqs
2021-01-12 09:58:58 +11:00
Andrew Tridgell
6f4bfed82d
HAL_ChibiOS: fixed build with alarm and no PWM channels
...
this fixes a build error due to conditional always being false when
NUM_GROUPS==0 by using a C++ iterator. It also makes the code neater
2021-01-04 09:04:06 +11:00
Andy Piper
401e5c2073
AP_HAL_ChibiOS: add support for bidir DShot support in RCOutput
...
add support for sampling GPIO pins using timer
don't restart pwm group when not doing bi-dir
fix hwdef generation preproc for TIM DMA
decode telemetry at the start of the dshot cycle
calculate dshot pulse separation correctly and ensure we output rapidly enough
calculate dshot min periods and timeouts correctly
refactor dshot_send() into dshot_send_groups()
use bi-dir dshot channel mask
selectively enable bi-dir RC Channels
process bi-dir mask correctly when allocating DMA channels
allow UP and CH DMA channel sharing
optionally enable bidir vars in hwdef.
enable bi-dir dshot in KakuteF7Mini
enable bi-dir dshot in OmnibusF4Pro
enable bi-dir dshot in OmnibusNanoV6
enable bi-dir dshot in MatekF405
enable bi-dir dshot in fmuv5
enable bi-dir dshot in fmuv3
enable bi-dir dshot in OmnibusF7V2
enable bi-dir dshot in OmnibusNanoV6
enable bi-dir dshot in CubeOrange
enable bi-dir dshot in Pixracer
enable bi-dir dshot in mRoPixracerPro
Co-authored-by: bugobliterator <siddharthbharatpurohit@gmail.com>
2020-12-30 19:14:16 +11:00
Peter Hall
fe5779fd88
AP_HAL_ChibiOS: add support for ProfiLEDs
2020-03-10 10:37:26 +11:00
Andrew Tridgell
669b98c6df
HAL_ChibiOS: allow more than 32 WS2812 LEDs on a pin
2020-02-27 13:12:26 +11:00
Peter Hall
0ca6b7cf77
AP_HAL_ChibiOS: retry neopixel until successful send
2020-02-25 11:15:55 +11:00
Andrew Tridgell
a0fe1a7598
HAL_ChibiOS: produce more accurate clocks for DShot and PWM
2020-02-12 18:12:39 +11:00
Andrew Tridgell
adf17414e0
HAL_ChibiOS: fixed output string for non-DMA capable chan
...
this fixes a problem where the user requests DShot (which rquired DMA)
on an output channel which cannot allocate a DMA channel. We end up
sending normal PWM, so the string representation of the output modes
should reflect that
2020-02-12 14:08:40 +11:00
Randy Mackay
a71ae54d3a
AP_HAL: add RCOutput::get_output_mode_banner
2020-02-04 12:23:33 +11:00
Andrew Tridgell
4636a4c458
HAL_ChibiOS: support LEDs with a wider range of frequencies
...
this fixed LEDs on FMUv5 boards on first 4 aux channels. We need to
round up not round down in the resulting bitrate
2019-11-18 15:54:36 -08:00
Mirko Denecke
b84dcd483d
AP_HAL_ChibiOS: remove unnecessary tabs and whitespaces
2019-10-21 08:01:56 +11:00
Andrew Tridgell
77bf67e15f
HAL_ChibiOS: fixed padding of neopixel bits
...
lack of padding at start caused occasional glitches in colors
displayed
2019-10-10 10:41:19 +11:00
Mark Whitehorn
d8a07b6c44
HAL_ChibiOS: fix FMU fast_channel_mask
...
fix IO fast channel mask
use IOMCU chmask to only set right channels
remove unused variable
2019-10-01 07:13:33 +10:00
Andrew Tridgell
386e7dc3e8
HAL_ChibiOS: fixed delay for OneShot125 channels
...
we were delaying output for OneShot125 by 8x as much as we need to,
which reduced our max loop rate
2019-09-22 19:43:35 +10:00
Andrew Tridgell
03c1a8bfd9
HAL_ChibiOS: use safety button logic from AP_BoardConfig
2019-09-10 16:22:33 +10:00
Andrew Tridgell
f441223b55
HAL_ChibiOS: implement updated NeoPixel API
...
allow for N leds per chain, and setting separate colours per led in
each chain
2019-09-10 13:03:28 +10:00
Tom Pittenger
e3416b66dc
AP_HAL_ChibiOS: add Neopixel output type, similar to dshot
2019-09-10 13:03:28 +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
dbfe6b8019
HAL_ChibiOS: implement persistent_data for watchdog
...
this is a much simpler approach to persistent data
2019-05-15 15:33:48 +10:00
Andrew Tridgell
1acb7e977f
HAL_ChibiOS: added ability to restore safety state on watchdog reset
2019-04-22 16:53:35 +10:00
Andrew Tridgell
94abc5a54d
HAL_ChibiOS: fixed DShot on 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
d96142a37e
HAL_ChibiOS: allow double allocate call in RCOutput
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
Tom Pittenger
548a579f18
AP_HAL_ChibiOS: unify singleton naming to _singleton and get_singleton()
2019-02-10 19:09:58 -07:00
Andrew Tridgell
50683633b3
HAL_ChibiOS: setup for brushed feature in IOMCU
2018-11-30 13:14:14 +11:00
Andrew Tridgell
8dd58b4181
HAL_ChibiOS: support reversible DShot motors
2018-11-16 08:33:35 +11:00
Randy Mackay
c1ab3afb6c
AP_HAL_ChibiOS: fix safety switch option handling
2018-10-04 16:13:24 +10:00
Andrew Tridgell
8c391291a3
HAL_ChibiOS: fixed a race in DShot code
...
this fixes a problem found by Daniel Met with the copter 3.6 beta
release
2018-10-03 15:28:07 +10:00
Siddharth Purohit
87a2dea9d4
HAL_ChibiOS: disable features that require advanced dma
2018-09-19 12:14:15 +10:00
Andrew Tridgell
8c33b4b97d
HAL_ChibiOS: implement set_failsafe_pwm()
2018-09-13 08:15:02 +10:00
Peter Barker
2209e4a697
AP_HAL_ChibiOS: new HAL functor-based methods
...
AP_HAL_ChibiOS: adjust for irq-type enumeration change
AP_HAL_ChibiOS: implement attach-AP_HAL::Proc to interrupt interface
2018-08-21 20:34:01 +09:00
Andrew Tridgell
3df2a1c228
HAL_ChibiOS: fixed dshot bad frames
...
adding a pre-bit on the DMAR, and ensuring that all groups are setup
for DMA together fixes the remaining bad frames reports in BLHeli32
2018-08-04 19:29:13 +10:00
Andrew Tridgell
946b4db0e6
HAL_ChibiOS: set min dshot separation to 100usec
...
this fixes a problem with BLHeli32 not recognising dshot
2018-08-04 19:29:13 +10:00
Andrew Tridgell
22ba9a0aea
HAL_ChibiOS: fixed timeout of serial read bytes
...
this allows for fast timeout of serial read bytes in BLHeli pass-thru
2018-08-04 19:29:13 +10:00
Lucas De Marchi
668c941717
Global: use new version of ARRAY_SIZE
2018-08-04 15:31:55 +10:00
Siddharth Purohit
395c48933c
HAL_ChibiOS: move tto using updated time conversion API
2018-08-03 13:44:59 +10:00
Andrew Tridgell
1eef29e525
HAL_ChibiOS: only set freq on valid IO channels
2018-07-28 15:25:57 +10:00
Andrew Tridgell
e3b68876a9
HAL_ChibiOS: fixed tx_len on tx DMA timeout
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
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
7e897c16c0
HAL_ChibiOS: maintain rcout state beyond BRD_PWM_COUNT
...
allow channels beyond BRD_PWM_COUNT to be sent over SBUS or DShot
distribution
2018-05-26 12:08:54 +10:00
Andrew Tridgell
f3179e7934
HAL_ChibiOS: improved reliability of DShot passthru
...
thanks to WickedShell for debugging this on his Wraith32 ESCs. We were
truncating the last bit on some BLHeli transfers
2018-05-22 18:59:51 +10:00
Andrew Tridgell
dcd7799ec9
HAL_ChibiOS: fixed DShot output on fixed wing
...
we need to mark the channels as 'fast' for DShot to enable properly
2018-05-21 13:31:00 +10:00
Andrew Tridgell
794ebe32e3
HAL_ChibiOS: fixed mixture of oneshot and normal PWM on IOMCU
2018-05-12 07:28:05 +10:00
Andrew Tridgell
bb0cbd15a4
HAL_ChibiOS: implement fmuv4 safety state
...
and added safety_mask and safety_pwm support for both fmuv3 and fmuv4
2018-04-17 10:14:01 +10:00
Andrew Tridgell
4871bbf403
HAL_ChibiOS: make soft serial for RC serial more efficient
...
using system ticks halves the IRQ time
2018-04-16 07:40:55 +10:00
Alexander Malishev
79b5719419
ChibiOS: add support for complementry output timer channels
2018-04-14 09:25:15 +10:00
Andrew Tridgell
1b9cebc3f2
HAL_ChibiOS: check pwm count in rcout init
2018-04-09 15:32:04 +10:00
Andrew Tridgell
68293c9c11
HAL_ChibiOS: don't require GPIO() markers on PWM outputs
...
this fixes blheli pass-thru on MindPX-v2
2018-04-09 15:32:04 +10:00
Andrew Tridgell
eb6c852ee3
HAL_ChibiOS: use simpler pullup on serial input
...
this maps to the right bits for each MCU type
2018-04-07 09:10:29 +10:00
Andrew Tridgell
71cd58cc7e
HAL_ChibiOS: run rc serial thread at top priority
...
this maximises reliability for serial IO to ESCs, increasing flashing
reliability
2018-04-07 09:10:29 +10:00
Andrew Tridgell
3cd4f2a002
AP_ChibiOS: handle oneshot125 separately
...
this sets up oneshot125 with the full 1000 steps of throttle
resolution, using a 8MHz clock. This matches the behaviour of modern
ESCs that measure PWM values with high accuracy
2018-04-07 09:10:29 +10:00
Andrew Tridgell
5bfc97f9c0
HAL_ChibiOS: fixed dshot trigger while serial active
2018-04-07 09:10:29 +10:00
Andrew Tridgell
6fd0af11ef
HAL_ChibiOS: implement telem request API
2018-04-07 09:10:29 +10:00
Andrew Tridgell
6bdb523630
HAL_ChibiOS: guarantee 1kHz output for DShot
2018-04-07 09:10:29 +10:00