aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/settings.json1
-rw-r--r--embassy-mspm0/CHANGELOG.md3
-rw-r--r--embassy-mspm0/Cargo.toml145
-rw-r--r--embassy-mspm0/build.rs52
-rw-r--r--embassy-mspm0/src/gpio.rs4
-rw-r--r--embassy-mspm0/src/i2c_target.rs9
-rw-r--r--embassy-mspm0/src/lib.rs16
-rw-r--r--embassy-mspm0/src/macros.rs1
-rw-r--r--embassy-mspm0/src/time_driver.rs4
-rw-r--r--examples/mspm0g5187/.cargo/config.toml9
-rw-r--r--examples/mspm0g5187/Cargo.toml27
-rw-r--r--examples/mspm0g5187/README.md27
-rw-r--r--examples/mspm0g5187/build.rs37
-rw-r--r--examples/mspm0g5187/memory.x6
-rw-r--r--examples/mspm0g5187/src/bin/blinky.rs25
-rw-r--r--examples/mspm0g5187/src/bin/button.rs33
-rw-r--r--examples/mspm0g5187/src/bin/wwdt.rs54
17 files changed, 374 insertions, 79 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 73dfa53a4..2b99a313d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -34,6 +34,7 @@
34 // "examples/mspm0c1104/Cargo.toml", 34 // "examples/mspm0c1104/Cargo.toml",
35 // "examples/mspm0g3507/Cargo.toml", 35 // "examples/mspm0g3507/Cargo.toml",
36 // "examples/mspm0g3519/Cargo.toml", 36 // "examples/mspm0g3519/Cargo.toml",
37 // "examples/mspm0g5187/Cargo.toml",
37 // "examples/mspm0l1306/Cargo.toml", 38 // "examples/mspm0l1306/Cargo.toml",
38 // "examples/mspm0l2228/Cargo.toml", 39 // "examples/mspm0l2228/Cargo.toml",
39 // "examples/nrf52840-rtic/Cargo.toml", 40 // "examples/nrf52840-rtic/Cargo.toml",
diff --git a/embassy-mspm0/CHANGELOG.md b/embassy-mspm0/CHANGELOG.md
index 6972a8472..19275f35a 100644
--- a/embassy-mspm0/CHANGELOG.md
+++ b/embassy-mspm0/CHANGELOG.md
@@ -19,4 +19,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
19- feat: Add i2c target implementation (#4605) 19- feat: Add i2c target implementation (#4605)
20- fix: group irq handlers must check for NO_INTR (#4785) 20- fix: group irq handlers must check for NO_INTR (#4785)
21- feat: Add read_reset_cause function 21- feat: Add read_reset_cause function
22- feat: Add module Mathacl & example for mspm0g3507 (#4897) \ No newline at end of file 22- feat: Add module Mathacl & example for mspm0g3507 (#4897)
23- feat: Add MSPM0G5187 supportt
diff --git a/embassy-mspm0/Cargo.toml b/embassy-mspm0/Cargo.toml
index 254e0209b..cf2346328 100644
--- a/embassy-mspm0/Cargo.toml
+++ b/embassy-mspm0/Cargo.toml
@@ -73,7 +73,7 @@ critical-section = "1.2.0"
73micromath = "2.0.0" 73micromath = "2.0.0"
74 74
75# mspm0-metapac = { version = "" } 75# mspm0-metapac = { version = "" }
76mspm0-metapac = { git = "https://github.com/mspm0-rs/mspm0-data-generated/", tag = "mspm0-data-f21b04e9de074af4965bf67ec3646cb9fe1b9852" } 76mspm0-metapac = { git = "https://github.com/mspm0-rs/mspm0-data-generated/", tag = "mspm0-data-e91edd86813aa94cbb6737d34e4f1d22b8487cb6" }
77 77
78[build-dependencies] 78[build-dependencies]
79proc-macro2 = "1.0.94" 79proc-macro2 = "1.0.94"
@@ -81,7 +81,7 @@ quote = "1.0.40"
81cfg_aliases = "0.2.1" 81cfg_aliases = "0.2.1"
82 82
83# mspm0-metapac = { version = "", default-features = false, features = ["metadata"] } 83# mspm0-metapac = { version = "", default-features = false, features = ["metadata"] }
84mspm0-metapac = { git = "https://github.com/mspm0-rs/mspm0-data-generated/", tag = "mspm0-data-f21b04e9de074af4965bf67ec3646cb9fe1b9852", default-features = false, features = ["metadata"] } 84mspm0-metapac = { git = "https://github.com/mspm0-rs/mspm0-data-generated/", tag = "mspm0-data-e91edd86813aa94cbb6737d34e4f1d22b8487cb6", default-features = false, features = ["metadata"] }
85 85
86[features] 86[features]
87default = ["rt"] 87default = ["rt"]
@@ -153,15 +153,14 @@ time-driver-tima1 = ["_time-driver"]
153#! 153#!
154#! **Important:** Do not forget to adapt the target chip in your toolchain, 154#! **Important:** Do not forget to adapt the target chip in your toolchain,
155#! e.g. in `.cargo/config.toml`. 155#! e.g. in `.cargo/config.toml`.
156
157mspm0c1103dgs20 = ["mspm0-metapac/mspm0c1103dgs20"] 156mspm0c1103dgs20 = ["mspm0-metapac/mspm0c1103dgs20"]
158mspm0c1103dsg = ["mspm0-metapac/mspm0c1103dsg"]
159mspm0c1103dyy = ["mspm0-metapac/mspm0c1103dyy"]
160mspm0c1103ruk = ["mspm0-metapac/mspm0c1103ruk"] 157mspm0c1103ruk = ["mspm0-metapac/mspm0c1103ruk"]
158mspm0c1103dyy = ["mspm0-metapac/mspm0c1103dyy"]
159mspm0c1103dsg = ["mspm0-metapac/mspm0c1103dsg"]
161mspm0c1104dgs20 = ["mspm0-metapac/mspm0c1104dgs20"] 160mspm0c1104dgs20 = ["mspm0-metapac/mspm0c1104dgs20"]
162mspm0c1104dsg = ["mspm0-metapac/mspm0c1104dsg"]
163mspm0c1104dyy = ["mspm0-metapac/mspm0c1104dyy"]
164mspm0c1104ruk = ["mspm0-metapac/mspm0c1104ruk"] 161mspm0c1104ruk = ["mspm0-metapac/mspm0c1104ruk"]
162mspm0c1104dyy = ["mspm0-metapac/mspm0c1104dyy"]
163mspm0c1104dsg = ["mspm0-metapac/mspm0c1104dsg"]
165mspm0c1104ycj = ["mspm0-metapac/mspm0c1104ycj"] 164mspm0c1104ycj = ["mspm0-metapac/mspm0c1104ycj"]
166mspm0c1105pt = ["mspm0-metapac/mspm0c1105pt"] 165mspm0c1105pt = ["mspm0-metapac/mspm0c1105pt"]
167mspm0c1105rgz = ["mspm0-metapac/mspm0c1105rgz"] 166mspm0c1105rgz = ["mspm0-metapac/mspm0c1105rgz"]
@@ -181,43 +180,54 @@ mspm0c1106rge = ["mspm0-metapac/mspm0c1106rge"]
181mspm0c1106dgs20 = ["mspm0-metapac/mspm0c1106dgs20"] 180mspm0c1106dgs20 = ["mspm0-metapac/mspm0c1106dgs20"]
182mspm0c1106ruk = ["mspm0-metapac/mspm0c1106ruk"] 181mspm0c1106ruk = ["mspm0-metapac/mspm0c1106ruk"]
183mspm0c1106zcm = ["mspm0-metapac/mspm0c1106zcm"] 182mspm0c1106zcm = ["mspm0-metapac/mspm0c1106zcm"]
184mspm0g1105dgs28 = ["mspm0-metapac/mspm0g1105dgs28"]
185mspm0g1105pm = ["mspm0-metapac/mspm0g1105pm"]
186mspm0g1105pt = ["mspm0-metapac/mspm0g1105pt"]
187mspm0g1105rge = ["mspm0-metapac/mspm0g1105rge"] 183mspm0g1105rge = ["mspm0-metapac/mspm0g1105rge"]
188mspm0g1105rgz = ["mspm0-metapac/mspm0g1105rgz"] 184mspm0g1105dgs28 = ["mspm0-metapac/mspm0g1105dgs28"]
189mspm0g1105rhb = ["mspm0-metapac/mspm0g1105rhb"] 185mspm0g1105rhb = ["mspm0-metapac/mspm0g1105rhb"]
190mspm0g1106dgs28 = ["mspm0-metapac/mspm0g1106dgs28"] 186mspm0g1105rgz = ["mspm0-metapac/mspm0g1105rgz"]
191mspm0g1106pm = ["mspm0-metapac/mspm0g1106pm"] 187mspm0g1105pt = ["mspm0-metapac/mspm0g1105pt"]
192mspm0g1106pt = ["mspm0-metapac/mspm0g1106pt"] 188mspm0g1105pm = ["mspm0-metapac/mspm0g1105pm"]
193mspm0g1106rge = ["mspm0-metapac/mspm0g1106rge"] 189mspm0g1106rge = ["mspm0-metapac/mspm0g1106rge"]
194mspm0g1106rgz = ["mspm0-metapac/mspm0g1106rgz"] 190mspm0g1106dgs28 = ["mspm0-metapac/mspm0g1106dgs28"]
195mspm0g1106rhb = ["mspm0-metapac/mspm0g1106rhb"] 191mspm0g1106rhb = ["mspm0-metapac/mspm0g1106rhb"]
196mspm0g1107dgs28 = ["mspm0-metapac/mspm0g1107dgs28"] 192mspm0g1106rgz = ["mspm0-metapac/mspm0g1106rgz"]
197mspm0g1107pm = ["mspm0-metapac/mspm0g1107pm"] 193mspm0g1106pt = ["mspm0-metapac/mspm0g1106pt"]
198mspm0g1107pt = ["mspm0-metapac/mspm0g1107pt"] 194mspm0g1106pm = ["mspm0-metapac/mspm0g1106pm"]
199mspm0g1107rge = ["mspm0-metapac/mspm0g1107rge"] 195mspm0g1107rge = ["mspm0-metapac/mspm0g1107rge"]
200mspm0g1107rgz = ["mspm0-metapac/mspm0g1107rgz"] 196mspm0g1107dgs28 = ["mspm0-metapac/mspm0g1107dgs28"]
201mspm0g1107rhb = ["mspm0-metapac/mspm0g1107rhb"] 197mspm0g1107rhb = ["mspm0-metapac/mspm0g1107rhb"]
198mspm0g1107rgz = ["mspm0-metapac/mspm0g1107rgz"]
199mspm0g1107pt = ["mspm0-metapac/mspm0g1107pt"]
200mspm0g1107pm = ["mspm0-metapac/mspm0g1107pm"]
202mspm0g1107ycj = ["mspm0-metapac/mspm0g1107ycj"] 201mspm0g1107ycj = ["mspm0-metapac/mspm0g1107ycj"]
203mspm0g1505pm = ["mspm0-metapac/mspm0g1505pm"]
204mspm0g1505pt = ["mspm0-metapac/mspm0g1505pt"]
205mspm0g1505rge = ["mspm0-metapac/mspm0g1505rge"] 202mspm0g1505rge = ["mspm0-metapac/mspm0g1505rge"]
206mspm0g1505rgz = ["mspm0-metapac/mspm0g1505rgz"]
207mspm0g1505rhb = ["mspm0-metapac/mspm0g1505rhb"] 203mspm0g1505rhb = ["mspm0-metapac/mspm0g1505rhb"]
208mspm0g1506pm = ["mspm0-metapac/mspm0g1506pm"] 204mspm0g1505rgz = ["mspm0-metapac/mspm0g1505rgz"]
209mspm0g1506pt = ["mspm0-metapac/mspm0g1506pt"] 205mspm0g1505pt = ["mspm0-metapac/mspm0g1505pt"]
206mspm0g1505pm = ["mspm0-metapac/mspm0g1505pm"]
210mspm0g1506rge = ["mspm0-metapac/mspm0g1506rge"] 207mspm0g1506rge = ["mspm0-metapac/mspm0g1506rge"]
211mspm0g1506rgz = ["mspm0-metapac/mspm0g1506rgz"]
212mspm0g1506rhb = ["mspm0-metapac/mspm0g1506rhb"] 208mspm0g1506rhb = ["mspm0-metapac/mspm0g1506rhb"]
213mspm0g1507pm = ["mspm0-metapac/mspm0g1507pm"] 209mspm0g1506rgz = ["mspm0-metapac/mspm0g1506rgz"]
214mspm0g1507pt = ["mspm0-metapac/mspm0g1507pt"] 210mspm0g1506pt = ["mspm0-metapac/mspm0g1506pt"]
211mspm0g1506pm = ["mspm0-metapac/mspm0g1506pm"]
215mspm0g1507rge = ["mspm0-metapac/mspm0g1507rge"] 212mspm0g1507rge = ["mspm0-metapac/mspm0g1507rge"]
216mspm0g1507rgz = ["mspm0-metapac/mspm0g1507rgz"]
217mspm0g1507rhb = ["mspm0-metapac/mspm0g1507rhb"] 213mspm0g1507rhb = ["mspm0-metapac/mspm0g1507rhb"]
214mspm0g1507rgz = ["mspm0-metapac/mspm0g1507rgz"]
215mspm0g1507pt = ["mspm0-metapac/mspm0g1507pt"]
216mspm0g1507pm = ["mspm0-metapac/mspm0g1507pm"]
218mspm0g1507ycj = ["mspm0-metapac/mspm0g1507ycj"] 217mspm0g1507ycj = ["mspm0-metapac/mspm0g1507ycj"]
219mspm0g1519rgz = ["mspm0-metapac/mspm0g1519rgz"] 218mspm0g1518rhb = ["mspm0-metapac/mspm0g1518rhb"]
219mspm0g1518rgz = ["mspm0-metapac/mspm0g1518rgz"]
220mspm0g1518pt = ["mspm0-metapac/mspm0g1518pt"]
221mspm0g1518pm = ["mspm0-metapac/mspm0g1518pm"]
222mspm0g1518pz = ["mspm0-metapac/mspm0g1518pz"]
223mspm0g1518pn = ["mspm0-metapac/mspm0g1518pn"]
224mspm0g1518zaw = ["mspm0-metapac/mspm0g1518zaw"]
220mspm0g1519rhb = ["mspm0-metapac/mspm0g1519rhb"] 225mspm0g1519rhb = ["mspm0-metapac/mspm0g1519rhb"]
226mspm0g1519rgz = ["mspm0-metapac/mspm0g1519rgz"]
227mspm0g1519pt = ["mspm0-metapac/mspm0g1519pt"]
228mspm0g1519pm = ["mspm0-metapac/mspm0g1519pm"]
229mspm0g1519pz = ["mspm0-metapac/mspm0g1519pz"]
230mspm0g1519pn = ["mspm0-metapac/mspm0g1519pn"]
221mspm0g3105dgs20 = ["mspm0-metapac/mspm0g3105dgs20"] 231mspm0g3105dgs20 = ["mspm0-metapac/mspm0g3105dgs20"]
222mspm0g3105dgs28 = ["mspm0-metapac/mspm0g3105dgs28"] 232mspm0g3105dgs28 = ["mspm0-metapac/mspm0g3105dgs28"]
223mspm0g3105rhb = ["mspm0-metapac/mspm0g3105rhb"] 233mspm0g3105rhb = ["mspm0-metapac/mspm0g3105rhb"]
@@ -228,77 +238,92 @@ mspm0g3107dgs20 = ["mspm0-metapac/mspm0g3107dgs20"]
228mspm0g3107dgs28 = ["mspm0-metapac/mspm0g3107dgs28"] 238mspm0g3107dgs28 = ["mspm0-metapac/mspm0g3107dgs28"]
229mspm0g3107rhb = ["mspm0-metapac/mspm0g3107rhb"] 239mspm0g3107rhb = ["mspm0-metapac/mspm0g3107rhb"]
230mspm0g3505dgs28 = ["mspm0-metapac/mspm0g3505dgs28"] 240mspm0g3505dgs28 = ["mspm0-metapac/mspm0g3505dgs28"]
231mspm0g3505pm = ["mspm0-metapac/mspm0g3505pm"]
232mspm0g3505pt = ["mspm0-metapac/mspm0g3505pt"]
233mspm0g3505rgz = ["mspm0-metapac/mspm0g3505rgz"]
234mspm0g3505rhb = ["mspm0-metapac/mspm0g3505rhb"] 241mspm0g3505rhb = ["mspm0-metapac/mspm0g3505rhb"]
242mspm0g3505rgz = ["mspm0-metapac/mspm0g3505rgz"]
243mspm0g3505pt = ["mspm0-metapac/mspm0g3505pt"]
244mspm0g3505pm = ["mspm0-metapac/mspm0g3505pm"]
235mspm0g3506dgs28 = ["mspm0-metapac/mspm0g3506dgs28"] 245mspm0g3506dgs28 = ["mspm0-metapac/mspm0g3506dgs28"]
236mspm0g3506pm = ["mspm0-metapac/mspm0g3506pm"]
237mspm0g3506pt = ["mspm0-metapac/mspm0g3506pt"]
238mspm0g3506rgz = ["mspm0-metapac/mspm0g3506rgz"]
239mspm0g3506rhb = ["mspm0-metapac/mspm0g3506rhb"] 246mspm0g3506rhb = ["mspm0-metapac/mspm0g3506rhb"]
247mspm0g3506rgz = ["mspm0-metapac/mspm0g3506rgz"]
248mspm0g3506pt = ["mspm0-metapac/mspm0g3506pt"]
249mspm0g3506pm = ["mspm0-metapac/mspm0g3506pm"]
240mspm0g3507dgs28 = ["mspm0-metapac/mspm0g3507dgs28"] 250mspm0g3507dgs28 = ["mspm0-metapac/mspm0g3507dgs28"]
241mspm0g3507pm = ["mspm0-metapac/mspm0g3507pm"]
242mspm0g3507pt = ["mspm0-metapac/mspm0g3507pt"]
243mspm0g3507rgz = ["mspm0-metapac/mspm0g3507rgz"]
244mspm0g3507rhb = ["mspm0-metapac/mspm0g3507rhb"] 251mspm0g3507rhb = ["mspm0-metapac/mspm0g3507rhb"]
252mspm0g3507rgz = ["mspm0-metapac/mspm0g3507rgz"]
253mspm0g3507pt = ["mspm0-metapac/mspm0g3507pt"]
254mspm0g3507pm = ["mspm0-metapac/mspm0g3507pm"]
255mspm0g3518rhb = ["mspm0-metapac/mspm0g3518rhb"]
256mspm0g3518rgz = ["mspm0-metapac/mspm0g3518rgz"]
257mspm0g3518pt = ["mspm0-metapac/mspm0g3518pt"]
258mspm0g3518pm = ["mspm0-metapac/mspm0g3518pm"]
259mspm0g3518pz = ["mspm0-metapac/mspm0g3518pz"]
260mspm0g3518pn = ["mspm0-metapac/mspm0g3518pn"]
261mspm0g3519rhb = ["mspm0-metapac/mspm0g3519rhb"]
262mspm0g3519rgz = ["mspm0-metapac/mspm0g3519rgz"]
263mspm0g3519pt = ["mspm0-metapac/mspm0g3519pt"]
245mspm0g3519pm = ["mspm0-metapac/mspm0g3519pm"] 264mspm0g3519pm = ["mspm0-metapac/mspm0g3519pm"]
246mspm0g3519pn = ["mspm0-metapac/mspm0g3519pn"]
247mspm0g3519pz = ["mspm0-metapac/mspm0g3519pz"] 265mspm0g3519pz = ["mspm0-metapac/mspm0g3519pz"]
248mspm0g3519rgz = ["mspm0-metapac/mspm0g3519rgz"] 266mspm0g3519pn = ["mspm0-metapac/mspm0g3519pn"]
249mspm0g3519rhb = ["mspm0-metapac/mspm0g3519rhb"] 267mspm0g3519zaw = ["mspm0-metapac/mspm0g3519zaw"]
268mspm0g5187rhb = ["mspm0-metapac/mspm0g5187rhb"]
269mspm0g5187rgz = ["mspm0-metapac/mspm0g5187rgz"]
270mspm0g5187pt = ["mspm0-metapac/mspm0g5187pt"]
271mspm0g5187pm = ["mspm0-metapac/mspm0g5187pm"]
272mspm0g5187ruy = ["mspm0-metapac/mspm0g5187ruy"]
273mspm0g5187ycj = ["mspm0-metapac/mspm0g5187ycj"]
274mspm0g5187rge = ["mspm0-metapac/mspm0g5187rge"]
250mspm0h3216pt = ["mspm0-metapac/mspm0h3216pt"] 275mspm0h3216pt = ["mspm0-metapac/mspm0h3216pt"]
251mspm0l1105dgs20 = ["mspm0-metapac/mspm0l1105dgs20"] 276mspm0l1105dgs20 = ["mspm0-metapac/mspm0l1105dgs20"]
252mspm0l1105dgs28 = ["mspm0-metapac/mspm0l1105dgs28"] 277mspm0l1105dgs28 = ["mspm0-metapac/mspm0l1105dgs28"]
253mspm0l1105dyy = ["mspm0-metapac/mspm0l1105dyy"]
254mspm0l1105rge = ["mspm0-metapac/mspm0l1105rge"] 278mspm0l1105rge = ["mspm0-metapac/mspm0l1105rge"]
255mspm0l1105rtr = ["mspm0-metapac/mspm0l1105rtr"] 279mspm0l1105rtr = ["mspm0-metapac/mspm0l1105rtr"]
280mspm0l1105dyy = ["mspm0-metapac/mspm0l1105dyy"]
281mspm0l1106rhb = ["mspm0-metapac/mspm0l1106rhb"]
256mspm0l1106dgs20 = ["mspm0-metapac/mspm0l1106dgs20"] 282mspm0l1106dgs20 = ["mspm0-metapac/mspm0l1106dgs20"]
257mspm0l1106dgs28 = ["mspm0-metapac/mspm0l1106dgs28"] 283mspm0l1106dgs28 = ["mspm0-metapac/mspm0l1106dgs28"]
258mspm0l1106dyy = ["mspm0-metapac/mspm0l1106dyy"]
259mspm0l1106rge = ["mspm0-metapac/mspm0l1106rge"] 284mspm0l1106rge = ["mspm0-metapac/mspm0l1106rge"]
260mspm0l1106rhb = ["mspm0-metapac/mspm0l1106rhb"]
261mspm0l1106rtr = ["mspm0-metapac/mspm0l1106rtr"] 285mspm0l1106rtr = ["mspm0-metapac/mspm0l1106rtr"]
262mspm0l1227pm = ["mspm0-metapac/mspm0l1227pm"] 286mspm0l1106dyy = ["mspm0-metapac/mspm0l1106dyy"]
287mspm0l1227rhb = ["mspm0-metapac/mspm0l1227rhb"]
263mspm0l1227pn = ["mspm0-metapac/mspm0l1227pn"] 288mspm0l1227pn = ["mspm0-metapac/mspm0l1227pn"]
289mspm0l1227rgz = ["mspm0-metapac/mspm0l1227rgz"]
264mspm0l1227pt = ["mspm0-metapac/mspm0l1227pt"] 290mspm0l1227pt = ["mspm0-metapac/mspm0l1227pt"]
291mspm0l1227pm = ["mspm0-metapac/mspm0l1227pm"]
265mspm0l1227rge = ["mspm0-metapac/mspm0l1227rge"] 292mspm0l1227rge = ["mspm0-metapac/mspm0l1227rge"]
266mspm0l1227rgz = ["mspm0-metapac/mspm0l1227rgz"] 293mspm0l1228rhb = ["mspm0-metapac/mspm0l1228rhb"]
267mspm0l1227rhb = ["mspm0-metapac/mspm0l1227rhb"]
268mspm0l1228pm = ["mspm0-metapac/mspm0l1228pm"]
269mspm0l1228pn = ["mspm0-metapac/mspm0l1228pn"] 294mspm0l1228pn = ["mspm0-metapac/mspm0l1228pn"]
295mspm0l1228rgz = ["mspm0-metapac/mspm0l1228rgz"]
270mspm0l1228pt = ["mspm0-metapac/mspm0l1228pt"] 296mspm0l1228pt = ["mspm0-metapac/mspm0l1228pt"]
297mspm0l1228pm = ["mspm0-metapac/mspm0l1228pm"]
271mspm0l1228rge = ["mspm0-metapac/mspm0l1228rge"] 298mspm0l1228rge = ["mspm0-metapac/mspm0l1228rge"]
272mspm0l1228rgz = ["mspm0-metapac/mspm0l1228rgz"]
273mspm0l1228rhb = ["mspm0-metapac/mspm0l1228rhb"]
274mspm0l1303rge = ["mspm0-metapac/mspm0l1303rge"] 299mspm0l1303rge = ["mspm0-metapac/mspm0l1303rge"]
300mspm0l1304rhb = ["mspm0-metapac/mspm0l1304rhb"]
275mspm0l1304dgs20 = ["mspm0-metapac/mspm0l1304dgs20"] 301mspm0l1304dgs20 = ["mspm0-metapac/mspm0l1304dgs20"]
276mspm0l1304dgs28 = ["mspm0-metapac/mspm0l1304dgs28"] 302mspm0l1304dgs28 = ["mspm0-metapac/mspm0l1304dgs28"]
277mspm0l1304dyy = ["mspm0-metapac/mspm0l1304dyy"]
278mspm0l1304rge = ["mspm0-metapac/mspm0l1304rge"] 303mspm0l1304rge = ["mspm0-metapac/mspm0l1304rge"]
279mspm0l1304rhb = ["mspm0-metapac/mspm0l1304rhb"]
280mspm0l1304rtr = ["mspm0-metapac/mspm0l1304rtr"] 304mspm0l1304rtr = ["mspm0-metapac/mspm0l1304rtr"]
305mspm0l1304dyy = ["mspm0-metapac/mspm0l1304dyy"]
281mspm0l1305dgs20 = ["mspm0-metapac/mspm0l1305dgs20"] 306mspm0l1305dgs20 = ["mspm0-metapac/mspm0l1305dgs20"]
282mspm0l1305dgs28 = ["mspm0-metapac/mspm0l1305dgs28"] 307mspm0l1305dgs28 = ["mspm0-metapac/mspm0l1305dgs28"]
283mspm0l1305dyy = ["mspm0-metapac/mspm0l1305dyy"]
284mspm0l1305rge = ["mspm0-metapac/mspm0l1305rge"] 308mspm0l1305rge = ["mspm0-metapac/mspm0l1305rge"]
285mspm0l1305rtr = ["mspm0-metapac/mspm0l1305rtr"] 309mspm0l1305rtr = ["mspm0-metapac/mspm0l1305rtr"]
310mspm0l1305dyy = ["mspm0-metapac/mspm0l1305dyy"]
311mspm0l1306rhb = ["mspm0-metapac/mspm0l1306rhb"]
286mspm0l1306dgs20 = ["mspm0-metapac/mspm0l1306dgs20"] 312mspm0l1306dgs20 = ["mspm0-metapac/mspm0l1306dgs20"]
287mspm0l1306dgs28 = ["mspm0-metapac/mspm0l1306dgs28"] 313mspm0l1306dgs28 = ["mspm0-metapac/mspm0l1306dgs28"]
288mspm0l1306dyy = ["mspm0-metapac/mspm0l1306dyy"]
289mspm0l1306rge = ["mspm0-metapac/mspm0l1306rge"] 314mspm0l1306rge = ["mspm0-metapac/mspm0l1306rge"]
290mspm0l1306rhb = ["mspm0-metapac/mspm0l1306rhb"] 315mspm0l1306dyy = ["mspm0-metapac/mspm0l1306dyy"]
291mspm0l1343dgs20 = ["mspm0-metapac/mspm0l1343dgs20"] 316mspm0l1343dgs20 = ["mspm0-metapac/mspm0l1343dgs20"]
292mspm0l1344dgs20 = ["mspm0-metapac/mspm0l1344dgs20"] 317mspm0l1344dgs20 = ["mspm0-metapac/mspm0l1344dgs20"]
293mspm0l1345dgs28 = ["mspm0-metapac/mspm0l1345dgs28"] 318mspm0l1345dgs28 = ["mspm0-metapac/mspm0l1345dgs28"]
294mspm0l1346dgs28 = ["mspm0-metapac/mspm0l1346dgs28"] 319mspm0l1346dgs28 = ["mspm0-metapac/mspm0l1346dgs28"]
320mspm0l2227rgz = ["mspm0-metapac/mspm0l2227rgz"]
321mspm0l2227pt = ["mspm0-metapac/mspm0l2227pt"]
295mspm0l2227pm = ["mspm0-metapac/mspm0l2227pm"] 322mspm0l2227pm = ["mspm0-metapac/mspm0l2227pm"]
296mspm0l2227pn = ["mspm0-metapac/mspm0l2227pn"] 323mspm0l2227pn = ["mspm0-metapac/mspm0l2227pn"]
297mspm0l2227pt = ["mspm0-metapac/mspm0l2227pt"] 324mspm0l2228rgz = ["mspm0-metapac/mspm0l2228rgz"]
298mspm0l2227rgz = ["mspm0-metapac/mspm0l2227rgz"] 325mspm0l2228pt = ["mspm0-metapac/mspm0l2228pt"]
299mspm0l2228pm = ["mspm0-metapac/mspm0l2228pm"] 326mspm0l2228pm = ["mspm0-metapac/mspm0l2228pm"]
300mspm0l2228pn = ["mspm0-metapac/mspm0l2228pn"] 327mspm0l2228pn = ["mspm0-metapac/mspm0l2228pn"]
301mspm0l2228pt = ["mspm0-metapac/mspm0l2228pt"]
302mspm0l2228rgz = ["mspm0-metapac/mspm0l2228rgz"]
303msps003f3pw20 = ["mspm0-metapac/msps003f3pw20"] 328msps003f3pw20 = ["mspm0-metapac/msps003f3pw20"]
304msps003f4pw20 = ["mspm0-metapac/msps003f4pw20"] 329msps003f4pw20 = ["mspm0-metapac/msps003f4pw20"] \ No newline at end of file
diff --git a/embassy-mspm0/build.rs b/embassy-mspm0/build.rs
index 0fe056c4e..ac40adbdf 100644
--- a/embassy-mspm0/build.rs
+++ b/embassy-mspm0/build.rs
@@ -31,7 +31,7 @@ fn generate_code(cfgs: &mut CfgSet) {
31 PathBuf::from(env::var_os("OUT_DIR").unwrap()).display(), 31 PathBuf::from(env::var_os("OUT_DIR").unwrap()).display(),
32 ); 32 );
33 33
34 cfgs.declare_all(&["gpio_pb", "gpio_pc", "int_group1"]); 34 cfgs.declare_all(&["gpio_pb", "gpio_pc", "int_group1", "unicomm"]);
35 35
36 let chip_name = match env::vars() 36 let chip_name = match env::vars()
37 .map(|(a, _)| a) 37 .map(|(a, _)| a)
@@ -116,6 +116,10 @@ fn get_chip_cfgs(chip_name: &str) -> Vec<String> {
116 cfgs.push("mspm0g351x".to_string()); 116 cfgs.push("mspm0g351x".to_string());
117 } 117 }
118 118
119 if chip_name.starts_with("mspm0g518") {
120 cfgs.push("mspm0g518x".to_string());
121 }
122
119 if chip_name.starts_with("mspm0h321") { 123 if chip_name.starts_with("mspm0h321") {
120 cfgs.push("mspm0h321x".to_string()); 124 cfgs.push("mspm0h321x".to_string());
121 } 125 }
@@ -300,6 +304,15 @@ fn get_singletons(cfgs: &mut common::CfgSet) -> Vec<Singleton> {
300 // by the HAL. 304 // by the HAL.
301 "iomux" | "cpuss" => true, 305 "iomux" | "cpuss" => true,
302 306
307 // Unicomm instances get their own singletons, but we need to enable a cfg for unicomm drivers.
308 "unicomm" => {
309 cfgs.enable("unicomm");
310 false
311 }
312
313 // TODO: Remove after TIMB is fixed
314 "tim" if peripheral.name.starts_with("TIMB") => true,
315
303 _ => false, 316 _ => false,
304 }; 317 };
305 318
@@ -423,6 +436,8 @@ fn time_driver(singletons: &mut Vec<Singleton>, cfgs: &mut CfgSet) {
423 // Verify the selected timer is available 436 // Verify the selected timer is available
424 let selected_timer = match time_driver.as_ref().map(|x| x.as_ref()) { 437 let selected_timer = match time_driver.as_ref().map(|x| x.as_ref()) {
425 None => "", 438 None => "",
439 // TODO: Fix TIMB0
440 // Some("timb0") => "TIMB0",
426 Some("timg0") => "TIMG0", 441 Some("timg0") => "TIMG0",
427 Some("timg1") => "TIMG1", 442 Some("timg1") => "TIMG1",
428 Some("timg2") => "TIMG2", 443 Some("timg2") => "TIMG2",
@@ -440,16 +455,17 @@ fn time_driver(singletons: &mut Vec<Singleton>, cfgs: &mut CfgSet) {
440 Some("tima1") => "TIMA1", 455 Some("tima1") => "TIMA1",
441 Some("any") => { 456 Some("any") => {
442 // Order of timer candidates: 457 // Order of timer candidates:
443 // 1. 16-bit, 2 channel 458 // 1. Basic timers
444 // 2. 16-bit, 2 channel with shadow registers 459 // 2. 16-bit, 2 channel
445 // 3. 16-bit, 4 channel 460 // 3. 16-bit, 2 channel with shadow registers
446 // 4. 16-bit with QEI 461 // 4. 16-bit, 4 channel
447 // 5. Advanced timers 462 // 5. 16-bit with QEI
463 // 6. Advanced timers
448 // 464 //
449 // TODO: Select RTC first if available
450 // TODO: 32-bit timers are not considered yet 465 // TODO: 32-bit timers are not considered yet
451 [ 466 [
452 // 16-bit, 2 channel 467 // basic timers. No PWM pins
468 // "TIMB0", // 16-bit, 2 channel
453 "TIMG0", "TIMG1", "TIMG2", "TIMG3", // 16-bit, 2 channel with shadow registers 469 "TIMG0", "TIMG1", "TIMG2", "TIMG3", // 16-bit, 2 channel with shadow registers
454 "TIMG4", "TIMG5", "TIMG6", "TIMG7", // 16-bit, 4 channel 470 "TIMG4", "TIMG5", "TIMG6", "TIMG7", // 16-bit, 4 channel
455 "TIMG14", // 16-bit with QEI 471 "TIMG14", // 16-bit with QEI
@@ -519,6 +535,8 @@ fn generate_timers() -> TokenStream {
519 .peripherals 535 .peripherals
520 .iter() 536 .iter()
521 .filter(|p| p.name.starts_with("TIM")) 537 .filter(|p| p.name.starts_with("TIM"))
538 // TODO: Fix TIMB when used at time driver.
539 .filter(|p| !p.name.starts_with("TIMB"))
522 .map(|peripheral| { 540 .map(|peripheral| {
523 let name = Ident::new(&peripheral.name, Span::call_site()); 541 let name = Ident::new(&peripheral.name, Span::call_site());
524 let timers = &*TIMERS; 542 let timers = &*TIMERS;
@@ -730,6 +748,24 @@ struct TimerDesc {
730const TIMERS: LazyLock<HashMap<String, TimerDesc>> = LazyLock::new(|| { 748const TIMERS: LazyLock<HashMap<String, TimerDesc>> = LazyLock::new(|| {
731 let mut map = HashMap::new(); 749 let mut map = HashMap::new();
732 map.insert( 750 map.insert(
751 "TIMB0".into(),
752 TimerDesc {
753 bits: 16,
754 prescaler: true,
755 repeat_counter: false,
756 ccp_channels_internal: 2,
757 ccp_channels_external: 2,
758 external_pwm_channels: 0,
759 phase_load: false,
760 shadow_load: false,
761 shadow_ccs: false,
762 deadband: false,
763 fault_handler: false,
764 qei_hall: false,
765 },
766 );
767
768 map.insert(
733 "TIMG0".into(), 769 "TIMG0".into(),
734 TimerDesc { 770 TimerDesc {
735 bits: 16, 771 bits: 16,
diff --git a/embassy-mspm0/src/gpio.rs b/embassy-mspm0/src/gpio.rs
index d8eb42dc2..709102c59 100644
--- a/embassy-mspm0/src/gpio.rs
+++ b/embassy-mspm0/src/gpio.rs
@@ -841,6 +841,7 @@ impl<'d> embedded_hal_async::digital::Wait for OutputOpenDrain<'d> {
841 } 841 }
842} 842}
843 843
844#[cfg_attr(mspm0g518x, allow(dead_code))]
844#[derive(Copy, Clone)] 845#[derive(Copy, Clone)]
845pub struct PfType { 846pub struct PfType {
846 pull: Pull, 847 pull: Pull,
@@ -948,6 +949,7 @@ pub(crate) trait SealedPin {
948 }); 949 });
949 } 950 }
950 951
952 #[cfg_attr(mspm0g518x, allow(dead_code))]
951 fn update_pf(&self, ty: PfType) { 953 fn update_pf(&self, ty: PfType) {
952 let pincm = pac::IOMUX.pincm(self._pin_cm() as usize); 954 let pincm = pac::IOMUX.pincm(self._pin_cm() as usize);
953 let pf = pincm.read().pf(); 955 let pf = pincm.read().pf();
@@ -955,6 +957,7 @@ pub(crate) trait SealedPin {
955 set_pf(self._pin_cm() as usize, pf, ty); 957 set_pf(self._pin_cm() as usize, pf, ty);
956 } 958 }
957 959
960 #[cfg_attr(mspm0g518x, allow(dead_code))]
958 fn set_as_pf(&self, pf: u8, ty: PfType) { 961 fn set_as_pf(&self, pf: u8, ty: PfType) {
959 set_pf(self._pin_cm() as usize, pf, ty) 962 set_pf(self._pin_cm() as usize, pf, ty)
960 } 963 }
@@ -967,6 +970,7 @@ pub(crate) trait SealedPin {
967 /// 970 ///
968 /// Note that this also disables the internal weak pull-up and pull-down resistors. 971 /// Note that this also disables the internal weak pull-up and pull-down resistors.
969 #[inline] 972 #[inline]
973 #[cfg_attr(mspm0g518x, allow(dead_code))]
970 fn set_as_disconnected(&self) { 974 fn set_as_disconnected(&self) {
971 self.set_as_analog(); 975 self.set_as_analog();
972 } 976 }
diff --git a/embassy-mspm0/src/i2c_target.rs b/embassy-mspm0/src/i2c_target.rs
index 86be91415..e371fa903 100644
--- a/embassy-mspm0/src/i2c_target.rs
+++ b/embassy-mspm0/src/i2c_target.rs
@@ -12,12 +12,13 @@ use embassy_embedded_hal::SetConfig;
12use mspm0_metapac::i2c::vals::CpuIntIidxStat; 12use mspm0_metapac::i2c::vals::CpuIntIidxStat;
13 13
14use crate::gpio::{AnyPin, SealedPin}; 14use crate::gpio::{AnyPin, SealedPin};
15use crate::interrupt::InterruptExt;
16use crate::mode::{Async, Blocking, Mode};
17use crate::pac::{self, i2c::vals};
18use crate::{i2c, i2c_target, interrupt, Peri};
19// Re-use I2c controller types 15// Re-use I2c controller types
20use crate::i2c::{ClockSel, ConfigError, Info, Instance, InterruptHandler, SclPin, SdaPin, State}; 16use crate::i2c::{ClockSel, ConfigError, Info, Instance, InterruptHandler, SclPin, SdaPin, State};
17use crate::interrupt::InterruptExt;
18use crate::mode::{Async, Blocking, Mode};
19use crate::pac::i2c::vals;
20use crate::pac::{self};
21use crate::{Peri, i2c, i2c_target, interrupt};
21 22
22#[non_exhaustive] 23#[non_exhaustive]
23#[derive(Clone, Copy, PartialEq, Eq, Debug)] 24#[derive(Clone, Copy, PartialEq, Eq, Debug)]
diff --git a/embassy-mspm0/src/lib.rs b/embassy-mspm0/src/lib.rs
index c43c81853..548fb33ca 100644
--- a/embassy-mspm0/src/lib.rs
+++ b/embassy-mspm0/src/lib.rs
@@ -8,20 +8,23 @@
8)] 8)]
9#![doc = include_str!("../README.md")] 9#![doc = include_str!("../README.md")]
10 10
11// This mod MUST go first, so that the others see its macros. 11// These mods MUST go first, so that the others see the macros.
12pub(crate) mod fmt; 12pub(crate) mod fmt;
13
14// This must be declared early as well for
15mod macros; 13mod macros;
16 14
17pub mod adc; 15pub mod adc;
18pub mod dma; 16pub mod dma;
19pub mod gpio; 17pub mod gpio;
18// TODO: I2C unicomm
19#[cfg(not(unicomm))]
20pub mod i2c; 20pub mod i2c;
21#[cfg(not(unicomm))]
21pub mod i2c_target; 22pub mod i2c_target;
22#[cfg(any(mspm0g150x, mspm0g151x, mspm0g350x, mspm0g351x))] 23#[cfg(any(mspm0g150x, mspm0g151x, mspm0g350x, mspm0g351x))]
23pub mod mathacl; 24pub mod mathacl;
24pub mod timer; 25pub mod timer;
26// TODO: UART unicomm
27#[cfg(not(unicomm))]
25pub mod uart; 28pub mod uart;
26pub mod wwdt; 29pub mod wwdt;
27 30
@@ -276,7 +279,7 @@ pub enum ResetCause {
276 /// WWDT0 violation 279 /// WWDT0 violation
277 BootrstWwdt0Violation, 280 BootrstWwdt0Violation,
278 /// WWDT1 violation (G-series only) 281 /// WWDT1 violation (G-series only)
279 #[cfg(any(mspm0g110x, mspm0g150x, mspm0g151x, mspm0g310x, mspm0g350x, mspm0g351x))] 282 #[cfg(any(mspm0g110x, mspm0g150x, mspm0g151x, mspm0g310x, mspm0g350x, mspm0g351x, mspm0g518x))]
280 SysrstWwdt1Violation, 283 SysrstWwdt1Violation,
281 /// BSL exit (if present) 284 /// BSL exit (if present)
282 SysrstBslExit, 285 SysrstBslExit,
@@ -326,7 +329,8 @@ pub fn read_reset_cause() -> Result<ResetCause, u8> {
326 mspm0g151x, 329 mspm0g151x,
327 mspm0g310x, 330 mspm0g310x,
328 mspm0g350x, 331 mspm0g350x,
329 mspm0g351x 332 mspm0g351x,
333 mspm0g518x,
330 )))] 334 )))]
331 Id::BOOTNONPMUPARITY => Ok(BootrstNonPmuParityFault), 335 Id::BOOTNONPMUPARITY => Ok(BootrstNonPmuParityFault),
332 Id::BOOTCLKFAIL => Ok(BootrstClockFault), 336 Id::BOOTCLKFAIL => Ok(BootrstClockFault),
@@ -335,7 +339,7 @@ pub fn read_reset_cause() -> Result<ResetCause, u8> {
335 Id::BOOTWWDT0 => Ok(BootrstWwdt0Violation), 339 Id::BOOTWWDT0 => Ok(BootrstWwdt0Violation),
336 Id::SYSBSLEXIT => Ok(SysrstBslExit), 340 Id::SYSBSLEXIT => Ok(SysrstBslExit),
337 Id::SYSBSLENTRY => Ok(SysrstBslEntry), 341 Id::SYSBSLENTRY => Ok(SysrstBslEntry),
338 #[cfg(any(mspm0g110x, mspm0g150x, mspm0g151x, mspm0g310x, mspm0g350x, mspm0g351x))] 342 #[cfg(any(mspm0g110x, mspm0g150x, mspm0g151x, mspm0g310x, mspm0g350x, mspm0g351x, mspm0g518x))]
339 Id::SYSWWDT1 => Ok(SysrstWwdt1Violation), 343 Id::SYSWWDT1 => Ok(SysrstWwdt1Violation),
340 #[cfg(not(any(mspm0c110x, mspm0c1105_c1106, mspm0g351x, mspm0g151x)))] 344 #[cfg(not(any(mspm0c110x, mspm0c1105_c1106, mspm0g351x, mspm0g151x)))]
341 Id::SYSFLASHECC => Ok(SysrstFlashEccError), 345 Id::SYSFLASHECC => Ok(SysrstFlashEccError),
diff --git a/embassy-mspm0/src/macros.rs b/embassy-mspm0/src/macros.rs
index 5355e7d59..3a12a528a 100644
--- a/embassy-mspm0/src/macros.rs
+++ b/embassy-mspm0/src/macros.rs
@@ -1,5 +1,6 @@
1#![macro_use] 1#![macro_use]
2 2
3#[allow(unused)]
3macro_rules! new_pin { 4macro_rules! new_pin {
4 ($name: ident, $pf_type: expr) => {{ 5 ($name: ident, $pf_type: expr) => {{
5 let pin = $name; 6 let pin = $name;
diff --git a/embassy-mspm0/src/time_driver.rs b/embassy-mspm0/src/time_driver.rs
index 0743c667b..b42ff61c2 100644
--- a/embassy-mspm0/src/time_driver.rs
+++ b/embassy-mspm0/src/time_driver.rs
@@ -16,6 +16,8 @@ use crate::timer::SealedTimer;
16compile_error!("TIMG12 and TIMG13 are not supported by the time driver yet"); 16compile_error!("TIMG12 and TIMG13 are not supported by the time driver yet");
17 17
18// Currently TIMG12 and TIMG13 are excluded because those are 32-bit timers. 18// Currently TIMG12 and TIMG13 are excluded because those are 32-bit timers.
19#[cfg(time_driver_timb0)]
20type T = peripherals::TIMB0;
19#[cfg(time_driver_timg0)] 21#[cfg(time_driver_timg0)]
20type T = peripherals::TIMG0; 22type T = peripherals::TIMG0;
21#[cfg(time_driver_timg1)] 23#[cfg(time_driver_timg1)]
@@ -333,6 +335,8 @@ pub(crate) fn init(cs: CriticalSection) {
333 DRIVER.init(cs); 335 DRIVER.init(cs);
334} 336}
335 337
338// TODO: TIMB0
339
336#[cfg(time_driver_timg0)] 340#[cfg(time_driver_timg0)]
337#[interrupt] 341#[interrupt]
338fn TIMG0() { 342fn TIMG0() {
diff --git a/examples/mspm0g5187/.cargo/config.toml b/examples/mspm0g5187/.cargo/config.toml
new file mode 100644
index 000000000..ea407b411
--- /dev/null
+++ b/examples/mspm0g5187/.cargo/config.toml
@@ -0,0 +1,9 @@
1[target.'cfg(all(target_arch = "arm", target_os = "none"))']
2# replace MSPM0G5187 with your chip as listed in `probe-rs chip list`
3runner = "probe-rs run --restore-unwritten --verify --chip MSPM0G5187 --protocol=swd"
4
5[build]
6target = "thumbv6m-none-eabi"
7
8[env]
9DEFMT_LOG = "trace"
diff --git a/examples/mspm0g5187/Cargo.toml b/examples/mspm0g5187/Cargo.toml
new file mode 100644
index 000000000..3d64a127a
--- /dev/null
+++ b/examples/mspm0g5187/Cargo.toml
@@ -0,0 +1,27 @@
1[package]
2edition = "2024"
3name = "embassy-mspm0-g5187-examples"
4version = "0.1.0"
5license = "MIT OR Apache-2.0"
6publish = false
7
8[dependencies]
9embassy-mspm0 = { version = "0.1.0", path = "../../embassy-mspm0", features = ["mspm0g5187pm", "defmt", "rt", "time-driver-any"] }
10embassy-executor = { version = "0.9.0", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "executor-interrupt"] }
11embassy-sync = { version = "0.7.2", path = "../../embassy-sync", features = ["defmt"] }
12embassy-time = { version = "0.5.0", path = "../../embassy-time", features = ["defmt"] }
13panic-halt = "1.0.0"
14cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
15cortex-m-rt = { version = "0.7.0"}
16defmt = "1.0.1"
17defmt-rtt = "1.0.0"
18panic-probe = { version = "1.0.0", features = ["print-defmt"] }
19panic-semihosting = "0.6.0"
20
21[profile.release]
22debug = 2
23
24[package.metadata.embassy]
25build = [
26 { target = "thumbv6m-none-eabi", artifact-dir = "out/examples/mspm0g5187" }
27]
diff --git a/examples/mspm0g5187/README.md b/examples/mspm0g5187/README.md
new file mode 100644
index 000000000..12e7846fb
--- /dev/null
+++ b/examples/mspm0g5187/README.md
@@ -0,0 +1,27 @@
1# Examples for MSPM0G5187
2
3Run individual examples with
4```
5cargo run --bin <module-name>
6```
7for example
8```
9cargo run --bin blinky
10```
11
12## Checklist before running examples
13A large number of the examples are written for the [LP-MSPM0G5187](https://www.ti.com/tool/LP-MSPM0G5187) board.
14
15You might need to adjust `.cargo/config.toml`, `Cargo.toml` and possibly update pin numbers or peripherals to match the specific MCU or board you are using.
16
17* [ ] Update .cargo/config.toml with the correct probe-rs command to use your specific MCU. For example for G5187 it should be `probe-rs run --chip MSPM0G5187`. (use `probe-rs chip list` to find your chip)
18* [ ] Update Cargo.toml to have the correct `embassy-mspm0` feature. For the LP-MSPM0G3519 it should be `mspm0g3519pz`. Look in the `Cargo.toml` file of the `embassy-mspm0` project to find the correct feature flag for your chip.
19* [ ] If your board has a special clock or power configuration, make sure that it is set up appropriately.
20* [ ] If your board has different pin mapping, update any pin numbers or peripherals in the given example code to match your schematic
21
22If you are unsure, please drop by the Embassy Matrix chat for support, and let us know:
23
24* Which example you are trying to run
25* Which chip and board you are using
26
27Embassy Chat: https://matrix.to/#/#embassy-rs:matrix.org
diff --git a/examples/mspm0g5187/build.rs b/examples/mspm0g5187/build.rs
new file mode 100644
index 000000000..2d777c2d3
--- /dev/null
+++ b/examples/mspm0g5187/build.rs
@@ -0,0 +1,37 @@
1//! This build script copies the `memory.x` file from the crate root into
2//! a directory where the linker can always find it at build time.
3//! For many projects this is optional, as the linker always searches the
4//! project root directory -- wherever `Cargo.toml` is. However, if you
5//! are using a workspace or have a more complicated build setup, this
6//! build script becomes required. Additionally, by requesting that
7//! Cargo re-run the build script whenever `memory.x` is changed,
8//! updating `memory.x` ensures a rebuild of the application with the
9//! new memory settings.
10
11use std::env;
12use std::fs::File;
13use std::io::Write;
14use std::path::PathBuf;
15
16fn main() {
17 // Put `memory.x` in our output directory and ensure it's
18 // on the linker search path.
19 let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap());
20 File::create(out.join("memory.x"))
21 .unwrap()
22 .write_all(include_bytes!("memory.x"))
23 .unwrap();
24 println!("cargo:rustc-link-search={}", out.display());
25
26 // By default, Cargo will re-run a build script whenever
27 // any file in the project changes. By specifying `memory.x`
28 // here, we ensure the build script is only re-run when
29 // `memory.x` is changed.
30 println!("cargo:rerun-if-changed=memory.x");
31
32 println!("cargo:rustc-link-arg-bins=--nmagic");
33 println!("cargo:rustc-link-arg-bins=-Tlink.x");
34 println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
35 // You must tell cargo to link interrupt groups if the rt feature is enabled.
36 println!("cargo:rustc-link-arg-bins=-Tinterrupt_group.x");
37}
diff --git a/examples/mspm0g5187/memory.x b/examples/mspm0g5187/memory.x
new file mode 100644
index 000000000..37e381fbd
--- /dev/null
+++ b/examples/mspm0g5187/memory.x
@@ -0,0 +1,6 @@
1MEMORY
2{
3 FLASH : ORIGIN = 0x00000000, LENGTH = 128K
4 /* Select non-parity range of SRAM due to SRAM_ERR_01 errata in SLAZ758 */
5 RAM : ORIGIN = 0x20200000, LENGTH = 32K
6}
diff --git a/examples/mspm0g5187/src/bin/blinky.rs b/examples/mspm0g5187/src/bin/blinky.rs
new file mode 100644
index 000000000..47eaf1535
--- /dev/null
+++ b/examples/mspm0g5187/src/bin/blinky.rs
@@ -0,0 +1,25 @@
1#![no_std]
2#![no_main]
3
4use defmt::*;
5use embassy_executor::Spawner;
6use embassy_mspm0::Config;
7use embassy_mspm0::gpio::{Level, Output};
8use embassy_time::Timer;
9use {defmt_rtt as _, panic_halt as _};
10
11#[embassy_executor::main]
12async fn main(_spawner: Spawner) -> ! {
13 info!("Hello world!");
14 let p = embassy_mspm0::init(Config::default());
15
16 let mut led1 = Output::new(p.PA0, Level::Low);
17 led1.set_inversion(true);
18
19 loop {
20 Timer::after_millis(400).await;
21
22 info!("Toggle");
23 led1.toggle();
24 }
25}
diff --git a/examples/mspm0g5187/src/bin/button.rs b/examples/mspm0g5187/src/bin/button.rs
new file mode 100644
index 000000000..2ed15e354
--- /dev/null
+++ b/examples/mspm0g5187/src/bin/button.rs
@@ -0,0 +1,33 @@
1#![no_std]
2#![no_main]
3
4use defmt::*;
5use embassy_executor::Spawner;
6use embassy_mspm0::Config;
7use embassy_mspm0::gpio::{Input, Level, Output, Pull};
8use {defmt_rtt as _, panic_halt as _};
9
10#[embassy_executor::main]
11async fn main(_spawner: Spawner) -> ! {
12 info!("Hello world!");
13
14 let p = embassy_mspm0::init(Config::default());
15
16 let led1 = p.PA0;
17 let s2 = p.PA7;
18
19 let mut led1 = Output::new(led1, Level::Low);
20
21 let mut s2 = Input::new(s2, Pull::Up);
22
23 // led1 is active low
24 led1.set_high();
25
26 loop {
27 s2.wait_for_falling_edge().await;
28
29 info!("Switch 2 was pressed");
30
31 led1.toggle();
32 }
33}
diff --git a/examples/mspm0g5187/src/bin/wwdt.rs b/examples/mspm0g5187/src/bin/wwdt.rs
new file mode 100644
index 000000000..a5de781f3
--- /dev/null
+++ b/examples/mspm0g5187/src/bin/wwdt.rs
@@ -0,0 +1,54 @@
1//! Example of using window watchdog timer in the MSPM0G5187 chip.
2//!
3//! It tests the use case when watchdog timer is expired and when watchdog is pet too early.
4
5#![no_std]
6#![no_main]
7
8use defmt::*;
9use embassy_executor::Spawner;
10use embassy_mspm0::gpio::{Level, Output};
11use embassy_mspm0::wwdt::{ClosedWindowPercentage, Config, Timeout, Watchdog};
12use embassy_time::Timer;
13use {defmt_rtt as _, panic_halt as _};
14
15#[embassy_executor::main]
16async fn main(_spawner: Spawner) -> ! {
17 info!("Hello world!");
18
19 let p = embassy_mspm0::init(Default::default());
20 let mut conf = Config::default();
21 conf.timeout = Timeout::Sec1;
22
23 // watchdog also resets the system if the pet comes too early,
24 // less than 250 msec == 25% from 1 sec
25 conf.closed_window = ClosedWindowPercentage::TwentyFive;
26 let mut wdt = Watchdog::new(p.WWDT0, conf);
27 info!("Started the watchdog timer");
28
29 let mut led1 = Output::new(p.PA0, Level::High);
30 led1.set_inversion(true);
31 Timer::after_millis(900).await;
32
33 for _ in 1..=5 {
34 info!("pet watchdog");
35 led1.toggle();
36 wdt.pet();
37 Timer::after_millis(500).await;
38 }
39
40 // watchdog timeout test
41 info!("Stopped the pet command, device will reset in less than 1 second");
42 loop {
43 led1.toggle();
44 Timer::after_millis(500).await;
45 }
46
47 // watchdog "too early" test
48 // info!("Device will reset when the pet comes too early");
49 // loop {
50 // led1.toggle();
51 // wdt.pet();
52 // Timer::after_millis(200).await;
53 // }
54}