Age | Commit message (Collapse) | Author | Files | Lines |
|
There doesn't seem to be any reason why the call to `__primask_r` should
be wrapped by another function call.
|
|
313: Remove excessive #[allow(clippy::missing_inline_in_public_items)] r=adamgreig a=jonas-schievink
Closes https://github.com/rust-embedded/cortex-m/issues/179
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
|
|
|
|
|
|
|
|
|
|
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
Adds access to MSP_NS and the BXNS instruction.
Also adds __dsb which was missing.
Signed-off-by: Hugues de Valon <hugues.devalon@arm.com>
|
|
|
|
|
|
|
|
259: Rust assembly stubs r=thalesfragoso a=jonas-schievink
Disclaimer: I have not tested any of this (help wanted, we have no tests in here).
Thanks to @therealprof for nerd-sniping me into oblivion.
Fixes https://github.com/rust-embedded/cortex-m/issues/254
Fixes https://github.com/rust-embedded/cortex-m/issues/194
Fixes https://github.com/rust-embedded/cortex-m/issues/139
# Summary
* Remove the assembly files in favor of a new `asm.rs`, which uses unstable inline assembly and provides a C ABI interface.
* Replace the shell scripts by a [`cargo-xtask`](https://github.com/matklad/cargo-xtask/).
* While we're at it, also pre-build artifacts that are compatible with linker-plugin LTO, fixing https://github.com/rust-embedded/cortex-m/issues/139 (again, not tested)
This means that contributors and maintainers just need ~~a nightly Rust compiler installed~~ to run `cargo xtask assemble`. No binutils, no assembler, no `ar`, no GCC/Clang, and especially nothing from the godawful Arm servers, fixing https://github.com/rust-embedded/cortex-m/issues/194. You don't even have to install the correct nightly Rust toolchain, `cargo xtask` does it for you (and installs all the thumb targets too).
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
|
|
|
|
|
|
|
|
|
|
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
|
|
|
|
|
|
|
|
This commit introduces new associated constants to Core Peripherals.
(pointers to the register block)
This commit also adds a notice that 'ptr()' APIs will be deprecated in
v0.7.
|
|
|
|
241: Add new InterruptNumber trait r=therealprof a=adamgreig
This is a first go at the new trait needed for https://github.com/rust-embedded/svd2rust/pull/455 since we removed `Nr` from bare-metal.
In this case I've written it as `unsafe trait InterruptNumber: Into<u16>` rather than providing a conversion method inside the trait; I think this is neat and idiomatic but please correct me if there's a reason to not do it like this.
[Here's](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4f2f8b9604b5a62298f9907780d844c7) a playground link showing an example implementation.
Co-authored-by: Adam Greig <adam@adamgreig.com>
|
|
|
|
|
|
|
|
Fixes the typo in the a1, a2, and a3 aliases of the RASR MPU register.
|
|
|
|
Signed-off-by: Daniel Egger <daniel@eggers-club.de>
|
|
Signed-off-by: Daniel Egger <daniel@eggers-club.de>
|
|
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
|
|
CC #236
Signed-off-by: Daniel Egger <daniel@eggers-club.de>
|
|
Add SCB methods to enable/disable exceptions
|
|
See #232, which this partially fixes -- there's still the question of
taking an interrupt in the midst of these sequences.
|
|
This removes the duplication of the look-up table and enforces some
safety checks with the match statement.
Signed-off-by: Hugues de Valon <hugues.devalon@arm.com>
|
|
|
|
220: Implement accessing FPSCR r=adamgreig a=bugadani
On the nRF52, sometimes it is necessary to manipulate the FPSCR register, otherwise the device wakes up immediately from sleep. (At least on this device) the FPSCR is only available through `vmrs` instructions.
I've implemented reading the register, parsing its bits and writing a raw value to the register, but let me know if I should also implement manipulation of the named bits.
I would also like to request some assistance to get this to actually build, it's not clear to me how `.s` files are compiled in this library. I'm also not certain where the actual place for this would be - in the registers, or in the `fpu` module.
Co-authored-by: Dániel Buga <bugadani@gmail.com>
Co-authored-by: Dániel Buga <daniel@revolutionrobotics.org>
|
|
225: Initial ARMv8-M MPU support. r=adamgreig a=cbiffle
The v8-M MPU is entirely different from, and incompatible with, the
earlier PMSA MPU. And so this commit does two things:
1. Makes the old RegisterBlock depend on armv6m (for M0+) and armv7m.
2. Defines a new RegisterBlock containing the right layout for v8m.
The hack for documenting fields by opting in x86-64 means the v8m
version won't appear in the docs.
226: Expose the orphaned ICTR/ACTLR registers. r=adamgreig a=cbiffle
In ARMv7-M these were floating alone in system control space, without a
unifying name. As a result, they weren't exposed in earlier versions of
this crate.
In ARMv8-M they have been given a name, the Implementation Control
Block, and more registers have been added. I've used that name for all
architecture revisions.
Co-authored-by: Cliff L. Biffle <cliff@oxide.computer>
|
|
227: ITM: don't test reserved bits in is_fifo_ready r=adamgreig a=bcantrill
This is a follow up to the discussion in #219, capturing the conclusion by @cbiffle and @adamgreig there: to indicate that the ITM FIFO is ready on FIFOREADY (only) on ARMv7-M (only) and to indicate the FIFI is ready on *either* FIFOREADY *or* DISABLED on ARMv8-M. ITM has been tested and verified on an ARMv7-M CPU (an STM32F407, a Cortex-M4) and an ARMv8-M CPU (an LPC55S69, a Cortex-M33).
Without this fix, any use of ITM will hang on ARMv8-M -- which may in fact be the root cause of #74...
Co-authored-by: Cliff L. Biffle <cliff@oxide.computer>
|
|
On ARMv7-M, bits 31:1 of the value read from STIMx are reserved, so
comparing them against zero is a bad idea.
On ARMv8-M, bit 1 has been repurposed to indicate DISABLED. This means
that the is_fifo_ready impl hangs forever when ITM is disabled on a
Cortex-M33 (for example).
Changed to test only the FIFOREADY bit on ARMv7-M, and to test either
FIFOREADY or DISABLED on ARMv8-M.
|
|
In ARMv7-M these were floating alone in system control space, without a
unifying name. As a result, they weren't exposed in earlier versions of
this crate.
In ARMv8-M they have been given a name, the Implementation Control
Block, and more registers have been added. I've used that name for all
architecture revisions.
|
|
The v8-M MPU is entirely different from, and incompatible with, the
earlier PMSA MPU. And so this commit does two things:
1. Makes the old RegisterBlock depend on armv6m (for M0+) and armv7m.
2. Defines a new RegisterBlock containing the right layout for v8m.
The hack for documenting fields by opting in x86-64 means the v8m
version won't appear in the docs.
|
|
|
|
|
|
|