* Start on STM32 DMA SPI
* Update all objects.hs, add interrupt function
* Initial DMA code should be ready to test out...
* Fix SPI interrupt-mode IRQ handlers, add SPI::transfer_and_wait
* Fix CMake error when building for STM32WL processors
* Now builds on all STM devices!
* Properly support STM32U5 / DMA IP v3
* Start on STM32F4 support, fix hardfault on IP v1 and v3 due to incorrect indexing
* Fix Rx-only transfers, add abort code, fix incorrect channel assignments for DMA IP v1 devices
* Start on STM32H7 SPI DMA
* Fixes for H7: Correctly manage data cache, keep SPI ISR enabled
* Implement DMA SPI header constants for all remaining STM32 families. Also add support for freeing DMA channels
* Try and fix build on STM32G0
* Fix build on STM32G0
* Add SPI_32BIT_WORDS label, start on fixing SPI docs
* SPI: Implement reference counting so that DMA channels get freed properly
* Fix issue where SPI data could get corrupted (by TI mode turning on) depending on memory layout (if your spis pointer & 0x10 was nonzero)
* Mark DMA channels as unallocated when SPI bus is freed
* Simplify spi_abort_asynch()
* Fix some rebase issues, fix failing to allocate DMA channel on STM32U5
* Fix DMA getting stuck on STM32F4, F7, and F2
* Make it so that SPI::select() works correctly with async stuff
* Add more overloads for SPI functions, make sure that SPI::abort_transfer() correctly toggles CS
* SPI: Implement reference counting so that DMA channels get freed properly
* Fix initialization of SPI peripheral structures
* Update docs a bit
* Use a mutex to protect SPI::_peripherals instead of a critical section, because spi_free() may not be ISR safe
* Style fixes
* fix STM32L1 FLASH_SIZE for cat.3 devices with DEV_ID 0x436
* Fix mesh connect semaphore not releasing causing blockage
* Add support of NSAPI_ICMP sockets in Nanostack
* STM32F1: add MCU_STM32F103xD support
* STM32F1: add MCU_STM32F103xG support
* test: Disable failing tests due to echo server
Some tests are failing as echo.mbedcloudtesting.com is not serving TLS
requests anymore.
Signed-off-by: Saheer Babu <saheer.babu@arm.com>
* Check CAN DLC length value
* Fix default interface ID only being used partially
If user sets the default interface ID for a socket (e.g. using setsockopt
with SOCKET_INTERFACE_SELECT), the default interface should take over
other interface selection mechanisms as a interface is bound to the socket.
This applies for both IPv6 local and global scopes for unicast messages
but not for multicast messages as these are bound to a multicast interface
using SOCKET_IPV6_MULTICAST_IF socket option.
* Targets: NXP: IMXRT: Fixed GCC_ARM lds syntax.
Signed-off-by: Yilin Sun <imi415@imi.moe>
* CAN: read only up to 8 bytes
If HAL implementation writes more than 8 bytes of data, error immediately.
CANMessage defines only 8 bytes of data, lenght cannot be > 8.
This fixes https://github.com/ARMmbed/mbed-os/issues/15361
Signed-off-by: Martin Kojtal <martin.kojtal@arm.com>
* STM32F303xC: add RAM_CCM in GCC linker script
* fix(drivers/emac): Remove incorrect RMII RX ER initialization
* fix(drivers/emac): Add missing SPDX indetifier to ST driver files
* fixed compiler inline issue
* Update Mbed version block
* removed HSE speed limitation for STM32G431RB
* Added HSE range validation for STM32g431xB
* added support for 4, 8 and 16MHz
* M487: Remove unused variable 'u32EscapeFrame'
Remove unused variable 'u32EscapeFrame' in BSP m480_ccap.h to avoid warnings
* force FIFO IRQ for FDCan RX on H7
* Add hardware CRC support to STM32G4
* add support for Nucleo-H745ZI
* Update MAX32670 peripheral drivers with final ones that use by SDK
Signed-off-by: Sadik.Ozer <sadik.ozer@analog.com>
* MAX32670 apply mbed required changes on peripheral drivers
Signed-off-by: Sadik.Ozer <sadik.ozer@analog.com>
* M467: Support CAN bus
1. Update BSP CANFD driver
2. Notes for implementation
(1) Each CANFD instance supports two IRQ lines. Use only line 0. Line 1 is not used.
(2) For Rx disabling multiple filter handles,
1) Map all filter handles to filter handle 0
2) Use Rx FIFO 0 for filter handle 0
(3) For Rx enabling multiple filter handles,
1) Use Rx FIFO 0 for filter handle 0
2) Use Rx FIFO 1 for filter handle through first invoking can_filter()
3) Use dedicated Rx Buffer for other filter handles
NOTE: H/W supports mask on Rx FIFO 0/1 but not on dedicated Rx Buffer.
(4) For Tx, use only dedicated Tx Buffer. BSP CANFD driver doesn't support Tx FIFO/Queue.
(5) Support no CAN FD.
* Fix 'new[]' array freed with 'delete'
The array _scratch_buf is allocated using new[] in line 761 of
mbed-os/storage/kvstore/securestore/source/SecureStore.cpp.
But it was freed using delete.
* Define default parameters of functions of derived class the same as the base class
The member function bringup() of class ThreadInterface redefines
parameter stack's default value to IPV6_STACK from the inherited default value
DEFAULT_STACK (in Interface).
The default value will be resolved statically, not by dispatch, so this
can cause confusion.
Similar arguments apply to LoWPANNDInterface and WisunInterface.
* Avoid calling virtual functions from constructors and destructors
Virtual functions are resolved statically (not dynamically) in
constructors and destructors for the same class. The call should be made
explicitly static by qualifying it using the scope resolution operator.
* Fix potentially overrunning write of sprintf
Format string "%d" requires 12 bytes (including the null terminator).
Also, use snprintf instead of sprintf to prevent buffer overflow.
* Fix system_clock.c location
Signed-off-by: Jasper Jonker <jasper.jonker@wingtra.com>
* Fix variable name
Signed-off-by: Jasper <jasper.jonker@wingtra.com>
* Change storage-class of secret_buf to static
Storing the address of a local variable (`secret_buf`)
in non-local memory (`prf_ptr->secret`) can cause a
dangling pointer bug if the address is used after the function returns.
* fix compiling errors of FATFileSystem when exFAT was enabled
* Add OSPI support for STM32H7
* Nuvoton: Enable extending sampling time for ADC/EADC
For all Nuvoton targets, enable extending sampling time in ADC/EADC clocks on per-pin basis.
---------
Signed-off-by: Saheer Babu <saheer.babu@arm.com>
Signed-off-by: Yilin Sun <imi415@imi.moe>
Signed-off-by: Martin Kojtal <martin.kojtal@arm.com>
Signed-off-by: Sadik.Ozer <sadik.ozer@analog.com>
Signed-off-by: Jasper Jonker <jasper.jonker@wingtra.com>
Signed-off-by: Jasper <jasper.jonker@wingtra.com>
Co-authored-by: caodd <caodd1993@qq.com>
Co-authored-by: YannCharbon <yann.charbon@ik.me>
Co-authored-by: Jerome Coutant <jerome.coutant@st.com>
Co-authored-by: Saheer Babu <saheer.babu@arm.com>
Co-authored-by: Martyx00 <martin.petran@protonmail.com>
Co-authored-by: Yilin Sun <imi415@imi.moe>
Co-authored-by: Martin Kojtal <martin.kojtal@arm.com>
Co-authored-by: akiroz <akiroz.vectis@gmail.com>
Co-authored-by: Charles <hallard04@free.fr>
Co-authored-by: Leonard Chiang <leochiang2002@gmail.com>
Co-authored-by: Chun-Chieh Li <ccli8@nuvoton.com>
Co-authored-by: jmcloud <jmcloud@tesla.com>
Co-authored-by: Augusto Zanellato <augusto.zanellato@gmail.com>
Co-authored-by: Sadik.Ozer <sadik.ozer@analog.com>
Co-authored-by: Mingjie Shen <shen497@purdue.edu>
Co-authored-by: Jasper Jonker <jasper.jonker@wingtra.com>
Co-authored-by: wdx04 <wdx04@outlook.com>
* Lots of usability improvements for the I2C API. Better docs and new top-level functions.
* Document frequencies
* Tabs to spaces
* More style fixes
* Run astyle
* Clean up docs
* Add note about addressing, change 10 bit to 11 bit
* Fix spellcheck
* Fix paste error
* Oops, fix accidental change
The HAL gpio_irq_api stores object IDs, which serve as a form of context
for the dispatch of the interrupt handler in the drivers level
InterruptIn Class. The way this is achieved is that the InterruptIn
Class casts its address to uint32_t, which is stored as the ID.
This results in compilation failure when the size of an object pointer
is greater than uint32_t, for example when building on a PC for unit
testing.
In order to allow Unit Testing of the InterruptIn Class, we replace the
use of uint32_t with uintptr_t (type capable of holding a pointer),
which allows portability and expresses intentions more clearly.
In aid of this latter goal, we also replace the use of the name "id"
with "context", to improve clarity - these are addresses of the context
related to that callback.
The HAL can_api stores an array of IDs in order to dispatch interrupts
to the correct CAN object. The drivers level CAN Class casts a pointer
to itself to an uint32_t, which is stored as the ID and then cast back
to a CAN * in order to call the correct handler. This results in
compilation failure when the size of an object pointer is greater than
uint32_t, for example when building on a PC for unit testing.
In order to allow Unit Testing of the CAN Class, we replace the use of
uint32_t with uintptr_t (type capable of holding a pointer), which
allows portability and expresses intentions more clearly. In aid of this
latter goal, we also replace the use of the name "id" with "context",
to improve clarity. These are addresses of the context related to that
callback.
This allows the entire QSPI class to be mocked/faked for unit testing
purpose, without dependencies from the real implementation such as
`qspi_free()` from the HAL.
Make the _mutex non-static and remove _owner and acquire()
When two or more I2C buses are used then static__mutex and _owner are
shared between all I2C class instances in the program. That
wastes time to reconfigure periphery on every transfer.
Make _mutex non-static. Remove _owner and acquire() method
because in non-static case they have no practical meaning.
- The variables shadow SerialBase::_tx_enabled and SerialBase::_rx_enabled
- Update interrupts when input/output is enabled to avoid infinite congestion
- Update comments
From the history it looks like aquire was not added explicitely to start. I do not see
why as it's the condition that must be sent when communication is initiated.
write/read/transfer invoke `aquire()`
There was much confusion over the functionality of the original
`TimerEvent::insert` call which was described as "Set relative timestamp
of the internal event".
This then extended to my Chrono conversion, meaning the new `insert`
call is not equivalent.
Clarify the original documentation, correct the deprecation messages,
and add more notes on conversion.
No functional change, as the new Chrono API makes more sense - it's just
different from the old API.
Problem actually spotted when I saw the strange code `convert_timestamp`
was producing for the 32-bit->64-bit timestamp conversion. The caller of
it was actually making the mistake of issuing
"TimerEvent::insert(rel_timeout)`, meaning they'd also misunderstood the
documentation, and were not getting the timeout they expected.
(Chrono would have prevented that mistake as durations and time points
are incompatible types).
The supported erase types of a given flash region are indicated
in bitfields of the variable `type_mask`. Even if an erase type
is unused for the current chunk (e.g. size too large, unaligned, etc.),
its bitfield should NOT be cleared - the same erase type might
actually be useful for the next chunk.
The function argument is now a value instead of a reference.
Aside from the core mbed-os CMake target, a number of targets have been created so they can optionally be included by application executables that require them using `target_link_libraries()`.
Co-authored-by: Martin Kojtal <martin.kojtal@arm.com>
Co-authored-by: Rajkumar Kanagaraj <rajkumar.kanagaraj@arm.com>
sfdp_find_addr_region() was causing issues with SPI
flashes with sector table parsed from SFDP (in
particular SST26VF016B).
In particular, it was returning -1 when address 0 is
passed (probably also if the address in the first
region). I do not know why the search algorithm is
written to search from the higher to lower regions,
but it was obvious that it would fail for the first
region. Also it was harder to read due to the index
manipulation.