add all submodules as regular code
This commit is contained in:
parent
9aa0eeb3ce
commit
9ed161ffd8
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,6 +0,0 @@
|
|||||||
[submodule "va416xx-hal"]
|
|
||||||
path = va416xx-hal
|
|
||||||
url = https://egit.irs.uni-stuttgart.de/rust/va416xx-hal.git
|
|
||||||
[submodule "vorago-peb1"]
|
|
||||||
path = vorago-peb1
|
|
||||||
url = https://egit.irs.uni-stuttgart.de/rust/vorago-peb1.git
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit f9b5f99604daa79102e8efefa645989829bfcd51
|
|
38
va416xx-hal/.cargo/config.toml
Normal file
38
va416xx-hal/.cargo/config.toml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
|
||||||
|
# uncomment ONE of these three option to make `cargo run` start a GDB session
|
||||||
|
# which option to pick depends on your system
|
||||||
|
# If the RevA board is used, replace jlink.gdb with jlink-reva.gdb
|
||||||
|
# runner = "arm-none-eabi-gdb -q -x jlink.gdb"
|
||||||
|
# runner = "gdb-multiarch -q -x jlink.gdb"
|
||||||
|
# runner = "gdb -q -x openocd.gdb"
|
||||||
|
# runner = "gdb-multiarch -q -x jlink.gdb"
|
||||||
|
|
||||||
|
rustflags = [
|
||||||
|
# This is needed if your flash or ram addresses are not aligned to 0x10000 in memory.x
|
||||||
|
# See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
|
||||||
|
"-C", "link-arg=--nmagic",
|
||||||
|
|
||||||
|
# LLD (shipped with the Rust toolchain) is used as the default linker
|
||||||
|
"-C", "link-arg=-Tlink.x",
|
||||||
|
|
||||||
|
# if you run into problems with LLD switch to the GNU linker by commenting out
|
||||||
|
# this line
|
||||||
|
# "-C", "linker=arm-none-eabi-ld",
|
||||||
|
|
||||||
|
# if you need to link to pre-compiled C libraries provided by a C toolchain
|
||||||
|
# use GCC as the linker by commenting out both lines above and then
|
||||||
|
# uncommenting the three lines below
|
||||||
|
# "-C", "linker=arm-none-eabi-gcc",
|
||||||
|
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||||
|
# "-C", "link-arg=-nostartfiles",
|
||||||
|
]
|
||||||
|
|
||||||
|
[build]
|
||||||
|
# Pick ONE of these compilation targets
|
||||||
|
# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
|
||||||
|
# target = "thumbv7m-none-eabi" # Cortex-M3
|
||||||
|
# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
|
||||||
|
target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
|
||||||
|
# target = "thumbv8m.base-none-eabi" # Cortex-M23
|
||||||
|
# target = "thumbv8m.main-none-eabi" # Cortex-M33 (no FPU)
|
||||||
|
# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)
|
39
va416xx-hal/.cargo/def-config.toml
Normal file
39
va416xx-hal/.cargo/def-config.toml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
|
||||||
|
# uncomment ONE of these three option to make `cargo run` start a GDB session
|
||||||
|
# which option to pick depends on your system
|
||||||
|
# If the RevA board is used, replace jlink.gdb with jlink-reva.gdb
|
||||||
|
# runner = "arm-none-eabi-gdb -q -x jlink/jlink.gdb"
|
||||||
|
# runner = "gdb-multiarch -q -x jlink/jlink.gdb"
|
||||||
|
|
||||||
|
# runner = "arm-none-eabi-gdb -q -x jlink/jlink-reva.gdb"
|
||||||
|
# runner = "gdb-multiarch -q -x jlink/jlink-reva.gdb"
|
||||||
|
|
||||||
|
rustflags = [
|
||||||
|
# This is needed if your flash or ram addresses are not aligned to 0x10000 in memory.x
|
||||||
|
# See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
|
||||||
|
"-C", "link-arg=--nmagic",
|
||||||
|
|
||||||
|
# LLD (shipped with the Rust toolchain) is used as the default linker
|
||||||
|
"-C", "link-arg=-Tlink.x",
|
||||||
|
|
||||||
|
# if you run into problems with LLD switch to the GNU linker by commenting out
|
||||||
|
# this line
|
||||||
|
# "-C", "linker=arm-none-eabi-ld",
|
||||||
|
|
||||||
|
# if you need to link to pre-compiled C libraries provided by a C toolchain
|
||||||
|
# use GCC as the linker by commenting out both lines above and then
|
||||||
|
# uncommenting the three lines below
|
||||||
|
# "-C", "linker=arm-none-eabi-gcc",
|
||||||
|
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||||
|
# "-C", "link-arg=-nostartfiles",
|
||||||
|
]
|
||||||
|
|
||||||
|
[build]
|
||||||
|
# Pick ONE of these compilation targets
|
||||||
|
# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
|
||||||
|
# target = "thumbv7m-none-eabi" # Cortex-M3
|
||||||
|
# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
|
||||||
|
target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
|
||||||
|
# target = "thumbv8m.base-none-eabi" # Cortex-M23
|
||||||
|
# target = "thumbv8m.main-none-eabi" # Cortex-M33 (no FPU)
|
||||||
|
# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)
|
2
va416xx-hal/.gitignore
vendored
Normal file
2
va416xx-hal/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/target
|
||||||
|
Cargo.lock
|
26
va416xx-hal/.vscode/launch.json
vendored
Normal file
26
va416xx-hal/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "cortex-debug",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Debug LED Blinky",
|
||||||
|
// The user should start the J-Link server themselves for now. This is because the
|
||||||
|
// Cortex-Debug will issue a reset command, which is problematic even with
|
||||||
|
// a valid JLinkScript file
|
||||||
|
"servertype": "external",
|
||||||
|
"gdbTarget": "localhost:2331",
|
||||||
|
"gdbPath": "/usr/bin/gdb-multiarch",
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"device": "Cortex-M4",
|
||||||
|
"svdFile": "../va416xx/svd/va416xx-base.svd",
|
||||||
|
"preLaunchTask": "rust: cargo build led blinky",
|
||||||
|
"executable": "${workspaceFolder}/target/thumbv7em-none-eabihf/debug/examples/blinky",
|
||||||
|
"interface": "swd",
|
||||||
|
"runToMain": true,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
19
va416xx-hal/.vscode/tasks.json
vendored
Normal file
19
va416xx-hal/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||||
|
// for the documentation about the tasks.json format
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "rust: cargo build led blinky",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "~/.cargo/bin/cargo", // note: full path to the cargo
|
||||||
|
"args": [
|
||||||
|
"build", "--example", "blinky"
|
||||||
|
],
|
||||||
|
"group": {
|
||||||
|
"kind": "build",
|
||||||
|
"isDefault": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
36
va416xx-hal/Cargo.toml
Normal file
36
va416xx-hal/Cargo.toml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[package]
|
||||||
|
name = "va416xx-hal"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"]
|
||||||
|
edition = "2021"
|
||||||
|
description = "HAL for the Vorago VA416xx family of MCUs"
|
||||||
|
homepage = "https://egit.irs.uni-stuttgart.de/rust/va416xx-hal"
|
||||||
|
repository = "https://egit.irs.uni-stuttgart.de/rust/va416xx-hal"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
keywords = ["no-std", "hal", "cortex-m", "vorago", "va416xx"]
|
||||||
|
categories = ["embedded", "no-std", "hardware-support"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
cortex-m = "0.7"
|
||||||
|
cortex-m-rt = "0.7.1"
|
||||||
|
nb = "1"
|
||||||
|
|
||||||
|
[dependencies.va416xx]
|
||||||
|
path = "../va416xx"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
rt = ["va416xx/rt"]
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
panic-rtt-target = { version = "0.1", features = ["cortex-m"] }
|
||||||
|
rtt-target = { version = "0.3", features = ["cortex-m"] }
|
||||||
|
panic-halt = "0.2"
|
||||||
|
|
||||||
|
[profile.dev]
|
||||||
|
debug = true
|
||||||
|
lto = false
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
lto = true
|
||||||
|
debug = true
|
201
va416xx-hal/LICENSE-APACHE
Normal file
201
va416xx-hal/LICENSE-APACHE
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
3
va416xx-hal/NOTICE
Normal file
3
va416xx-hal/NOTICE
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Rust Hardware Abstraction Layer (HAL) crate for the Vorago VA416xx family of MCUs
|
||||||
|
|
||||||
|
This software contains code developed at the University of Stuttgart.
|
47
va416xx-hal/README.md
Normal file
47
va416xx-hal/README.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# HAL for the Vorago VA416xx MCU family
|
||||||
|
|
||||||
|
This repository contains the **H**ardware **A**bstraction **L**ayer (HAL), which is an additional
|
||||||
|
hardware abstraction on top of the [peripheral access API](https://egit.irs.uni-stuttgart.de/rust/va416xx).
|
||||||
|
|
||||||
|
It is the result of reading the datasheet for the device and encoding a type-safe layer over the
|
||||||
|
raw PAC. This crate also implements traits specified by the
|
||||||
|
[embedded-hal](https://github.com/rust-embedded/embedded-hal) project, making it compatible with
|
||||||
|
various drivers in the embedded rust ecosystem.
|
||||||
|
|
||||||
|
## Supported Boards
|
||||||
|
|
||||||
|
The first way to use this HAL will probably be with the
|
||||||
|
[PEB1 development board](https://www.voragotech.com/products/peb1va416x0-development-kit).
|
||||||
|
The BSP provided for this board also contains instructions how to flash the board.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Building an application requires the `thumbv7em-none-eabihf` cross-compiler toolchain.
|
||||||
|
If you have not installed it yet, you can do so with
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rustup target add thumbv7em-none-eabihf
|
||||||
|
```
|
||||||
|
|
||||||
|
After that, you can use `cargo build` to build the development version of the crate.
|
||||||
|
|
||||||
|
If you have not done this yet, it is recommended to read some of the excellent resources
|
||||||
|
available to learn Rust:
|
||||||
|
|
||||||
|
- [Rust Embedded Book](https://docs.rust-embedded.org/book/)
|
||||||
|
- [Rust Discovery Book](https://docs.rust-embedded.org/discovery/)
|
||||||
|
|
||||||
|
## Using the `.cargo/config.toml` file
|
||||||
|
|
||||||
|
Use the following command to have a starting `config.toml` file
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cp .cargo/def-config.toml .cargo/config.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
You then can adapt the `config.toml` to your needs. For example, you can configure runners
|
||||||
|
to conveniently flash with `cargo run`.
|
||||||
|
|
||||||
|
## Setting up your own binary crate
|
||||||
|
|
||||||
|
TODO
|
37
va416xx-hal/examples/blinky.rs
Normal file
37
va416xx-hal/examples/blinky.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
//! Simple blinky example
|
||||||
|
#![no_main]
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
use cortex_m_rt::{entry};
|
||||||
|
use panic_halt as _;
|
||||||
|
use va416xx_hal::pac;
|
||||||
|
|
||||||
|
// Mask for the LED
|
||||||
|
const LED_PG5: u32 = 1 << 5;
|
||||||
|
|
||||||
|
#[entry]
|
||||||
|
fn main() -> ! {
|
||||||
|
let dp = pac::Peripherals::take().unwrap();
|
||||||
|
// Enable all peripheral clocks
|
||||||
|
dp.SYSCONFIG
|
||||||
|
.peripheral_clk_enable
|
||||||
|
.modify(|_, w| unsafe { w.bits(0xffffffff) });
|
||||||
|
dp.PORTG.dir().modify(|_, w| unsafe { w.bits(LED_PG5) });
|
||||||
|
dp.PORTG.datamask().modify(|_, w| unsafe { w.bits(LED_PG5)});
|
||||||
|
for _ in 0..10 {
|
||||||
|
dp.PORTG
|
||||||
|
.clrout()
|
||||||
|
.write(|w| unsafe { w.bits(LED_PG5) });
|
||||||
|
cortex_m::asm::delay(5_000_000);
|
||||||
|
dp.PORTG
|
||||||
|
.setout()
|
||||||
|
.write(|w| unsafe { w.bits(LED_PG5) });
|
||||||
|
cortex_m::asm::delay(5_000_000);
|
||||||
|
}
|
||||||
|
loop {
|
||||||
|
dp.PORTG
|
||||||
|
.togout()
|
||||||
|
.write(|w| unsafe { w.bits(LED_PG5) });
|
||||||
|
cortex_m::asm::delay(25_000_000);
|
||||||
|
}
|
||||||
|
}
|
20
va416xx-hal/examples/rtt-log.rs
Normal file
20
va416xx-hal/examples/rtt-log.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//! Code to test RTT logger functionality
|
||||||
|
#![no_main]
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
use cortex_m_rt::entry;
|
||||||
|
use panic_halt as _;
|
||||||
|
use rtt_target::{rprintln, rtt_init_print};
|
||||||
|
use va416xx as _;
|
||||||
|
|
||||||
|
#[entry]
|
||||||
|
fn main() -> ! {
|
||||||
|
rtt_init_print!();
|
||||||
|
rprintln!("-- RTT Demo --");
|
||||||
|
let mut counter = 0;
|
||||||
|
loop {
|
||||||
|
rprintln!("{}: Hello, world!", counter);
|
||||||
|
counter += 1;
|
||||||
|
cortex_m::asm::delay(75_000_000);
|
||||||
|
}
|
||||||
|
}
|
5
va416xx-hal/jlink-gdb.sh
Executable file
5
va416xx-hal/jlink-gdb.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Start the JLinkGDBServer while also specifying the JLinkScript file. The JLinkScript is necessary
|
||||||
|
# to disable ROM protection to allow flashing
|
||||||
|
JLinkGDBServer -select USB -device Cortex-M4 -endian little -if SWD -speed 2000 \
|
||||||
|
-LocalhostOnly -vd -jlinkscriptfile ./jlink/JLinkSettings.JLinkScript
|
77
va416xx-hal/jlink/JLinkSettings.JLinkScript
Normal file
77
va416xx-hal/jlink/JLinkSettings.JLinkScript
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*********************************************************************
|
||||||
|
* SEGGER Microcontroller GmbH *
|
||||||
|
* Solutions for real time microcontroller applications *
|
||||||
|
**********************************************************************
|
||||||
|
* *
|
||||||
|
* (c) 1995 - 2018 SEGGER Microcontroller GmbH *
|
||||||
|
* *
|
||||||
|
* www.segger.com Support: support@segger.com *
|
||||||
|
* *
|
||||||
|
**********************************************************************
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
File : JLinkSettings.JLinkScript
|
||||||
|
Purpose : J-Link target setup file for VORAGO VA416xx
|
||||||
|
---------------------------END-OF-HEADER------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
int DisableRomProt(void) {
|
||||||
|
JLINK_SYS_Report("VA416XX: Disabling ROM protection");
|
||||||
|
return JLINK_MEM_WriteU32(0x40010010, 0x1); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
int DisableWatchdog(void) {
|
||||||
|
JLINK_MEM_WriteU32(0x400210C0, 0x1ACCE551); // WDOGLOCK = 0x1ACCE551
|
||||||
|
JLINK_MEM_WriteU32(0x40021008, 0x0); // WDOGCONTROL = 0x0 (diable)
|
||||||
|
}
|
||||||
|
|
||||||
|
int SetupTarget (void) {
|
||||||
|
JLINK_SYS_Report("SetupTarget()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterResetTarget
|
||||||
|
*/
|
||||||
|
int AfterResetTarget (void) {
|
||||||
|
JLINK_SYS_Report("AfterResetTarget()");
|
||||||
|
// disable watchdog and unlock code RAM for write
|
||||||
|
DisableWatchdog();
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* BeforeTargetDownload
|
||||||
|
*/
|
||||||
|
int BeforeTargetDownload (void) {
|
||||||
|
JLINK_SYS_Report("BeforeTargetDownload()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetDownload
|
||||||
|
*/
|
||||||
|
int AfterTargetDownload (void) {
|
||||||
|
JLINK_SYS_Report("AfterTargetDownload()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x0
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* HandleBeforeFlashProg
|
||||||
|
*/
|
||||||
|
int HandleBeforeFlashProg(void) {
|
||||||
|
JLINK_SYS_Report("HandleBeforeFlashProg()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* HandleAfterFlashProg
|
||||||
|
*/
|
||||||
|
int HandleAfterFlashProg(void) {
|
||||||
|
JLINK_SYS_Report("HandleAfterFlashProg()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x0
|
||||||
|
}
|
13
va416xx-hal/jlink/jlink-reva.gdb
Normal file
13
va416xx-hal/jlink/jlink-reva.gdb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
target remote localhost:2331
|
||||||
|
|
||||||
|
# For some reason, this is problematic even if the JLinkScript disabled the remote
|
||||||
|
# write protection. Therefore, don't do it for now
|
||||||
|
# This is only problematic on board RevA
|
||||||
|
# monitor reset
|
||||||
|
|
||||||
|
# *try* to stop at the user entry point (it might be gone due to inlining)
|
||||||
|
break main
|
||||||
|
|
||||||
|
load
|
||||||
|
|
||||||
|
continue
|
11
va416xx-hal/jlink/jlink.gdb
Normal file
11
va416xx-hal/jlink/jlink.gdb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
target remote localhost:2331
|
||||||
|
|
||||||
|
# Reset is problematic on RevA, okay for RevB
|
||||||
|
monitor reset
|
||||||
|
|
||||||
|
# *try* to stop at the user entry point (it might be gone due to inlining)
|
||||||
|
break main
|
||||||
|
|
||||||
|
load
|
||||||
|
|
||||||
|
continue
|
14
va416xx-hal/memory.x
Normal file
14
va416xx-hal/memory.x
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
FLASH : ORIGIN = 0x00000000, LENGTH = 256K
|
||||||
|
/* RAM is a mandatory region. This RAM refers to the SRAM_0 */
|
||||||
|
RAM : ORIGIN = 0x1FFF8000, LENGTH = 32K
|
||||||
|
SRAM_1 : ORIGIN = 0x20000000, LENGTH = 32K
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is where the call stack will be allocated. */
|
||||||
|
/* The stack is of the full descending type. */
|
||||||
|
/* NOTE Do NOT modify `_stack_start` unless you know what you are doing */
|
||||||
|
/* SRAM_0 can be used for all busses: Instruction, Data and System */
|
||||||
|
/* SRAM_1 only supports the system bus */
|
||||||
|
_stack_start = ORIGIN(RAM) + LENGTH(RAM) - 4;
|
51
va416xx-hal/src/clock.rs
Normal file
51
va416xx-hal/src/clock.rs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
//! # API for clock related functionality
|
||||||
|
//!
|
||||||
|
//! This also includes functionality to enable the peripheral clocks
|
||||||
|
use va416xx::SYSCONFIG;
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq)]
|
||||||
|
pub enum PeripheralSelect {
|
||||||
|
Spi0 = 0,
|
||||||
|
Spi1 = 1,
|
||||||
|
Spi2 = 2,
|
||||||
|
Spi3 = 3,
|
||||||
|
Uart0 = 4,
|
||||||
|
Uart1 = 5,
|
||||||
|
Uart2 = 6,
|
||||||
|
I2c0 = 7,
|
||||||
|
I2c1 = 8,
|
||||||
|
I2c2 = 9,
|
||||||
|
Can0 = 10,
|
||||||
|
Can1 = 11,
|
||||||
|
Rng = 12,
|
||||||
|
Adc = 13,
|
||||||
|
Dac = 14,
|
||||||
|
Dma = 15,
|
||||||
|
Ebi = 16,
|
||||||
|
Eth = 17,
|
||||||
|
Spw = 18,
|
||||||
|
Clkgen = 19,
|
||||||
|
IrqRouter = 20,
|
||||||
|
IoConfig = 21,
|
||||||
|
Utility = 22,
|
||||||
|
Watchdog = 23,
|
||||||
|
PortA = 24,
|
||||||
|
PortB = 25,
|
||||||
|
PortC = 26,
|
||||||
|
PortD = 27,
|
||||||
|
PortE = 28,
|
||||||
|
PortF = 29,
|
||||||
|
PortG = 30
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn enable_peripheral_clock(syscfg: &mut SYSCONFIG, clock: PeripheralSelect) {
|
||||||
|
syscfg
|
||||||
|
.peripheral_clk_enable
|
||||||
|
.modify(|r, w| unsafe { w.bits(r.bits() | (1 << clock as u8)) });
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn disable_peripheral_clock(syscfg: &mut SYSCONFIG, clock: PeripheralSelect) {
|
||||||
|
syscfg
|
||||||
|
.peripheral_clk_enable
|
||||||
|
.modify(|r, w| unsafe { w.bits(r.bits() & !(1 << clock as u8)) });
|
||||||
|
}
|
7
va416xx-hal/src/lib.rs
Normal file
7
va416xx-hal/src/lib.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#![no_std]
|
||||||
|
|
||||||
|
pub use va416xx;
|
||||||
|
pub use va416xx as pac;
|
||||||
|
|
||||||
|
pub mod clock;
|
||||||
|
pub mod time;
|
156
va416xx-hal/src/time.rs
Normal file
156
va416xx-hal/src/time.rs
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
//! Time units
|
||||||
|
//!
|
||||||
|
//! See [`Hertz`], [`KiloHertz`] and [`MegaHertz`] for creating increasingly higher frequencies.
|
||||||
|
//!
|
||||||
|
//! The [`U32Ext`] trait adds various methods like `.hz()`, `.mhz()`, etc to the `u32` primitive type,
|
||||||
|
//! allowing it to be converted into frequencies.
|
||||||
|
|
||||||
|
/// Bits per second
|
||||||
|
#[derive(Clone, Copy, PartialEq, PartialOrd, Debug)]
|
||||||
|
pub struct Bps(pub u32);
|
||||||
|
|
||||||
|
/// Hertz
|
||||||
|
///
|
||||||
|
/// Create a frequency specified in [Hertz](https://en.wikipedia.org/wiki/Hertz).
|
||||||
|
///
|
||||||
|
/// See also [`KiloHertz`] and [`MegaHertz`] for semantically correct ways of creating higher
|
||||||
|
/// frequencies.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ## Create an 60 Hz frequency
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use stm32f1xx_hal::time::Hertz;
|
||||||
|
///
|
||||||
|
/// let freq = 60.hz();
|
||||||
|
/// ```
|
||||||
|
#[derive(Clone, Copy, PartialEq, PartialOrd, Debug)]
|
||||||
|
pub struct Hertz(pub u32);
|
||||||
|
|
||||||
|
/// Kilohertz
|
||||||
|
///
|
||||||
|
/// Create a frequency specified in kilohertz.
|
||||||
|
///
|
||||||
|
/// See also [`Hertz`] and [`MegaHertz`] for semantically correct ways of creating lower or higher
|
||||||
|
/// frequencies.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ## Create a 100 Khz frequency
|
||||||
|
///
|
||||||
|
/// This example creates a 100 KHz frequency. This could be used to set an I2C data rate or PWM
|
||||||
|
/// frequency, etc.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use stm32f1xx_hal::time::Hertz;
|
||||||
|
///
|
||||||
|
/// let freq = 100.khz();
|
||||||
|
/// ```
|
||||||
|
#[derive(Clone, Copy, PartialEq, PartialOrd, Debug)]
|
||||||
|
pub struct KiloHertz(pub u32);
|
||||||
|
|
||||||
|
/// Megahertz
|
||||||
|
///
|
||||||
|
/// Create a frequency specified in megahertz.
|
||||||
|
///
|
||||||
|
/// See also [`Hertz`] and [`KiloHertz`] for semantically correct ways of creating lower
|
||||||
|
/// frequencies.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ## Create a an 8 MHz frequency
|
||||||
|
///
|
||||||
|
/// This example creates an 8 MHz frequency that could be used to configure an SPI peripheral, etc.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use stm32f1xx_hal::time::Hertz;
|
||||||
|
///
|
||||||
|
/// let freq = 8.mhz();
|
||||||
|
/// ```
|
||||||
|
#[derive(Clone, Copy, PartialEq, PartialOrd, Debug)]
|
||||||
|
pub struct MegaHertz(pub u32);
|
||||||
|
|
||||||
|
/// Time unit
|
||||||
|
#[derive(PartialEq, PartialOrd, Clone, Copy)]
|
||||||
|
pub struct MilliSeconds(pub u32);
|
||||||
|
|
||||||
|
#[derive(PartialEq, PartialOrd, Clone, Copy)]
|
||||||
|
pub struct MicroSeconds(pub u32);
|
||||||
|
|
||||||
|
/// Extension trait that adds convenience methods to the `u32` type
|
||||||
|
pub trait U32Ext {
|
||||||
|
/// Wrap in `Bps`
|
||||||
|
fn bps(self) -> Bps;
|
||||||
|
|
||||||
|
/// Wrap in `Hertz`
|
||||||
|
fn hz(self) -> Hertz;
|
||||||
|
|
||||||
|
/// Wrap in `KiloHertz`
|
||||||
|
fn khz(self) -> KiloHertz;
|
||||||
|
|
||||||
|
/// Wrap in `MegaHertz`
|
||||||
|
fn mhz(self) -> MegaHertz;
|
||||||
|
|
||||||
|
/// Wrap in `MilliSeconds`
|
||||||
|
fn ms(self) -> MilliSeconds;
|
||||||
|
|
||||||
|
/// Wrap in `MicroSeconds`
|
||||||
|
fn us(self) -> MicroSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl U32Ext for u32 {
|
||||||
|
fn bps(self) -> Bps {
|
||||||
|
Bps(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn hz(self) -> Hertz {
|
||||||
|
Hertz(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn khz(self) -> KiloHertz {
|
||||||
|
KiloHertz(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mhz(self) -> MegaHertz {
|
||||||
|
MegaHertz(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn ms(self) -> MilliSeconds {
|
||||||
|
MilliSeconds(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn us(self) -> MicroSeconds {
|
||||||
|
MicroSeconds(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<KiloHertz> for Hertz {
|
||||||
|
fn from(val: KiloHertz) -> Self {
|
||||||
|
Self(val.0 * 1_000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<MegaHertz> for Hertz {
|
||||||
|
fn from(val: MegaHertz) -> Self {
|
||||||
|
Self(val.0 * 1_000_000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<MegaHertz> for KiloHertz {
|
||||||
|
fn from(val: MegaHertz) -> Self {
|
||||||
|
Self(val.0 * 1_000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<MilliSeconds> for Hertz {
|
||||||
|
fn from(val: MilliSeconds) -> Self {
|
||||||
|
Self(1_000 / val.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<MicroSeconds> for Hertz {
|
||||||
|
fn from(val: MicroSeconds) -> Self {
|
||||||
|
Self(1_000_000 / val.0)
|
||||||
|
}
|
||||||
|
}
|
@ -1 +0,0 @@
|
|||||||
Subproject commit da0cd6180f2d27abc90981ebadbdde6704dccd45
|
|
39
vorago-peb1/.cargo/def-config.toml
Normal file
39
vorago-peb1/.cargo/def-config.toml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
|
||||||
|
# uncomment ONE of these three option to make `cargo run` start a GDB session
|
||||||
|
# which option to pick depends on your system
|
||||||
|
# If the RevA board is used, replace jlink.gdb with jlink-reva.gdb
|
||||||
|
# runner = "arm-none-eabi-gdb -q -x jlink/jlink.gdb"
|
||||||
|
# runner = "gdb-multiarch -q -x jlink/jlink.gdb"
|
||||||
|
|
||||||
|
# runner = "arm-none-eabi-gdb -q -x jlink/jlink-reva.gdb"
|
||||||
|
# runner = "gdb-multiarch -q -x jlink/jlink-reva.gdb"
|
||||||
|
|
||||||
|
rustflags = [
|
||||||
|
# This is needed if your flash or ram addresses are not aligned to 0x10000 in memory.x
|
||||||
|
# See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
|
||||||
|
"-C", "link-arg=--nmagic",
|
||||||
|
|
||||||
|
# LLD (shipped with the Rust toolchain) is used as the default linker
|
||||||
|
"-C", "link-arg=-Tlink.x",
|
||||||
|
|
||||||
|
# if you run into problems with LLD switch to the GNU linker by commenting out
|
||||||
|
# this line
|
||||||
|
# "-C", "linker=arm-none-eabi-ld",
|
||||||
|
|
||||||
|
# if you need to link to pre-compiled C libraries provided by a C toolchain
|
||||||
|
# use GCC as the linker by commenting out both lines above and then
|
||||||
|
# uncommenting the three lines below
|
||||||
|
# "-C", "linker=arm-none-eabi-gcc",
|
||||||
|
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||||
|
# "-C", "link-arg=-nostartfiles",
|
||||||
|
]
|
||||||
|
|
||||||
|
[build]
|
||||||
|
# Pick ONE of these compilation targets
|
||||||
|
# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
|
||||||
|
# target = "thumbv7m-none-eabi" # Cortex-M3
|
||||||
|
# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
|
||||||
|
target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
|
||||||
|
# target = "thumbv8m.base-none-eabi" # Cortex-M23
|
||||||
|
# target = "thumbv8m.main-none-eabi" # Cortex-M33 (no FPU)
|
||||||
|
# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)
|
4
vorago-peb1/.gitignore
vendored
Normal file
4
vorago-peb1/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/target
|
||||||
|
Cargo.lock
|
||||||
|
|
||||||
|
/.cargo/config.toml
|
36
vorago-peb1/Cargo.toml
Normal file
36
vorago-peb1/Cargo.toml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[package]
|
||||||
|
name = "vorago-peb1"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"]
|
||||||
|
edition = "2021"
|
||||||
|
description = "Board Support Crate for the Vorago PEB1 development board"
|
||||||
|
homepage = "https://egit.irs.uni-stuttgart.de/rust/vorago-peb1"
|
||||||
|
repository = "https://egit.irs.uni-stuttgart.de/rust/vorago-peb1"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
keywords = ["no-std", "peb1", "cortex-m", "vorago", "va416xx"]
|
||||||
|
categories = ["embedded", "no-std", "hardware-support"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
cortex-m = "0.7"
|
||||||
|
cortex-m-rt = "0.7.1"
|
||||||
|
embedded-hal = { version = "0.2.6", features = ["unproven"] }
|
||||||
|
|
||||||
|
[dependencies.va416xx-hal]
|
||||||
|
path = "../va416xx-hal"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
rt = ["va416xx-hal/rt"]
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
panic-rtt-target = { version = "0.1", features = ["cortex-m"] }
|
||||||
|
rtt-target = { version = "0.3", features = ["cortex-m"] }
|
||||||
|
panic-halt = "0.2"
|
||||||
|
|
||||||
|
[profile.dev]
|
||||||
|
debug = true
|
||||||
|
lto = false
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
lto = true
|
||||||
|
debug = true
|
201
vorago-peb1/LICENSE-APACHE
Normal file
201
vorago-peb1/LICENSE-APACHE
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
3
vorago-peb1/NOTICE
Normal file
3
vorago-peb1/NOTICE
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Rust Board Support Package (BSP) crate for the Vorago PEB1 development board
|
||||||
|
|
||||||
|
This software contains code developed at the University of Stuttgart.
|
20
vorago-peb1/README.md
Normal file
20
vorago-peb1/README.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Rust BSP for the Vorago PEB1 development board
|
||||||
|
|
||||||
|
## Using the `.cargo/config.toml` file
|
||||||
|
|
||||||
|
Use the following command to have a starting `config.toml` file
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cp .cargo/def-config.toml .cargo/config.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
You then can adapt the `config.toml` to your needs. For example, you can configure runners
|
||||||
|
to conveniently flash with `cargo run`.
|
||||||
|
|
||||||
|
## Notes on board revisions
|
||||||
|
|
||||||
|
On RevA, issuing the `monitor reset` command in the GDB application is problematic and will prevent
|
||||||
|
the flashed binary from working properly. On board revision B, this was not an issue.
|
||||||
|
For that reason, two different `*.gdb` files were provided in the `jlink` folder for each
|
||||||
|
board revision. If you are not using these files, make sure to correctly configure your flash
|
||||||
|
tools depending on which tool or board your are using.
|
65
vorago-peb1/examples/blinky.rs
Normal file
65
vorago-peb1/examples/blinky.rs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
//! Simple blinky example
|
||||||
|
#![no_main]
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
use cortex_m_rt::entry;
|
||||||
|
use panic_halt as _;
|
||||||
|
use va416xx_hal::{
|
||||||
|
pac,
|
||||||
|
gpio::PinsG
|
||||||
|
};
|
||||||
|
use embedded_hal::digital::v2::{ToggleableOutputPin, OutputPin};
|
||||||
|
|
||||||
|
// Mask for the LED
|
||||||
|
const LED_PG5: u32 = 1 << 5;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
enum LibType {
|
||||||
|
Pac,
|
||||||
|
Hal,
|
||||||
|
Bsp,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[entry]
|
||||||
|
fn main() -> ! {
|
||||||
|
let mut dp = pac::Peripherals::take().unwrap();
|
||||||
|
let lib_type = LibType::Hal;
|
||||||
|
|
||||||
|
match lib_type {
|
||||||
|
LibType::Pac => {
|
||||||
|
// Enable all peripheral clocks
|
||||||
|
dp.SYSCONFIG
|
||||||
|
.peripheral_clk_enable
|
||||||
|
.modify(|_, w| w.portg().set_bit());
|
||||||
|
dp.PORTG.dir().modify(|_, w| unsafe { w.bits(LED_PG5) });
|
||||||
|
dp.PORTG
|
||||||
|
.datamask()
|
||||||
|
.modify(|_, w| unsafe { w.bits(LED_PG5) });
|
||||||
|
for _ in 0..10 {
|
||||||
|
dp.PORTG.clrout().write(|w| unsafe { w.bits(LED_PG5) });
|
||||||
|
cortex_m::asm::delay(5_000_000);
|
||||||
|
dp.PORTG.setout().write(|w| unsafe { w.bits(LED_PG5) });
|
||||||
|
cortex_m::asm::delay(5_000_000);
|
||||||
|
}
|
||||||
|
loop {
|
||||||
|
dp.PORTG.togout().write(|w| unsafe { w.bits(LED_PG5) });
|
||||||
|
cortex_m::asm::delay(25_000_000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LibType::Hal => {
|
||||||
|
let portg = PinsG::new(&mut dp.SYSCONFIG, Some(dp.IOCONFIG), dp.PORTG);
|
||||||
|
// Enable all peripheral clocks
|
||||||
|
let mut led = portg.pg5.into_push_pull_output();
|
||||||
|
for _ in 0..10 {
|
||||||
|
led.set_low().ok();
|
||||||
|
cortex_m::asm::delay(5_000_000);
|
||||||
|
led.set_high().ok();
|
||||||
|
};
|
||||||
|
loop {
|
||||||
|
led.toggle().ok();
|
||||||
|
cortex_m::asm::delay(25_000_000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LibType::Bsp => loop {},
|
||||||
|
}
|
||||||
|
}
|
5
vorago-peb1/jlink-gdb.sh
Executable file
5
vorago-peb1/jlink-gdb.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Start the JLinkGDBServer while also specifying the JLinkScript file. The JLinkScript is necessary
|
||||||
|
# to disable ROM protection to allow flashing
|
||||||
|
JLinkGDBServer -select USB -device Cortex-M4 -endian little -if SWD -speed 2000 \
|
||||||
|
-LocalhostOnly -vd -jlinkscriptfile ./jlink/JLinkSettings.JLinkScript
|
77
vorago-peb1/jlink/JLinkSettings.JLinkScript
Normal file
77
vorago-peb1/jlink/JLinkSettings.JLinkScript
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*********************************************************************
|
||||||
|
* SEGGER Microcontroller GmbH *
|
||||||
|
* Solutions for real time microcontroller applications *
|
||||||
|
**********************************************************************
|
||||||
|
* *
|
||||||
|
* (c) 1995 - 2018 SEGGER Microcontroller GmbH *
|
||||||
|
* *
|
||||||
|
* www.segger.com Support: support@segger.com *
|
||||||
|
* *
|
||||||
|
**********************************************************************
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
File : JLinkSettings.JLinkScript
|
||||||
|
Purpose : J-Link target setup file for VORAGO VA416xx
|
||||||
|
---------------------------END-OF-HEADER------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
int DisableRomProt(void) {
|
||||||
|
JLINK_SYS_Report("VA416XX: Disabling ROM protection");
|
||||||
|
return JLINK_MEM_WriteU32(0x40010010, 0x1); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
int DisableWatchdog(void) {
|
||||||
|
JLINK_MEM_WriteU32(0x400210C0, 0x1ACCE551); // WDOGLOCK = 0x1ACCE551
|
||||||
|
JLINK_MEM_WriteU32(0x40021008, 0x0); // WDOGCONTROL = 0x0 (diable)
|
||||||
|
}
|
||||||
|
|
||||||
|
int SetupTarget (void) {
|
||||||
|
JLINK_SYS_Report("SetupTarget()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterResetTarget
|
||||||
|
*/
|
||||||
|
int AfterResetTarget (void) {
|
||||||
|
JLINK_SYS_Report("AfterResetTarget()");
|
||||||
|
// disable watchdog and unlock code RAM for write
|
||||||
|
DisableWatchdog();
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* BeforeTargetDownload
|
||||||
|
*/
|
||||||
|
int BeforeTargetDownload (void) {
|
||||||
|
JLINK_SYS_Report("BeforeTargetDownload()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* AfterTargetDownload
|
||||||
|
*/
|
||||||
|
int AfterTargetDownload (void) {
|
||||||
|
JLINK_SYS_Report("AfterTargetDownload()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x0
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* HandleBeforeFlashProg
|
||||||
|
*/
|
||||||
|
int HandleBeforeFlashProg(void) {
|
||||||
|
JLINK_SYS_Report("HandleBeforeFlashProg()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
*
|
||||||
|
* HandleAfterFlashProg
|
||||||
|
*/
|
||||||
|
int HandleAfterFlashProg(void) {
|
||||||
|
JLINK_SYS_Report("HandleAfterFlashProg()");
|
||||||
|
return DisableRomProt(); // ROM_PROT = 0x0
|
||||||
|
}
|
13
vorago-peb1/jlink/jlink-reva.gdb
Normal file
13
vorago-peb1/jlink/jlink-reva.gdb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
target remote localhost:2331
|
||||||
|
|
||||||
|
# For some reason, this is problematic even if the JLinkScript disabled the remote
|
||||||
|
# write protection. Therefore, don't do it for now
|
||||||
|
# This is only problematic on board RevA
|
||||||
|
# monitor reset
|
||||||
|
|
||||||
|
# *try* to stop at the user entry point (it might be gone due to inlining)
|
||||||
|
break main
|
||||||
|
|
||||||
|
load
|
||||||
|
|
||||||
|
continue
|
11
vorago-peb1/jlink/jlink.gdb
Normal file
11
vorago-peb1/jlink/jlink.gdb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
target remote localhost:2331
|
||||||
|
|
||||||
|
# Reset is problematic on RevA, okay for RevB
|
||||||
|
monitor reset
|
||||||
|
|
||||||
|
# *try* to stop at the user entry point (it might be gone due to inlining)
|
||||||
|
break main
|
||||||
|
|
||||||
|
load
|
||||||
|
|
||||||
|
continue
|
14
vorago-peb1/memory.x
Normal file
14
vorago-peb1/memory.x
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
FLASH : ORIGIN = 0x00000000, LENGTH = 256K
|
||||||
|
/* RAM is a mandatory region. This RAM refers to the SRAM_0 */
|
||||||
|
RAM : ORIGIN = 0x1FFF8000, LENGTH = 32K
|
||||||
|
SRAM_1 : ORIGIN = 0x20000000, LENGTH = 32K
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is where the call stack will be allocated. */
|
||||||
|
/* The stack is of the full descending type. */
|
||||||
|
/* NOTE Do NOT modify `_stack_start` unless you know what you are doing */
|
||||||
|
/* SRAM_0 can be used for all busses: Instruction, Data and System */
|
||||||
|
/* SRAM_1 only supports the system bus */
|
||||||
|
_stack_start = ORIGIN(RAM) + LENGTH(RAM);
|
1
vorago-peb1/src/lib.rs
Normal file
1
vorago-peb1/src/lib.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
#![no_std]
|
Loading…
Reference in New Issue
Block a user