Skip to content
This repository was archived by the owner on Aug 9, 2022. It is now read-only.

Commit 1d57619

Browse files
authored
Merge pull request #36 from arjanmels/feature-gpio-rename
Overhaul of GPIO module & adjusted Serial module accordingly.
2 parents 95c7596 + 7e53a92 commit 1d57619

File tree

18 files changed

+1953
-1004
lines changed

18 files changed

+1953
-1004
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ esp32-hal-proc-macros = { path = "procmacros" }
3434

3535
xtensa-lx6-rt = { version = "0.3.0", optional = true }
3636
xtensa-lx6 = "0.2.0"
37-
esp32 = "0.5.0"
37+
esp32 = { version = "0.6.0", default-features = false }
3838
bare-metal = "0.2"
3939
nb = "0.1.2"
4040
embedded-hal = { version = "0.2.3", features = ["unproven"] }

examples/adc.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use esp32_hal::analog::adc::ADC;
1010
use esp32_hal::analog::config::{Adc1Config, Adc2Config, Attenuation};
1111
use esp32_hal::clock_control::sleep;
1212
use esp32_hal::dport::Split;
13-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
13+
use esp32_hal::serial::{config::Config, Serial};
1414
use esp32_hal::target;
1515

1616
#[no_mangle]
@@ -38,10 +38,16 @@ fn main() -> ! {
3838
let (clkcntrl_config, mut watchdog) = clkcntrl.freeze().unwrap();
3939
watchdog.disable();
4040

41-
/* Setup serial connection */
42-
let serial = Serial::uart0(
41+
let gpios = dp.GPIO.split();
42+
43+
let serial: Serial<_, _, _> = Serial::new(
4344
dp.UART0,
44-
(NoTx, NoRx),
45+
esp32_hal::serial::Pins {
46+
tx: gpios.gpio1,
47+
rx: gpios.gpio3,
48+
cts: None,
49+
rts: None,
50+
},
4551
Config::default(),
4652
clkcntrl_config,
4753
&mut dport,
@@ -51,7 +57,6 @@ fn main() -> ! {
5157
let (mut tx, _rx) = serial.split();
5258

5359
/* Set ADC pins to analog mode */
54-
let gpios = dp.GPIO.split();
5560
let mut pin36 = gpios.gpio36.into_analog();
5661
let mut pin25 = gpios.gpio25.into_analog();
5762

examples/exception.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use esp32_hal::clock_control::{sleep, CPUSource::PLL, ClockControl};
1212
use esp32_hal::dport::Split;
1313
use esp32_hal::dprintln;
1414
use esp32_hal::interrupt::{clear_software_interrupt, Interrupt, Interrupt::*, InterruptLevel};
15-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
15+
use esp32_hal::serial::{config::Config, Serial};
1616
use esp32_hal::target;
1717
use esp32_hal::Core::PRO;
1818

@@ -120,10 +120,16 @@ fn main() -> ! {
120120

121121
watchdog.start(20.s());
122122

123+
let gpios = dp.GPIO.split();
123124
// setup serial controller
124-
let mut uart0 = Serial::uart0(
125+
let mut uart0: Serial<_, _, _> = Serial::new(
125126
dp.UART0,
126-
(NoTx, NoRx),
127+
esp32_hal::serial::Pins {
128+
tx: gpios.gpio1,
129+
rx: gpios.gpio3,
130+
cts: None,
131+
rts: None,
132+
},
127133
Config::default(),
128134
clock_control_config,
129135
&mut dport,

examples/hall.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use esp32_hal::analog::adc::ADC;
1010
use esp32_hal::analog::config::{Adc1Config, Attenuation};
1111
use esp32_hal::clock_control::sleep;
1212
use esp32_hal::dport::Split;
13-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
13+
use esp32_hal::serial::{config::Config, Serial};
1414
use esp32_hal::target;
1515

1616
#[no_mangle]
@@ -38,19 +38,25 @@ fn main() -> ! {
3838
let (clkcntrl_config, mut watchdog) = clkcntrl.freeze().unwrap();
3939
watchdog.disable();
4040

41-
/* Setup serial connection */
42-
let serial = Serial::uart0(
41+
let gpios = dp.GPIO.split();
42+
// setup serial controller
43+
let serial: Serial<_, _, _> = Serial::new(
4344
dp.UART0,
44-
(NoTx, NoRx),
45+
esp32_hal::serial::Pins {
46+
tx: gpios.gpio1,
47+
rx: gpios.gpio3,
48+
cts: None,
49+
rts: None,
50+
},
4551
Config::default(),
4652
clkcntrl_config,
4753
&mut dport,
4854
)
4955
.unwrap();
56+
5057
let (mut tx, _rx) = serial.split();
5158

5259
/* Set ADC pins to analog mode */
53-
let gpios = dp.GPIO.split();
5460
let mut pin36 = gpios.gpio36.into_analog();
5561
let mut pin39 = gpios.gpio39.into_analog();
5662

examples/multicore.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use esp32_hal::prelude::*;
99
use esp32_hal::clock_control::{CPUSource, ClockControl, ClockControlConfig};
1010
use esp32_hal::dport::Split;
1111
use esp32_hal::dprintln;
12-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
12+
use esp32_hal::serial::{config::Config, Serial};
1313
use esp32_hal::target;
1414

1515
use xtensa_lx6::{get_stack_pointer, timer::get_cycle_count};
@@ -59,10 +59,16 @@ fn main() -> ! {
5959

6060
watchdog.start(3.s());
6161

62+
let gpios = dp.GPIO.split();
6263
// setup serial controller
63-
let mut uart0 = Serial::uart0(
64+
let mut uart0: Serial<_, _, _> = Serial::new(
6465
dp.UART0,
65-
(NoTx, NoRx),
66+
esp32_hal::serial::Pins {
67+
tx: gpios.gpio1,
68+
rx: gpios.gpio3,
69+
cts: None,
70+
rts: None,
71+
},
6672
Config::default(),
6773
clock_control_config,
6874
&mut dport,

examples/ram.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use esp32_hal::prelude::*;
99
use esp32_hal::clock_control::{sleep, ClockControl};
1010
use esp32_hal::dport::Split;
1111
use esp32_hal::dprintln;
12-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
12+
use esp32_hal::serial::{config::Config, Serial};
1313
use esp32_hal::target;
1414

1515
use xtensa_lx6::get_program_counter;
@@ -41,10 +41,16 @@ fn main() -> ! {
4141

4242
watchdog.start(15.s());
4343

44+
let gpios = dp.GPIO.split();
4445
// setup serial controller
45-
let mut uart0 = Serial::uart0(
46+
let mut uart0: Serial<_, _, _> = Serial::new(
4647
dp.UART0,
47-
(NoTx, NoRx),
48+
esp32_hal::serial::Pins {
49+
tx: gpios.gpio1,
50+
rx: gpios.gpio3,
51+
cts: None,
52+
rts: None,
53+
},
4854
Config::default(),
4955
clock_control_config,
5056
&mut dport,
@@ -66,7 +72,7 @@ fn main() -> ! {
6672
}
6773
}
6874

69-
fn attr_none_fn(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {
75+
fn attr_none_fn(uart: &mut dyn core::fmt::Write) {
7076
writeln!(
7177
uart,
7278
"{:<40}: {:08x?}",
@@ -77,7 +83,7 @@ fn attr_none_fn(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)
7783
}
7884

7985
#[ram]
80-
fn attr_ram_fn(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {
86+
fn attr_ram_fn(uart: &mut dyn core::fmt::Write) {
8187
writeln!(
8288
uart,
8389
"{:<40}: {:08x?}",
@@ -88,7 +94,7 @@ fn attr_ram_fn(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>
8894
}
8995

9096
#[ram(rtc_slow)]
91-
fn attr_ram_fn_rtc_slow(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {
97+
fn attr_ram_fn_rtc_slow(uart: &mut dyn core::fmt::Write) {
9298
writeln!(
9399
uart,
94100
"{:<40}: {:08x?}",
@@ -99,7 +105,7 @@ fn attr_ram_fn_rtc_slow(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoT
99105
}
100106

101107
#[ram(rtc_fast)]
102-
fn attr_ram_fn_rtc_fast(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {
108+
fn attr_ram_fn_rtc_fast(uart: &mut dyn core::fmt::Write) {
103109
writeln!(
104110
uart,
105111
"{:<40}: {:08x?}",
@@ -170,7 +176,7 @@ macro_rules! print_info {
170176
};
171177
}
172178

173-
fn ram_tests(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {
179+
fn ram_tests(uart: &mut dyn core::fmt::Write) {
174180
writeln!(uart).unwrap();
175181

176182
attr_none_fn(uart);
@@ -207,10 +213,10 @@ fn ram_tests(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>)
207213
}
208214

209215
#[cfg(not(feature = "external_ram"))]
210-
fn external_ram(_uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {}
216+
fn external_ram(_uart: &mut dyn core::fmt::Write) {}
211217

212218
#[cfg(feature = "external_ram")]
213-
fn external_ram(uart: &mut esp32_hal::serial::Serial<target::UART0, (NoTx, NoRx)>) {
219+
fn external_ram(uart: &mut core::fmt::Write) {
214220
unsafe {
215221
print_info!(uart, ATTR_RAM_STATIC_EXTERNAL);
216222
print_info!(uart, ATTR_RAM_STATIC_EXTERNAL_BSS);

examples/rtccntl.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use esp32_hal::prelude::*;
99
use esp32_hal::clock_control::{sleep, CPUSource, ClockControl, ClockControlConfig};
1010
use esp32_hal::dport::Split;
1111
use esp32_hal::dprintln;
12-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
12+
use esp32_hal::serial::{config::Config, Serial};
1313
use esp32_hal::target;
1414

1515
const BLINK_HZ: Hertz = Hertz(1);
@@ -53,16 +53,21 @@ fn main() -> ! {
5353

5454
watchdog.start(3.s());
5555

56+
let gpios = dp.GPIO.split();
5657
// setup serial controller
57-
let mut uart0 = Serial::uart0(
58+
let mut uart0: Serial<_, _, _> = Serial::new(
5859
dp.UART0,
59-
(NoTx, NoRx),
60+
esp32_hal::serial::Pins {
61+
tx: gpios.gpio1,
62+
rx: gpios.gpio3,
63+
cts: None,
64+
rts: None,
65+
},
6066
Config::default(),
6167
clock_control_config,
6268
&mut dport,
6369
)
6470
.unwrap();
65-
6671
uart0.change_baudrate(115200).unwrap();
6772

6873
// print startup message

examples/serial.rs

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,60 @@
11
#![no_std]
22
#![no_main]
3-
#![feature(asm)]
43

5-
use core::fmt::Write;
6-
use core::panic::PanicInfo;
4+
use core::{fmt::Write, panic::PanicInfo};
75

8-
use esp32_hal::prelude::*;
9-
10-
use esp32_hal::clock_control::sleep;
11-
use esp32_hal::dport::Split;
12-
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
13-
use esp32_hal::target;
6+
use esp32_hal::{
7+
clock_control::{sleep, ClockControl, XTAL_FREQUENCY_AUTO},
8+
dport::Split,
9+
dprintln,
10+
prelude::*,
11+
serial::{config::Config, Pins, Serial},
12+
target,
13+
timer::Timer,
14+
};
1415

1516
const BLINK_HZ: Hertz = Hertz(2);
1617

17-
#[no_mangle]
18+
#[entry]
1819
fn main() -> ! {
1920
let dp = target::Peripherals::take().expect("Failed to obtain Peripherals");
2021

21-
let mut timg0 = dp.TIMG0;
22-
let mut timg1 = dp.TIMG1;
23-
2422
let (mut dport, dport_clock_control) = dp.DPORT.split();
2523

26-
// (https://github.com/espressif/openocd-esp32/blob/97ba3a6bb9eaa898d91df923bbedddfeaaaf28c9/src/target/esp32.c#L431)
27-
// openocd disables the watchdog timer on halt
28-
// we will do it manually on startup
29-
disable_timg_wdts(&mut timg0, &mut timg1);
30-
31-
let clkcntrl = esp32_hal::clock_control::ClockControl::new(
24+
let clkcntrl = ClockControl::new(
3225
dp.RTCCNTL,
3326
dp.APB_CTRL,
3427
dport_clock_control,
35-
esp32_hal::clock_control::XTAL_FREQUENCY_AUTO,
28+
XTAL_FREQUENCY_AUTO,
3629
)
3730
.unwrap();
3831

3932
let (clkcntrl_config, mut watchdog) = clkcntrl.freeze().unwrap();
4033
watchdog.disable();
4134

42-
let gpios = dp.GPIO.split();
43-
let mut blinky = gpios.gpio13.into_push_pull_output();
44-
45-
let serial = Serial::uart0(
46-
dp.UART0,
47-
(NoTx, NoRx),
48-
Config::default(), // default configuration is 19200 baud, 8 data bits, 1 stop bit & no parity (8N1)
35+
let (_, _, _, mut watchdog0) = Timer::new(dp.TIMG0, clkcntrl_config);
36+
let (_, _, _, mut watchdog1) = Timer::new(dp.TIMG1, clkcntrl_config);
37+
watchdog0.disable();
38+
watchdog1.disable();
39+
40+
let pins = dp.GPIO.split();
41+
42+
let mut blinky = pins.gpio0.into_push_pull_output();
43+
44+
// Use UART1 as example: will cause dprintln statements not to be printed
45+
let serial: Serial<_, _, _> = Serial::new(
46+
dp.UART1,
47+
Pins {
48+
tx: pins.gpio1,
49+
rx: pins.gpio3,
50+
cts: None,
51+
rts: None,
52+
},
53+
Config {
54+
// default configuration is 19200 baud, 8 data bits, 1 stop bit & no parity (8N1)
55+
baudrate: 115200.Hz(),
56+
..Config::default()
57+
},
4958
clkcntrl_config,
5059
&mut dport,
5160
)
@@ -55,6 +64,9 @@ fn main() -> ! {
5564

5665
writeln!(tx, "\n\nESP32 Started\n\n").unwrap();
5766

67+
// line will not be printed as using UART1
68+
dprintln!("UART0\n");
69+
5870
loop {
5971
writeln!(tx, "Characters received: {:?}", rx.count()).unwrap();
6072

@@ -70,22 +82,8 @@ fn main() -> ! {
7082
}
7183
}
7284

73-
const WDT_WKEY_VALUE: u32 = 0x50D83AA1;
74-
75-
fn disable_timg_wdts(timg0: &mut target::TIMG0, timg1: &mut target::TIMG1) {
76-
timg0
77-
.wdtwprotect
78-
.write(|w| unsafe { w.bits(WDT_WKEY_VALUE) });
79-
timg1
80-
.wdtwprotect
81-
.write(|w| unsafe { w.bits(WDT_WKEY_VALUE) });
82-
83-
timg0.wdtconfig0.write(|w| unsafe { w.bits(0x0) });
84-
timg1.wdtconfig0.write(|w| unsafe { w.bits(0x0) });
85-
}
86-
87-
/// Basic panic handler - just loops
8885
#[panic_handler]
89-
fn panic(_info: &PanicInfo) -> ! {
86+
fn panic(info: &PanicInfo) -> ! {
87+
dprintln!("\n\n*** {:?}", info);
9088
loop {}
9189
}

0 commit comments

Comments
 (0)