diff options
| -rw-r--r-- | .vscode/settings.json | 1 | ||||
| -rwxr-xr-x | ci.sh | 4 | ||||
| -rw-r--r-- | embassy-nxp/Cargo.toml | 5 | ||||
| -rw-r--r-- | embassy-nxp/build.rs | 10 | ||||
| -rw-r--r-- | embassy-nxp/src/chips/mimxrt1062.rs | 282 | ||||
| -rw-r--r-- | embassy-nxp/src/gpio/rt1xxx.rs | 62 | ||||
| -rw-r--r-- | embassy-nxp/src/lib.rs | 1 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/.cargo/config.toml | 8 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/Cargo.toml | 29 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/build.rs | 12 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/src/bin/blinky.rs | 25 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/src/bin/button.rs | 36 | ||||
| -rw-r--r-- | examples/mimxrt1062-evk/src/lib.rs | 60 |
13 files changed, 522 insertions, 13 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index 070e8fbd3..6edd9312a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | // "examples/nrf5340/Cargo.toml", | 37 | // "examples/nrf5340/Cargo.toml", |
| 38 | // "examples/nrf-rtos-trace/Cargo.toml", | 38 | // "examples/nrf-rtos-trace/Cargo.toml", |
| 39 | // "examples/mimxrt1011/Cargo.toml", | 39 | // "examples/mimxrt1011/Cargo.toml", |
| 40 | // "examples/mimxrt1062-evk/Cargo.toml", | ||
| 40 | // "examples/rp/Cargo.toml", | 41 | // "examples/rp/Cargo.toml", |
| 41 | // "examples/std/Cargo.toml", | 42 | // "examples/std/Cargo.toml", |
| 42 | // "examples/stm32c0/Cargo.toml", | 43 | // "examples/stm32c0/Cargo.toml", |
| @@ -181,7 +181,8 @@ cargo batch \ | |||
| 181 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32u073mb,defmt,exti,time-driver-any,time \ | 181 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32u073mb,defmt,exti,time-driver-any,time \ |
| 182 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32u083rc,defmt,exti,time-driver-any,time \ | 182 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32u083rc,defmt,exti,time-driver-any,time \ |
| 183 | --- build --release --manifest-path embassy-nxp/Cargo.toml --target thumbv8m.main-none-eabihf --features lpc55,defmt \ | 183 | --- build --release --manifest-path embassy-nxp/Cargo.toml --target thumbv8m.main-none-eabihf --features lpc55,defmt \ |
| 184 | --- build --release --manifest-path embassy-nxp/Cargo.toml --target thumbv7em-none-eabihf --features mimxrt1011,defmt,time-driver-pit \ | 184 | --- build --release --manifest-path embassy-nxp/Cargo.toml --target thumbv7em-none-eabihf --features mimxrt1011,rt,defmt,time-driver-pit \ |
| 185 | --- build --release --manifest-path embassy-nxp/Cargo.toml --target thumbv7em-none-eabihf --features mimxrt1062,rt,defmt,time-driver-pit \ | ||
| 185 | --- build --release --manifest-path embassy-mspm0/Cargo.toml --target thumbv6m-none-eabi --features mspm0c1104dgs20,defmt,time-driver-any \ | 186 | --- build --release --manifest-path embassy-mspm0/Cargo.toml --target thumbv6m-none-eabi --features mspm0c1104dgs20,defmt,time-driver-any \ |
| 186 | --- build --release --manifest-path embassy-mspm0/Cargo.toml --target thumbv6m-none-eabi --features mspm0g3507pm,defmt,time-driver-any \ | 187 | --- build --release --manifest-path embassy-mspm0/Cargo.toml --target thumbv6m-none-eabi --features mspm0g3507pm,defmt,time-driver-any \ |
| 187 | --- build --release --manifest-path embassy-mspm0/Cargo.toml --target thumbv6m-none-eabi --features mspm0g3519pz,defmt,time-driver-any \ | 188 | --- build --release --manifest-path embassy-mspm0/Cargo.toml --target thumbv6m-none-eabi --features mspm0g3519pz,defmt,time-driver-any \ |
| @@ -266,6 +267,7 @@ cargo batch \ | |||
| 266 | --- build --release --manifest-path examples/stm32wl/Cargo.toml --target thumbv7em-none-eabi --artifact-dir out/examples/stm32wl \ | 267 | --- build --release --manifest-path examples/stm32wl/Cargo.toml --target thumbv7em-none-eabi --artifact-dir out/examples/stm32wl \ |
| 267 | --- build --release --manifest-path examples/lpc55s69/Cargo.toml --target thumbv8m.main-none-eabihf --artifact-dir out/examples/lpc55s69 \ | 268 | --- build --release --manifest-path examples/lpc55s69/Cargo.toml --target thumbv8m.main-none-eabihf --artifact-dir out/examples/lpc55s69 \ |
| 268 | --- build --release --manifest-path examples/mimxrt1011/Cargo.toml --target thumbv7em-none-eabihf --artifact-dir out/examples/mimxrt1011 \ | 269 | --- build --release --manifest-path examples/mimxrt1011/Cargo.toml --target thumbv7em-none-eabihf --artifact-dir out/examples/mimxrt1011 \ |
| 270 | --- build --release --manifest-path examples/mimxrt1062-evk/Cargo.toml --target thumbv7em-none-eabihf --artifact-dir out/examples/mimxrt1062-evk \ | ||
| 269 | --- build --release --manifest-path examples/mspm0g3507/Cargo.toml --target thumbv6m-none-eabi --artifact-dir out/examples/mspm0g3507 \ | 271 | --- build --release --manifest-path examples/mspm0g3507/Cargo.toml --target thumbv6m-none-eabi --artifact-dir out/examples/mspm0g3507 \ |
| 270 | --- build --release --manifest-path examples/mspm0g3519/Cargo.toml --target thumbv6m-none-eabi --artifact-dir out/examples/mspm0g3519 \ | 272 | --- build --release --manifest-path examples/mspm0g3519/Cargo.toml --target thumbv6m-none-eabi --artifact-dir out/examples/mspm0g3519 \ |
| 271 | --- build --release --manifest-path examples/mspm0l1306/Cargo.toml --target thumbv6m-none-eabi --artifact-dir out/examples/mspm0l1306 \ | 273 | --- build --release --manifest-path examples/mspm0l1306/Cargo.toml --target thumbv6m-none-eabi --artifact-dir out/examples/mspm0l1306 \ |
diff --git a/embassy-nxp/Cargo.toml b/embassy-nxp/Cargo.toml index 625906183..293791d34 100644 --- a/embassy-nxp/Cargo.toml +++ b/embassy-nxp/Cargo.toml | |||
| @@ -17,13 +17,13 @@ embassy-time-queue-utils = { version = "0.1", path = "../embassy-time-queue-util | |||
| 17 | 17 | ||
| 18 | ## Chip dependencies | 18 | ## Chip dependencies |
| 19 | lpc55-pac = { version = "0.5.0", optional = true } | 19 | lpc55-pac = { version = "0.5.0", optional = true } |
| 20 | nxp-pac = { version = "0.1.0", optional = true, git = "https://github.com/i509VCB/nxp-pac", rev = "1e010dbe75ab0e14dd908e4646391403414c8a8e" } | 20 | nxp-pac = { version = "0.1.0", optional = true, git = "https://github.com/i509VCB/nxp-pac", rev = "be4dd0936c20d5897364a381b1d95a99514c1e7e" } |
| 21 | 21 | ||
| 22 | imxrt-rt = { version = "0.1.7", optional = true, features = ["device"] } | 22 | imxrt-rt = { version = "0.1.7", optional = true, features = ["device"] } |
| 23 | 23 | ||
| 24 | [build-dependencies] | 24 | [build-dependencies] |
| 25 | cfg_aliases = "0.2.1" | 25 | cfg_aliases = "0.2.1" |
| 26 | nxp-pac = { version = "0.1.0", git = "https://github.com/i509VCB/nxp-pac", rev = "1e010dbe75ab0e14dd908e4646391403414c8a8e", features = ["metadata"], optional = true } | 26 | nxp-pac = { version = "0.1.0", git = "https://github.com/i509VCB/nxp-pac", rev = "be4dd0936c20d5897364a381b1d95a99514c1e7e", features = ["metadata"], optional = true } |
| 27 | proc-macro2 = "1.0.95" | 27 | proc-macro2 = "1.0.95" |
| 28 | quote = "1.0.15" | 28 | quote = "1.0.15" |
| 29 | 29 | ||
| @@ -58,3 +58,4 @@ _time_driver = ["dep:embassy-time-driver", "dep:embassy-time-queue-utils"] | |||
| 58 | #! ### Chip selection features | 58 | #! ### Chip selection features |
| 59 | lpc55 = ["dep:lpc55-pac"] | 59 | lpc55 = ["dep:lpc55-pac"] |
| 60 | mimxrt1011 = ["nxp-pac/mimxrt1011", "_rt1xxx", "dep:imxrt-rt"] | 60 | mimxrt1011 = ["nxp-pac/mimxrt1011", "_rt1xxx", "dep:imxrt-rt"] |
| 61 | mimxrt1062 = ["nxp-pac/mimxrt1062", "_rt1xxx", "dep:imxrt-rt"] | ||
diff --git a/embassy-nxp/build.rs b/embassy-nxp/build.rs index 6c10d0e69..f3c062c87 100644 --- a/embassy-nxp/build.rs +++ b/embassy-nxp/build.rs | |||
| @@ -32,10 +32,12 @@ fn main() { | |||
| 32 | .to_ascii_lowercase(); | 32 | .to_ascii_lowercase(); |
| 33 | 33 | ||
| 34 | cfg_aliases! { | 34 | cfg_aliases! { |
| 35 | rt1xxx: { feature = "mimxrt1011" }, | 35 | rt1xxx: { any(feature = "mimxrt1011", feature = "mimxrt1062") }, |
| 36 | gpio1: { feature = "mimxrt1011" }, | 36 | gpio1: { any(feature = "mimxrt1011", feature = "mimxrt1062") }, |
| 37 | gpio2: { feature = "mimxrt1011" }, | 37 | gpio2: { any(feature = "mimxrt1011", feature = "mimxrt1062") }, |
| 38 | gpio5: { feature = "mimxrt1011" }, | 38 | gpio3: { feature = "mimxrt1062" }, |
| 39 | gpio4: { feature = "mimxrt1062" }, | ||
| 40 | gpio5: { any(feature = "mimxrt1011", feature = "mimxrt1062") }, | ||
| 39 | } | 41 | } |
| 40 | 42 | ||
| 41 | eprintln!("chip: {chip_name}"); | 43 | eprintln!("chip: {chip_name}"); |
diff --git a/embassy-nxp/src/chips/mimxrt1062.rs b/embassy-nxp/src/chips/mimxrt1062.rs new file mode 100644 index 000000000..ef153bd66 --- /dev/null +++ b/embassy-nxp/src/chips/mimxrt1062.rs | |||
| @@ -0,0 +1,282 @@ | |||
| 1 | // This must be imported so that __preinit is defined. | ||
| 2 | use imxrt_rt as _; | ||
| 3 | pub use nxp_pac as pac; | ||
| 4 | |||
| 5 | embassy_hal_internal::peripherals! { | ||
| 6 | // External pins. These are not only GPIOs, they are multi-purpose pins and can be used by other | ||
| 7 | // peripheral types (e.g. I2C). | ||
| 8 | GPIO_AD_B0_00, | ||
| 9 | GPIO_AD_B0_01, | ||
| 10 | GPIO_AD_B0_02, | ||
| 11 | GPIO_AD_B0_03, | ||
| 12 | GPIO_AD_B0_04, | ||
| 13 | GPIO_AD_B0_05, | ||
| 14 | GPIO_AD_B0_06, | ||
| 15 | GPIO_AD_B0_07, | ||
| 16 | GPIO_AD_B0_08, | ||
| 17 | GPIO_AD_B0_09, | ||
| 18 | GPIO_AD_B0_10, | ||
| 19 | GPIO_AD_B0_11, | ||
| 20 | GPIO_AD_B0_12, | ||
| 21 | GPIO_AD_B0_13, | ||
| 22 | GPIO_AD_B0_14, | ||
| 23 | GPIO_AD_B0_15, | ||
| 24 | GPIO_AD_B1_00, | ||
| 25 | GPIO_AD_B1_01, | ||
| 26 | GPIO_AD_B1_02, | ||
| 27 | GPIO_AD_B1_03, | ||
| 28 | GPIO_AD_B1_04, | ||
| 29 | GPIO_AD_B1_05, | ||
| 30 | GPIO_AD_B1_06, | ||
| 31 | GPIO_AD_B1_07, | ||
| 32 | GPIO_AD_B1_08, | ||
| 33 | GPIO_AD_B1_09, | ||
| 34 | GPIO_AD_B1_10, | ||
| 35 | GPIO_AD_B1_11, | ||
| 36 | GPIO_AD_B1_12, | ||
| 37 | GPIO_AD_B1_13, | ||
| 38 | GPIO_AD_B1_14, | ||
| 39 | GPIO_AD_B1_15, | ||
| 40 | GPIO_B0_00, | ||
| 41 | GPIO_B0_01, | ||
| 42 | GPIO_B0_02, | ||
| 43 | GPIO_B0_03, | ||
| 44 | GPIO_B0_04, | ||
| 45 | GPIO_B0_05, | ||
| 46 | GPIO_B0_06, | ||
| 47 | GPIO_B0_07, | ||
| 48 | GPIO_B0_08, | ||
| 49 | GPIO_B0_09, | ||
| 50 | GPIO_B0_10, | ||
| 51 | GPIO_B0_11, | ||
| 52 | GPIO_B0_12, | ||
| 53 | GPIO_B0_13, | ||
| 54 | GPIO_B0_14, | ||
| 55 | GPIO_B0_15, | ||
| 56 | GPIO_B1_00, | ||
| 57 | GPIO_B1_01, | ||
| 58 | GPIO_B1_02, | ||
| 59 | GPIO_B1_03, | ||
| 60 | GPIO_B1_04, | ||
| 61 | GPIO_B1_05, | ||
| 62 | GPIO_B1_06, | ||
| 63 | GPIO_B1_07, | ||
| 64 | GPIO_B1_08, | ||
| 65 | GPIO_B1_09, | ||
| 66 | GPIO_B1_10, | ||
| 67 | GPIO_B1_11, | ||
| 68 | GPIO_B1_12, | ||
| 69 | GPIO_B1_13, | ||
| 70 | GPIO_B1_14, | ||
| 71 | GPIO_B1_15, | ||
| 72 | GPIO_EMC_00, | ||
| 73 | GPIO_EMC_01, | ||
| 74 | GPIO_EMC_02, | ||
| 75 | GPIO_EMC_03, | ||
| 76 | GPIO_EMC_04, | ||
| 77 | GPIO_EMC_05, | ||
| 78 | GPIO_EMC_06, | ||
| 79 | GPIO_EMC_07, | ||
| 80 | GPIO_EMC_08, | ||
| 81 | GPIO_EMC_09, | ||
| 82 | GPIO_EMC_10, | ||
| 83 | GPIO_EMC_11, | ||
| 84 | GPIO_EMC_12, | ||
| 85 | GPIO_EMC_13, | ||
| 86 | GPIO_EMC_14, | ||
| 87 | GPIO_EMC_15, | ||
| 88 | GPIO_EMC_16, | ||
| 89 | GPIO_EMC_17, | ||
| 90 | GPIO_EMC_18, | ||
| 91 | GPIO_EMC_19, | ||
| 92 | GPIO_EMC_20, | ||
| 93 | GPIO_EMC_21, | ||
| 94 | GPIO_EMC_22, | ||
| 95 | GPIO_EMC_23, | ||
| 96 | GPIO_EMC_24, | ||
| 97 | GPIO_EMC_25, | ||
| 98 | GPIO_EMC_26, | ||
| 99 | GPIO_EMC_27, | ||
| 100 | GPIO_EMC_28, | ||
| 101 | GPIO_EMC_29, | ||
| 102 | GPIO_EMC_30, | ||
| 103 | GPIO_EMC_31, | ||
| 104 | GPIO_EMC_32, | ||
| 105 | GPIO_EMC_33, | ||
| 106 | GPIO_EMC_34, | ||
| 107 | GPIO_EMC_35, | ||
| 108 | GPIO_EMC_36, | ||
| 109 | GPIO_EMC_37, | ||
| 110 | GPIO_EMC_38, | ||
| 111 | GPIO_EMC_39, | ||
| 112 | GPIO_EMC_40, | ||
| 113 | GPIO_EMC_41, | ||
| 114 | GPIO_SD_B0_00, | ||
| 115 | GPIO_SD_B0_01, | ||
| 116 | GPIO_SD_B0_02, | ||
| 117 | GPIO_SD_B0_03, | ||
| 118 | GPIO_SD_B0_04, | ||
| 119 | GPIO_SD_B0_05, | ||
| 120 | GPIO_SD_B1_00, | ||
| 121 | GPIO_SD_B1_01, | ||
| 122 | GPIO_SD_B1_02, | ||
| 123 | GPIO_SD_B1_03, | ||
| 124 | GPIO_SD_B1_04, | ||
| 125 | GPIO_SD_B1_05, | ||
| 126 | GPIO_SD_B1_06, | ||
| 127 | GPIO_SD_B1_07, | ||
| 128 | GPIO_SD_B1_08, | ||
| 129 | GPIO_SD_B1_09, | ||
| 130 | GPIO_SD_B1_10, | ||
| 131 | GPIO_SD_B1_11, | ||
| 132 | WAKEUP, | ||
| 133 | PMIC_ON_REQ, | ||
| 134 | PMIC_STBY_REQ, | ||
| 135 | } | ||
| 136 | |||
| 137 | impl_gpio! { | ||
| 138 | // GPIO Bank 1 | ||
| 139 | GPIO_AD_B0_00(Gpio1, 0); | ||
| 140 | GPIO_AD_B0_01(Gpio1, 1); | ||
| 141 | GPIO_AD_B0_02(Gpio1, 2); | ||
| 142 | GPIO_AD_B0_03(Gpio1, 3); | ||
| 143 | GPIO_AD_B0_04(Gpio1, 4); | ||
| 144 | GPIO_AD_B0_05(Gpio1, 5); | ||
| 145 | GPIO_AD_B0_06(Gpio1, 6); | ||
| 146 | GPIO_AD_B0_07(Gpio1, 7); | ||
| 147 | GPIO_AD_B0_08(Gpio1, 8); | ||
| 148 | GPIO_AD_B0_09(Gpio1, 9); | ||
| 149 | GPIO_AD_B0_10(Gpio1, 10); | ||
| 150 | GPIO_AD_B0_11(Gpio1, 11); | ||
| 151 | GPIO_AD_B0_12(Gpio1, 12); | ||
| 152 | GPIO_AD_B0_13(Gpio1, 13); | ||
| 153 | GPIO_AD_B0_14(Gpio1, 14); | ||
| 154 | GPIO_AD_B0_15(Gpio1, 15); | ||
| 155 | GPIO_AD_B1_00(Gpio1, 16); | ||
| 156 | GPIO_AD_B1_01(Gpio1, 17); | ||
| 157 | GPIO_AD_B1_02(Gpio1, 18); | ||
| 158 | GPIO_AD_B1_03(Gpio1, 19); | ||
| 159 | GPIO_AD_B1_04(Gpio1, 20); | ||
| 160 | GPIO_AD_B1_05(Gpio1, 21); | ||
| 161 | GPIO_AD_B1_06(Gpio1, 22); | ||
| 162 | GPIO_AD_B1_07(Gpio1, 23); | ||
| 163 | GPIO_AD_B1_08(Gpio1, 24); | ||
| 164 | GPIO_AD_B1_09(Gpio1, 25); | ||
| 165 | GPIO_AD_B1_10(Gpio1, 26); | ||
| 166 | GPIO_AD_B1_11(Gpio1, 27); | ||
| 167 | GPIO_AD_B1_12(Gpio1, 28); | ||
| 168 | GPIO_AD_B1_13(Gpio1, 29); | ||
| 169 | GPIO_AD_B1_14(Gpio1, 30); | ||
| 170 | GPIO_AD_B1_15(Gpio1, 31); | ||
| 171 | |||
| 172 | // GPIO Bank 2 | ||
| 173 | GPIO_B0_00(Gpio2, 0); | ||
| 174 | GPIO_B0_01(Gpio2, 1); | ||
| 175 | GPIO_B0_02(Gpio2, 2); | ||
| 176 | GPIO_B0_03(Gpio2, 3); | ||
| 177 | GPIO_B0_04(Gpio2, 4); | ||
| 178 | GPIO_B0_05(Gpio2, 5); | ||
| 179 | GPIO_B0_06(Gpio2, 6); | ||
| 180 | GPIO_B0_07(Gpio2, 7); | ||
| 181 | GPIO_B0_08(Gpio2, 8); | ||
| 182 | GPIO_B0_09(Gpio2, 9); | ||
| 183 | GPIO_B0_10(Gpio2, 10); | ||
| 184 | GPIO_B0_11(Gpio2, 11); | ||
| 185 | GPIO_B0_12(Gpio2, 12); | ||
| 186 | GPIO_B0_13(Gpio2, 13); | ||
| 187 | GPIO_B0_14(Gpio2, 14); | ||
| 188 | GPIO_B0_15(Gpio2, 15); | ||
| 189 | GPIO_B1_00(Gpio2, 16); | ||
| 190 | GPIO_B1_01(Gpio2, 17); | ||
| 191 | GPIO_B1_02(Gpio2, 18); | ||
| 192 | GPIO_B1_03(Gpio2, 19); | ||
| 193 | GPIO_B1_04(Gpio2, 20); | ||
| 194 | GPIO_B1_05(Gpio2, 21); | ||
| 195 | GPIO_B1_06(Gpio2, 22); | ||
| 196 | GPIO_B1_07(Gpio2, 23); | ||
| 197 | GPIO_B1_08(Gpio2, 24); | ||
| 198 | GPIO_B1_09(Gpio2, 25); | ||
| 199 | GPIO_B1_10(Gpio2, 26); | ||
| 200 | GPIO_B1_11(Gpio2, 27); | ||
| 201 | GPIO_B1_12(Gpio2, 28); | ||
| 202 | GPIO_B1_13(Gpio2, 29); | ||
| 203 | GPIO_B1_14(Gpio2, 30); | ||
| 204 | GPIO_B1_15(Gpio2, 31); | ||
| 205 | |||
| 206 | // GPIO Bank 4 (EMC is 4, then 3) | ||
| 207 | GPIO_EMC_00(Gpio4, 0); | ||
| 208 | GPIO_EMC_01(Gpio4, 1); | ||
| 209 | GPIO_EMC_02(Gpio4, 2); | ||
| 210 | GPIO_EMC_03(Gpio4, 3); | ||
| 211 | GPIO_EMC_04(Gpio4, 4); | ||
| 212 | GPIO_EMC_05(Gpio4, 5); | ||
| 213 | GPIO_EMC_06(Gpio4, 6); | ||
| 214 | GPIO_EMC_07(Gpio4, 7); | ||
| 215 | GPIO_EMC_08(Gpio4, 8); | ||
| 216 | GPIO_EMC_09(Gpio4, 9); | ||
| 217 | GPIO_EMC_10(Gpio4, 10); | ||
| 218 | GPIO_EMC_11(Gpio4, 11); | ||
| 219 | GPIO_EMC_12(Gpio4, 12); | ||
| 220 | GPIO_EMC_13(Gpio4, 13); | ||
| 221 | GPIO_EMC_14(Gpio4, 14); | ||
| 222 | GPIO_EMC_15(Gpio4, 15); | ||
| 223 | GPIO_EMC_16(Gpio4, 16); | ||
| 224 | GPIO_EMC_17(Gpio4, 17); | ||
| 225 | GPIO_EMC_18(Gpio4, 18); | ||
| 226 | GPIO_EMC_19(Gpio4, 19); | ||
| 227 | GPIO_EMC_20(Gpio4, 20); | ||
| 228 | GPIO_EMC_21(Gpio4, 21); | ||
| 229 | GPIO_EMC_22(Gpio4, 22); | ||
| 230 | GPIO_EMC_23(Gpio4, 23); | ||
| 231 | GPIO_EMC_24(Gpio4, 24); | ||
| 232 | GPIO_EMC_25(Gpio4, 25); | ||
| 233 | GPIO_EMC_26(Gpio4, 26); | ||
| 234 | GPIO_EMC_27(Gpio4, 27); | ||
| 235 | GPIO_EMC_28(Gpio4, 28); | ||
| 236 | GPIO_EMC_29(Gpio4, 29); | ||
| 237 | GPIO_EMC_30(Gpio4, 30); | ||
| 238 | GPIO_EMC_31(Gpio4, 31); | ||
| 239 | |||
| 240 | // GPIO Bank 3 | ||
| 241 | GPIO_EMC_32(Gpio3, 18); | ||
| 242 | GPIO_EMC_33(Gpio3, 19); | ||
| 243 | GPIO_EMC_34(Gpio3, 20); | ||
| 244 | GPIO_EMC_35(Gpio3, 21); | ||
| 245 | GPIO_EMC_36(Gpio3, 22); | ||
| 246 | GPIO_EMC_37(Gpio3, 23); | ||
| 247 | GPIO_EMC_38(Gpio3, 24); | ||
| 248 | GPIO_EMC_39(Gpio3, 25); | ||
| 249 | GPIO_EMC_40(Gpio3, 26); | ||
| 250 | GPIO_EMC_41(Gpio3, 27); | ||
| 251 | GPIO_SD_B0_00(Gpio3, 12); | ||
| 252 | GPIO_SD_B0_01(Gpio3, 13); | ||
| 253 | GPIO_SD_B0_02(Gpio3, 14); | ||
| 254 | GPIO_SD_B0_03(Gpio3, 15); | ||
| 255 | GPIO_SD_B0_04(Gpio3, 16); | ||
| 256 | GPIO_SD_B0_05(Gpio3, 17); | ||
| 257 | GPIO_SD_B1_00(Gpio3, 0); | ||
| 258 | GPIO_SD_B1_01(Gpio3, 1); | ||
| 259 | GPIO_SD_B1_02(Gpio3, 2); | ||
| 260 | GPIO_SD_B1_03(Gpio3, 3); | ||
| 261 | GPIO_SD_B1_04(Gpio3, 4); | ||
| 262 | GPIO_SD_B1_05(Gpio3, 5); | ||
| 263 | GPIO_SD_B1_06(Gpio3, 6); | ||
| 264 | GPIO_SD_B1_07(Gpio3, 7); | ||
| 265 | GPIO_SD_B1_08(Gpio3, 8); | ||
| 266 | GPIO_SD_B1_09(Gpio3, 9); | ||
| 267 | GPIO_SD_B1_10(Gpio3, 10); | ||
| 268 | GPIO_SD_B1_11(Gpio3, 11); | ||
| 269 | |||
| 270 | WAKEUP(Gpio5, 0); | ||
| 271 | PMIC_ON_REQ(Gpio5, 1); | ||
| 272 | PMIC_STBY_REQ(Gpio5, 2); | ||
| 273 | } | ||
| 274 | |||
| 275 | pub(crate) mod _generated { | ||
| 276 | #![allow(dead_code)] | ||
| 277 | #![allow(unused_imports)] | ||
| 278 | #![allow(non_snake_case)] | ||
| 279 | #![allow(missing_docs)] | ||
| 280 | |||
| 281 | include!(concat!(env!("OUT_DIR"), "/_generated.rs")); | ||
| 282 | } | ||
diff --git a/embassy-nxp/src/gpio/rt1xxx.rs b/embassy-nxp/src/gpio/rt1xxx.rs index 9c58e8a7d..1d60a0d51 100644 --- a/embassy-nxp/src/gpio/rt1xxx.rs +++ b/embassy-nxp/src/gpio/rt1xxx.rs | |||
| @@ -12,11 +12,11 @@ use nxp_pac::iomuxc::vals::Pus; | |||
| 12 | 12 | ||
| 13 | use crate::chip::{mux_address, pad_address}; | 13 | use crate::chip::{mux_address, pad_address}; |
| 14 | use crate::pac::common::{Reg, RW}; | 14 | use crate::pac::common::{Reg, RW}; |
| 15 | use crate::pac::gpio::Gpio; | ||
| 15 | #[cfg(feature = "rt")] | 16 | #[cfg(feature = "rt")] |
| 16 | use crate::pac::interrupt; | 17 | use crate::pac::interrupt; |
| 17 | use crate::pac::iomuxc::regs::{Ctl, MuxCtl}; | 18 | use crate::pac::iomuxc::regs::{Ctl, MuxCtl}; |
| 18 | #[cfg(gpio5)] | 19 | use crate::pac::{self}; |
| 19 | use crate::pac::{self, gpio::Gpio}; | ||
| 20 | 20 | ||
| 21 | /// The GPIO pin level for pins set on "Digital" mode. | 21 | /// The GPIO pin level for pins set on "Digital" mode. |
| 22 | #[derive(Debug, Eq, PartialEq, Clone, Copy)] | 22 | #[derive(Debug, Eq, PartialEq, Clone, Copy)] |
| @@ -110,6 +110,14 @@ pub enum Bank { | |||
| 110 | #[cfg(gpio2)] | 110 | #[cfg(gpio2)] |
| 111 | Gpio2, | 111 | Gpio2, |
| 112 | 112 | ||
| 113 | /// Bank 3 | ||
| 114 | #[cfg(gpio3)] | ||
| 115 | Gpio3, | ||
| 116 | |||
| 117 | /// Bank 4 | ||
| 118 | #[cfg(gpio4)] | ||
| 119 | Gpio4, | ||
| 120 | |||
| 113 | /// Bank 5 | 121 | /// Bank 5 |
| 114 | #[cfg(gpio5)] | 122 | #[cfg(gpio5)] |
| 115 | Gpio5, | 123 | Gpio5, |
| @@ -642,6 +650,10 @@ const GPIO_MUX_MODE: u8 = 0b101; | |||
| 642 | static GPIO1_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; | 650 | static GPIO1_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; |
| 643 | #[cfg(gpio2)] | 651 | #[cfg(gpio2)] |
| 644 | static GPIO2_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; | 652 | static GPIO2_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; |
| 653 | #[cfg(gpio3)] | ||
| 654 | static GPIO3_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; | ||
| 655 | #[cfg(gpio4)] | ||
| 656 | static GPIO4_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; | ||
| 645 | #[cfg(gpio5)] | 657 | #[cfg(gpio5)] |
| 646 | static GPIO5_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; | 658 | static GPIO5_WAKERS: [AtomicWaker; 32] = [const { AtomicWaker::new() }; 32]; |
| 647 | 659 | ||
| @@ -658,6 +670,10 @@ pub(crate) trait SealedPin: Sized { | |||
| 658 | Bank::Gpio1 => pac::GPIO1, | 670 | Bank::Gpio1 => pac::GPIO1, |
| 659 | #[cfg(gpio2)] | 671 | #[cfg(gpio2)] |
| 660 | Bank::Gpio2 => pac::GPIO2, | 672 | Bank::Gpio2 => pac::GPIO2, |
| 673 | #[cfg(gpio3)] | ||
| 674 | Bank::Gpio3 => pac::GPIO3, | ||
| 675 | #[cfg(gpio4)] | ||
| 676 | Bank::Gpio4 => pac::GPIO4, | ||
| 661 | #[cfg(gpio5)] | 677 | #[cfg(gpio5)] |
| 662 | Bank::Gpio5 => pac::GPIO5, | 678 | Bank::Gpio5 => pac::GPIO5, |
| 663 | } | 679 | } |
| @@ -687,6 +703,10 @@ pub(crate) trait SealedPin: Sized { | |||
| 687 | Bank::Gpio1 => &GPIO1_WAKERS[self.pin_number() as usize], | 703 | Bank::Gpio1 => &GPIO1_WAKERS[self.pin_number() as usize], |
| 688 | #[cfg(gpio2)] | 704 | #[cfg(gpio2)] |
| 689 | Bank::Gpio2 => &GPIO2_WAKERS[self.pin_number() as usize], | 705 | Bank::Gpio2 => &GPIO2_WAKERS[self.pin_number() as usize], |
| 706 | #[cfg(gpio3)] | ||
| 707 | Bank::Gpio3 => &GPIO3_WAKERS[self.pin_number() as usize], | ||
| 708 | #[cfg(gpio4)] | ||
| 709 | Bank::Gpio4 => &GPIO4_WAKERS[self.pin_number() as usize], | ||
| 690 | #[cfg(gpio5)] | 710 | #[cfg(gpio5)] |
| 691 | Bank::Gpio5 => &GPIO5_WAKERS[self.pin_number() as usize], | 711 | Bank::Gpio5 => &GPIO5_WAKERS[self.pin_number() as usize], |
| 692 | } | 712 | } |
| @@ -870,25 +890,55 @@ fn irq_handler(block: Gpio, wakers: &[AtomicWaker; 32], high_bits: bool) { | |||
| 870 | } | 890 | } |
| 871 | } | 891 | } |
| 872 | 892 | ||
| 873 | #[cfg(all(feature = "mimxrt1011", feature = "rt"))] | 893 | #[cfg(all(any(feature = "mimxrt1011", feature = "mimxrt1062"), feature = "rt"))] |
| 874 | #[interrupt] | 894 | #[interrupt] |
| 875 | fn GPIO1_COMBINED_0_15() { | 895 | fn GPIO1_COMBINED_0_15() { |
| 876 | irq_handler(pac::GPIO1, &GPIO1_WAKERS, false); | 896 | irq_handler(pac::GPIO1, &GPIO1_WAKERS, false); |
| 877 | } | 897 | } |
| 878 | 898 | ||
| 879 | #[cfg(all(feature = "mimxrt1011", feature = "rt"))] | 899 | #[cfg(all(any(feature = "mimxrt1011", feature = "mimxrt1062"), feature = "rt"))] |
| 880 | #[interrupt] | 900 | #[interrupt] |
| 881 | fn GPIO1_COMBINED_16_31() { | 901 | fn GPIO1_COMBINED_16_31() { |
| 882 | irq_handler(pac::GPIO1, &GPIO1_WAKERS, true); | 902 | irq_handler(pac::GPIO1, &GPIO1_WAKERS, true); |
| 883 | } | 903 | } |
| 884 | 904 | ||
| 885 | #[cfg(all(feature = "mimxrt1011", feature = "rt"))] | 905 | #[cfg(all(any(feature = "mimxrt1011", feature = "mimxrt1062"), feature = "rt"))] |
| 886 | #[interrupt] | 906 | #[interrupt] |
| 887 | fn GPIO2_COMBINED_0_15() { | 907 | fn GPIO2_COMBINED_0_15() { |
| 888 | irq_handler(pac::GPIO2, &GPIO2_WAKERS, false); | 908 | irq_handler(pac::GPIO2, &GPIO2_WAKERS, false); |
| 889 | } | 909 | } |
| 890 | 910 | ||
| 891 | #[cfg(all(feature = "mimxrt1011", feature = "rt"))] | 911 | #[cfg(all(feature = "mimxrt1062", feature = "rt"))] |
| 912 | #[interrupt] | ||
| 913 | fn GPIO2_COMBINED_16_31() { | ||
| 914 | irq_handler(pac::GPIO2, &GPIO2_WAKERS, true); | ||
| 915 | } | ||
| 916 | |||
| 917 | #[cfg(all(feature = "mimxrt1062", feature = "rt"))] | ||
| 918 | #[interrupt] | ||
| 919 | fn GPIO3_COMBINED_0_15() { | ||
| 920 | irq_handler(pac::GPIO3, &GPIO3_WAKERS, false); | ||
| 921 | } | ||
| 922 | |||
| 923 | #[cfg(all(feature = "mimxrt1062", feature = "rt"))] | ||
| 924 | #[interrupt] | ||
| 925 | fn GPIO3_COMBINED_16_31() { | ||
| 926 | irq_handler(pac::GPIO3, &GPIO3_WAKERS, true); | ||
| 927 | } | ||
| 928 | |||
| 929 | #[cfg(all(feature = "mimxrt1062", feature = "rt"))] | ||
| 930 | #[interrupt] | ||
| 931 | fn GPIO4_COMBINED_0_15() { | ||
| 932 | irq_handler(pac::GPIO4, &GPIO4_WAKERS, false); | ||
| 933 | } | ||
| 934 | |||
| 935 | #[cfg(all(feature = "mimxrt1062", feature = "rt"))] | ||
| 936 | #[interrupt] | ||
| 937 | fn GPIO4_COMBINED_16_31() { | ||
| 938 | irq_handler(pac::GPIO4, &GPIO4_WAKERS, true); | ||
| 939 | } | ||
| 940 | |||
| 941 | #[cfg(all(any(feature = "mimxrt1011", feature = "mimxrt1062"), feature = "rt"))] | ||
| 892 | #[interrupt] | 942 | #[interrupt] |
| 893 | fn GPIO5_COMBINED_0_15() { | 943 | fn GPIO5_COMBINED_0_15() { |
| 894 | irq_handler(pac::GPIO5, &GPIO5_WAKERS, false); | 944 | irq_handler(pac::GPIO5, &GPIO5_WAKERS, false); |
diff --git a/embassy-nxp/src/lib.rs b/embassy-nxp/src/lib.rs index a715770c4..5e77fc0db 100644 --- a/embassy-nxp/src/lib.rs +++ b/embassy-nxp/src/lib.rs | |||
| @@ -14,6 +14,7 @@ mod time_driver; | |||
| 14 | // This mod MUST go last, so that it sees all the `impl_foo!` macros | 14 | // This mod MUST go last, so that it sees all the `impl_foo!` macros |
| 15 | #[cfg_attr(feature = "lpc55", path = "chips/lpc55.rs")] | 15 | #[cfg_attr(feature = "lpc55", path = "chips/lpc55.rs")] |
| 16 | #[cfg_attr(feature = "mimxrt1011", path = "chips/mimxrt1011.rs")] | 16 | #[cfg_attr(feature = "mimxrt1011", path = "chips/mimxrt1011.rs")] |
| 17 | #[cfg_attr(feature = "mimxrt1062", path = "chips/mimxrt1062.rs")] | ||
| 17 | mod chip; | 18 | mod chip; |
| 18 | 19 | ||
| 19 | #[cfg(feature = "unstable-pac")] | 20 | #[cfg(feature = "unstable-pac")] |
diff --git a/examples/mimxrt1062-evk/.cargo/config.toml b/examples/mimxrt1062-evk/.cargo/config.toml new file mode 100644 index 000000000..ca4c606dc --- /dev/null +++ b/examples/mimxrt1062-evk/.cargo/config.toml | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | [target.thumbv7em-none-eabihf] | ||
| 2 | runner = 'probe-rs run --chip MIMXRT1060' | ||
| 3 | |||
| 4 | [build] | ||
| 5 | target = "thumbv7em-none-eabihf" # Cortex-M7 | ||
| 6 | |||
| 7 | [env] | ||
| 8 | DEFMT_LOG = "trace" | ||
diff --git a/examples/mimxrt1062-evk/Cargo.toml b/examples/mimxrt1062-evk/Cargo.toml new file mode 100644 index 000000000..430a26b41 --- /dev/null +++ b/examples/mimxrt1062-evk/Cargo.toml | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | [package] | ||
| 2 | name = "embassy-imxrt1062-evk-examples" | ||
| 3 | version = "0.1.0" | ||
| 4 | edition = "2021" | ||
| 5 | license = "MIT or Apache-2.0" | ||
| 6 | |||
| 7 | [dependencies] | ||
| 8 | cortex-m = { version = "0.7.7", features = ["inline-asm", "critical-section-single-core"] } | ||
| 9 | cortex-m-rt = "0.7.3" | ||
| 10 | defmt = "1.0.1" | ||
| 11 | defmt-rtt = "1.0.0" | ||
| 12 | |||
| 13 | embassy-executor = { version = "0.7.0", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "executor-interrupt", "defmt"] } | ||
| 14 | embassy-futures = { version = "0.1.1", path = "../../embassy-futures" } | ||
| 15 | embassy-nxp = { version = "0.1.0", path = "../../embassy-nxp", features = ["defmt", "mimxrt1062", "unstable-pac", "time-driver-pit"] } | ||
| 16 | embassy-time = { version = "0.4", path = "../../embassy-time", features = ["defmt", ] } # "defmt-timestamp-uptime" | ||
| 17 | embassy-sync = { version = "0.7.0", path = "../../embassy-sync", features = ["defmt"] } | ||
| 18 | embedded-hal-1 = { package = "embedded-hal", version = "1.0" } | ||
| 19 | embedded-hal-async = "1.0.0" | ||
| 20 | |||
| 21 | imxrt-boot-gen = { version = "0.3.4", features = ["imxrt1060"] } | ||
| 22 | panic-probe = { version = "1.0.0", features = ["print-defmt"] } | ||
| 23 | panic-semihosting = "0.6.0" | ||
| 24 | |||
| 25 | [build-dependencies] | ||
| 26 | imxrt-rt = { version = "0.1.7", features = ["device"] } | ||
| 27 | |||
| 28 | [profile.release] | ||
| 29 | debug = 2 | ||
diff --git a/examples/mimxrt1062-evk/build.rs b/examples/mimxrt1062-evk/build.rs new file mode 100644 index 000000000..e0e0d547e --- /dev/null +++ b/examples/mimxrt1062-evk/build.rs | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | use imxrt_rt::{Family, RuntimeBuilder}; | ||
| 2 | |||
| 3 | fn main() { | ||
| 4 | RuntimeBuilder::from_flexspi(Family::Imxrt1060, 8 * 1024 * 1024) | ||
| 5 | .build() | ||
| 6 | .unwrap(); | ||
| 7 | |||
| 8 | println!("cargo:rustc-link-arg-bins=--nmagic"); | ||
| 9 | println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); | ||
| 10 | // Not link.x, as imxrt-rt needs to do some special things | ||
| 11 | println!("cargo:rustc-link-arg-bins=-Timxrt-link.x"); | ||
| 12 | } | ||
diff --git a/examples/mimxrt1062-evk/src/bin/blinky.rs b/examples/mimxrt1062-evk/src/bin/blinky.rs new file mode 100644 index 000000000..b6d90d94d --- /dev/null +++ b/examples/mimxrt1062-evk/src/bin/blinky.rs | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::info; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_nxp::gpio::{Level, Output}; | ||
| 7 | use embassy_time::Timer; | ||
| 8 | // Must include `embassy_imxrt1062_evk_examples` to ensure the FCB gets linked. | ||
| 9 | use {defmt_rtt as _, embassy_imxrt1062_evk_examples as _, panic_probe as _}; | ||
| 10 | |||
| 11 | #[embassy_executor::main] | ||
| 12 | async fn main(_spawner: Spawner) -> ! { | ||
| 13 | let p = embassy_nxp::init(Default::default()); | ||
| 14 | info!("Hello world!"); | ||
| 15 | |||
| 16 | let led = p.GPIO_AD_B0_08; | ||
| 17 | let mut led = Output::new(led, Level::Low); | ||
| 18 | |||
| 19 | loop { | ||
| 20 | Timer::after_millis(500).await; | ||
| 21 | |||
| 22 | info!("Toggle"); | ||
| 23 | led.toggle(); | ||
| 24 | } | ||
| 25 | } | ||
diff --git a/examples/mimxrt1062-evk/src/bin/button.rs b/examples/mimxrt1062-evk/src/bin/button.rs new file mode 100644 index 000000000..d60fa3dac --- /dev/null +++ b/examples/mimxrt1062-evk/src/bin/button.rs | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::info; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_nxp::gpio::{Input, Level, Output, Pull}; | ||
| 7 | use {defmt_rtt as _, embassy_imxrt1062_evk_examples as _, panic_probe as _}; | ||
| 8 | |||
| 9 | #[embassy_executor::main] | ||
| 10 | async fn main(_spawner: Spawner) -> ! { | ||
| 11 | let p = embassy_nxp::init(Default::default()); | ||
| 12 | info!("Hello world!"); | ||
| 13 | |||
| 14 | // User LED (D8) | ||
| 15 | let led = p.GPIO_AD_B0_08; | ||
| 16 | // User button (SW5) | ||
| 17 | let button = p.WAKEUP; | ||
| 18 | let mut button = Input::new(button, Pull::Up100K); | ||
| 19 | let mut led = Output::new(led, Level::Low); | ||
| 20 | led.set_high(); | ||
| 21 | |||
| 22 | loop { | ||
| 23 | button.wait_for_falling_edge().await; | ||
| 24 | |||
| 25 | info!("Toggled"); | ||
| 26 | led.toggle(); | ||
| 27 | |||
| 28 | // Software debounce. | ||
| 29 | button.wait_for_rising_edge().await; | ||
| 30 | |||
| 31 | // Stabilization. | ||
| 32 | for _ in 0..100_000 { | ||
| 33 | cortex_m::asm::nop(); | ||
| 34 | } | ||
| 35 | } | ||
| 36 | } | ||
diff --git a/examples/mimxrt1062-evk/src/lib.rs b/examples/mimxrt1062-evk/src/lib.rs new file mode 100644 index 000000000..3f99f9db3 --- /dev/null +++ b/examples/mimxrt1062-evk/src/lib.rs | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | //! FlexSPI configuration block (FCB) for the iMXRT1060-EVK | ||
| 2 | //! | ||
| 3 | //! This uses IS25WP QuadSPI flash. | ||
| 4 | |||
| 5 | #![no_std] | ||
| 6 | |||
| 7 | use imxrt_boot_gen::flexspi::opcodes::sdr::*; | ||
| 8 | use imxrt_boot_gen::flexspi::{self, FlashPadType, ReadSampleClockSource, SerialClockFrequency, SerialFlashRegion, *}; | ||
| 9 | use imxrt_boot_gen::serial_flash::*; | ||
| 10 | pub use nor::ConfigurationBlock; | ||
| 11 | |||
| 12 | const SEQ_READ: Sequence = SequenceBuilder::new() | ||
| 13 | .instr(Instr::new(CMD, Pads::One, 0xEB)) | ||
| 14 | .instr(Instr::new(RADDR, Pads::Four, 0x18)) | ||
| 15 | .instr(Instr::new(DUMMY, Pads::Four, 0x06)) | ||
| 16 | .instr(Instr::new(READ, Pads::Four, 0x04)) | ||
| 17 | .build(); | ||
| 18 | const SEQ_READ_STATUS: Sequence = SequenceBuilder::new() | ||
| 19 | .instr(Instr::new(CMD, Pads::One, 0x05)) | ||
| 20 | .instr(Instr::new(READ, Pads::One, 0x04)) | ||
| 21 | .build(); | ||
| 22 | const SEQ_WRITE_ENABLE: Sequence = SequenceBuilder::new().instr(Instr::new(CMD, Pads::One, 0x06)).build(); | ||
| 23 | const SEQ_ERASE_SECTOR: Sequence = SequenceBuilder::new() | ||
| 24 | .instr(Instr::new(CMD, Pads::One, 0x20)) | ||
| 25 | .instr(Instr::new(RADDR, Pads::One, 0x18)) | ||
| 26 | .build(); | ||
| 27 | const SEQ_PAGE_PROGRAM: Sequence = SequenceBuilder::new() | ||
| 28 | .instr(Instr::new(CMD, Pads::One, 0x02)) | ||
| 29 | .instr(Instr::new(RADDR, Pads::One, 0x18)) | ||
| 30 | .instr(Instr::new(WRITE, Pads::One, 0x04)) | ||
| 31 | .build(); | ||
| 32 | const SEQ_CHIP_ERASE: Sequence = SequenceBuilder::new().instr(Instr::new(CMD, Pads::One, 0x60)).build(); | ||
| 33 | |||
| 34 | const LUT: LookupTable = LookupTable::new() | ||
| 35 | .command(Command::Read, SEQ_READ) | ||
| 36 | .command(Command::ReadStatus, SEQ_READ_STATUS) | ||
| 37 | .command(Command::WriteEnable, SEQ_WRITE_ENABLE) | ||
| 38 | .command(Command::EraseSector, SEQ_ERASE_SECTOR) | ||
| 39 | .command(Command::PageProgram, SEQ_PAGE_PROGRAM) | ||
| 40 | .command(Command::ChipErase, SEQ_CHIP_ERASE); | ||
| 41 | |||
| 42 | const COMMON_CONFIGURATION_BLOCK: flexspi::ConfigurationBlock = flexspi::ConfigurationBlock::new(LUT) | ||
| 43 | .version(Version::new(1, 4, 0)) | ||
| 44 | .read_sample_clk_src(ReadSampleClockSource::LoopbackFromDQSPad) | ||
| 45 | .cs_hold_time(3) | ||
| 46 | .cs_setup_time(3) | ||
| 47 | .controller_misc_options(0x10) | ||
| 48 | .serial_flash_pad_type(FlashPadType::Quad) | ||
| 49 | .serial_clk_freq(SerialClockFrequency::MHz133) | ||
| 50 | .flash_size(SerialFlashRegion::A1, 8 * 1024 * 1024); | ||
| 51 | |||
| 52 | pub const SERIAL_NOR_CONFIGURATION_BLOCK: nor::ConfigurationBlock = | ||
| 53 | nor::ConfigurationBlock::new(COMMON_CONFIGURATION_BLOCK) | ||
| 54 | .page_size(256) | ||
| 55 | .sector_size(4096) | ||
| 56 | .ip_cmd_serial_clk_freq(nor::SerialClockFrequency::MHz30); | ||
| 57 | |||
| 58 | #[no_mangle] | ||
| 59 | #[cfg_attr(all(target_arch = "arm", target_os = "none"), link_section = ".fcb")] | ||
| 60 | pub static FLEXSPI_CONFIGURATION_BLOCK: nor::ConfigurationBlock = SERIAL_NOR_CONFIGURATION_BLOCK; | ||
