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

Commit ef33c64

Browse files
authored
Merge pull request #29 from arjanmels/rt-split
Updated to split xtensa_lx6 and xtensa_lx6_rt
2 parents 85f5472 + ed872e0 commit ef33c64

File tree

17 files changed

+83
-77
lines changed

17 files changed

+83
-77
lines changed

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ mem=[]
2929
[dependencies]
3030
esp32-hal-proc-macros = { path = "procmacros" }
3131

32-
xtensa-lx6-rt = { version = "0.1.0" }
32+
xtensa-lx6-rt = { version = "0.2.0" }
33+
xtensa-lx6 = { version = "0.1.0" }
3334
esp32 = { version = "0.4.0" }
3435
bare-metal = "0.2"
3536
nb = "0.1.2"

core

6.98 MB
Binary file not shown.

examples/blinky.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ extern crate panic_halt;
66
extern crate xtensa_lx6_rt;
77

88
use hal::prelude::*;
9-
use xtensa_lx6_rt::get_cycle_count;
9+
use xtensa_lx6::get_cycle_count;
1010

1111
/// The default clock source is the onboard crystal
1212
/// In most cases 40mhz (but can be as low as 2mhz depending on the board)

examples/exception.rs

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

@@ -22,73 +22,73 @@ fn FROM_CPU_INTR0() {
2222
writeln!(
2323
TX.lock().as_mut().unwrap(),
2424
" FROM_CPU_INTR0, level: {}",
25-
xtensa_lx6_rt::interrupt::get_level()
25+
xtensa_lx6::interrupt::get_level()
2626
)
2727
.unwrap();
28-
interrupt::clear_software_interrupt(Interrupt::FROM_CPU_INTR0).unwrap();
28+
clear_software_interrupt(Interrupt::FROM_CPU_INTR0).unwrap();
2929
}
3030

3131
#[interrupt]
3232
fn FROM_CPU_INTR1() {
3333
writeln!(
3434
TX.lock().as_mut().unwrap(),
3535
" Start FROM_CPU_INTR1, level: {}",
36-
xtensa_lx6_rt::interrupt::get_level()
36+
xtensa_lx6::interrupt::get_level()
3737
)
3838
.unwrap();
3939
interrupt::set_software_interrupt(Interrupt::FROM_CPU_INTR0).unwrap();
4040
interrupt::set_software_interrupt(Interrupt::FROM_CPU_INTR2).unwrap();
4141
writeln!(
4242
TX.lock().as_mut().unwrap(),
4343
" End FROM_CPU_INTR1, level: {}",
44-
xtensa_lx6_rt::interrupt::get_level()
44+
xtensa_lx6::interrupt::get_level()
4545
)
4646
.unwrap();
47-
interrupt::clear_software_interrupt(Interrupt::FROM_CPU_INTR1).unwrap();
47+
clear_software_interrupt(Interrupt::FROM_CPU_INTR1).unwrap();
4848
}
4949

5050
#[interrupt]
5151
fn FROM_CPU_INTR2() {
5252
writeln!(
5353
TX.lock().as_mut().unwrap(),
5454
" FROM_CPU_INTR2, level: {}",
55-
xtensa_lx6_rt::interrupt::get_level()
55+
xtensa_lx6::interrupt::get_level()
5656
)
5757
.unwrap();
58-
interrupt::clear_software_interrupt(Interrupt::FROM_CPU_INTR2).unwrap();
58+
clear_software_interrupt(Interrupt::FROM_CPU_INTR2).unwrap();
5959
}
6060

6161
#[interrupt]
6262
fn FROM_CPU_INTR3() {
6363
writeln!(
6464
TX.lock().as_mut().unwrap(),
6565
" FROM_CPU_INTR3, level: {}",
66-
xtensa_lx6_rt::interrupt::get_level()
66+
xtensa_lx6::interrupt::get_level()
6767
)
6868
.unwrap();
69-
interrupt::clear_software_interrupt(Interrupt::FROM_CPU_INTR3).unwrap();
69+
clear_software_interrupt(Interrupt::FROM_CPU_INTR3).unwrap();
7070
}
7171

7272
#[interrupt(INTERNAL_SOFTWARE_LEVEL_3_INTR)]
7373
fn software_level_3() {
7474
writeln!(
7575
TX.lock().as_mut().unwrap(),
7676
" INTERNAL_SOFTWARE_LEVEL_3_INTR, level: {}",
77-
xtensa_lx6_rt::interrupt::get_level()
77+
xtensa_lx6::interrupt::get_level()
7878
)
7979
.unwrap();
80-
interrupt::clear_software_interrupt(Interrupt::FROM_CPU_INTR3).unwrap();
80+
clear_software_interrupt(Interrupt::FROM_CPU_INTR3).unwrap();
8181
}
8282

8383
#[interrupt(INTERNAL_SOFTWARE_LEVEL_1_INTR)]
8484
fn random_name() {
8585
writeln!(
8686
TX.lock().as_mut().unwrap(),
8787
" INTERNAL_SOFTWARE_LEVEL_1_INTR, level: {}",
88-
xtensa_lx6_rt::interrupt::get_level()
88+
xtensa_lx6::interrupt::get_level()
8989
)
9090
.unwrap();
91-
interrupt::clear_software_interrupt(Interrupt::FROM_CPU_INTR3).unwrap();
91+
clear_software_interrupt(Interrupt::FROM_CPU_INTR3).unwrap();
9292
}
9393

9494
#[exception]
@@ -202,7 +202,7 @@ fn main() -> ! {
202202

203203
loop {
204204
sleep(1.s());
205-
xtensa_lx6_rt::interrupt::free(|_| {
205+
interrupt::free(|_| {
206206
writeln!(TX.lock().as_mut().unwrap(), "Wait for watchdog reset").unwrap()
207207
});
208208
}

examples/mem.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ use esp32_hal::dprintln;
1616
use esp32_hal::mem::{memcmp, memcpy, memcpy_reverse, memset};
1717
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
1818

19+
use xtensa_lx6::get_cycle_count;
20+
1921
#[macro_use]
2022
extern crate alloc;
2123

@@ -76,11 +78,11 @@ fn main() -> ! {
7678
let mut dst = vec![0u8; BUF_LEN];
7779
let mut src = vec![0u8; BUF_LEN];
7880

79-
let start = xtensa_lx6_rt::get_cycle_count();
81+
let start = get_cycle_count();
8082
for i in 0..src.len() {
8183
src[i] = i as u8;
8284
}
83-
let end = xtensa_lx6_rt::get_cycle_count();
85+
let end = get_cycle_count();
8486

8587
let inittime = end.wrapping_sub(start) as f32 / ClockControlConfig {}.cpu_frequency().0 as f32;
8688

@@ -130,11 +132,11 @@ fn main() -> ! {
130132
const REPEAT: usize = 20;
131133

132134
fn time(output: &mut dyn core::fmt::Write, text: &str, bytes: usize, f: &dyn Fn() -> ()) {
133-
let start = xtensa_lx6_rt::get_cycle_count();
135+
let start = get_cycle_count();
134136
for _ in 0..REPEAT {
135137
f();
136138
}
137-
let end = xtensa_lx6_rt::get_cycle_count();
139+
let end = get_cycle_count();
138140

139141
let time = (end - start) as f32 / ClockControlConfig {}.cpu_frequency().0 as f32;
140142
writeln!(
@@ -154,11 +156,11 @@ unsafe fn time_memcpy(
154156
len: usize,
155157
f: unsafe extern "C" fn(dst: *mut u8, src: *const u8, n: usize) -> *mut u8,
156158
) {
157-
let start = xtensa_lx6_rt::get_cycle_count();
159+
let start = get_cycle_count();
158160
for _ in 0..REPEAT {
159161
f(dst as *const _ as *mut _, src as *const _ as *mut _, len);
160162
}
161-
let end = xtensa_lx6_rt::get_cycle_count();
163+
let end = get_cycle_count();
162164

163165
let time = end.wrapping_sub(start) as f32 / ClockControlConfig {}.cpu_frequency().0 as f32;
164166

examples/multicore.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ use esp32_hal::clock_control::{CPUSource, ClockControl, ClockControlConfig};
1010
use esp32_hal::dport::Split;
1111
use esp32_hal::dprintln;
1212
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
13+
14+
use xtensa_lx6::{get_cycle_count, get_stack_pointer};
15+
1316
const BLINK_HZ: Hertz = Hertz(1);
1417

1518
static GLOBAL_COUNT: core::sync::atomic::AtomicU32 = core::sync::atomic::AtomicU32::new(0);
@@ -76,12 +79,7 @@ fn main() -> ! {
7679
)
7780
.unwrap();
7881

79-
writeln!(
80-
uart0,
81-
"Stack Pointer Core 0: {:08x?}",
82-
xtensa_lx6_rt::get_stack_pointer()
83-
)
84-
.unwrap();
82+
writeln!(uart0, "Stack Pointer Core 0: {:08x?}", get_stack_pointer()).unwrap();
8583

8684
// register callback which is called when the clock is switched
8785
clock_control_config
@@ -131,9 +129,9 @@ fn main() -> ! {
131129
x = x.wrapping_add(1);
132130

133131
let cycles = clock_control_config.cpu_frequency() / BLINK_HZ;
134-
let start = xtensa_lx6_rt::get_cycle_count();
132+
let start = get_cycle_count();
135133
let mut loop_count: u32 = 0;
136-
while xtensa_lx6_rt::get_cycle_count().wrapping_sub(start) < cycles {
134+
while get_cycle_count().wrapping_sub(start) < cycles {
137135
loop_count += 1;
138136
}
139137

@@ -160,15 +158,15 @@ fn cpu1_start() -> ! {
160158
writeln!(
161159
TX.lock().as_mut().unwrap(),
162160
"Stack Pointer Core 1: {:08x?}",
163-
xtensa_lx6_rt::get_stack_pointer()
161+
get_stack_pointer()
164162
)
165163
.unwrap();
166164

167165
loop {
168166
let cycles = ClockControlConfig {}.cpu_frequency() / BLINK_HZ;
169-
let start = xtensa_lx6_rt::get_cycle_count();
167+
let start = get_cycle_count();
170168
let mut loop_count = 0;
171-
while xtensa_lx6_rt::get_cycle_count().wrapping_sub(start) < cycles {
169+
while get_cycle_count().wrapping_sub(start) < cycles {
172170
loop_count += 1;
173171
}
174172

@@ -178,7 +176,7 @@ fn cpu1_start() -> ! {
178176
}
179177

180178
fn print_info(loop_count: u32, spin_loop_count: u32, prev_ccount: &mut u32) {
181-
let ccount = xtensa_lx6_rt::get_cycle_count();
179+
let ccount = get_cycle_count();
182180
let ccount_diff = ccount.wrapping_sub(*prev_ccount);
183181

184182
let total = GLOBAL_COUNT.fetch_add(ccount_diff, core::sync::atomic::Ordering::Relaxed);

examples/ram.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ use esp32_hal::dport::Split;
1111
use esp32_hal::dprintln;
1212
use esp32_hal::serial::{config::Config, NoRx, NoTx, Serial};
1313

14+
use xtensa_lx6::get_program_counter;
15+
1416
#[entry]
1517
fn main() -> ! {
1618
let dp = unsafe { esp32::Peripherals::steal() };
@@ -68,7 +70,7 @@ fn attr_none_fn(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx, NoRx)>
6870
uart,
6971
"{:<40}: {:08x?}",
7072
"attr_none_fn",
71-
xtensa_lx6_rt::get_program_counter()
73+
get_program_counter()
7274
)
7375
.unwrap();
7476
}
@@ -79,7 +81,7 @@ fn attr_ram_fn(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx, NoRx)>)
7981
uart,
8082
"{:<40}: {:08x?}",
8183
"attr_ram_fn",
82-
xtensa_lx6_rt::get_program_counter()
84+
get_program_counter()
8385
)
8486
.unwrap();
8587
}
@@ -90,7 +92,7 @@ fn attr_ram_fn_rtc_slow(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx
9092
uart,
9193
"{:<40}: {:08x?}",
9294
"attr_ram_fn_rtc_slow",
93-
xtensa_lx6_rt::get_program_counter()
95+
get_program_counter()
9496
)
9597
.unwrap();
9698
}
@@ -101,7 +103,7 @@ fn attr_ram_fn_rtc_fast(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx
101103
uart,
102104
"{:<40}: {:08x?}",
103105
"attr_ram_fn_rtc_fast",
104-
xtensa_lx6_rt::get_program_counter()
106+
get_program_counter()
105107
)
106108
.unwrap();
107109
}
@@ -204,7 +206,7 @@ fn ram_tests(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx, NoRx)>) {
204206
}
205207

206208
#[cfg(not(feature = "external_ram"))]
207-
fn external_ram(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx, NoRx)>) {}
209+
fn external_ram(_uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx, NoRx)>) {}
208210

209211
#[cfg(feature = "external_ram")]
210212
fn external_ram(uart: &mut esp32_hal::serial::Serial<esp32::UART0, (NoTx, NoRx)>) {

examples/rtccntl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ fn main() -> ! {
116116

117117
x = x.wrapping_add(1);
118118

119-
let ccount = xtensa_lx6_rt::get_cycle_count();
119+
let ccount = xtensa_lx6::get_cycle_count();
120120
let ccount_diff = ccount.wrapping_sub(prev_ccount);
121121

122122
writeln!(

examples/timer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ fn main() -> ! {
143143
timer0.get_value(),
144144
timer1.get_value(),
145145
timer2.get_value(),
146-
xtensa_lx6_rt::get_cycle_count()
146+
xtensa_lx6::get_cycle_count()
147147
)
148148
.unwrap();
149149
if let Ok(_) = timer1.wait() {

procmacros/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ pub fn ram(args: TokenStream, input: TokenStream) -> TokenStream {
172172

173173
/// Marks a function as an interrupt handler
174174
///
175-
/// Used to handle on of the [interrupts](interrupt/enum.Interrupt.html).
175+
/// Used to handle on of the [interrupts](enum.Interrupt.html).
176176
///
177177
/// When specified between braces (`#[interrupt(example)]`) that interrupt will be used and the function
178178
/// can have an arbitrary name. Otherwise the name of the function must be the name of the

src/alloc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use core::ptr::NonNull;
2626
use linked_list_allocator::Heap;
2727

2828
use spin::{Mutex, MutexGuard};
29-
use xtensa_lx6_rt::interrupt;
29+
use xtensa_lx6::interrupt;
3030

3131
const DEFAULT_EXTERNAL_THRESHOLD: usize = 32 * 1024;
3232
const DEFAULT_USE_IRAM: bool = true;

src/clock_control/cpu.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
44
use super::Error;
55
use crate::Core::{self, APP, PRO};
6+
use xtensa_lx6::set_stack_pointer;
67

78
static mut START_CORE1_FUNCTION: Option<fn() -> !> = None;
89

@@ -118,7 +119,7 @@ impl super::ClockControl {
118119
}
119120

120121
// set stack pointer to end of memory: no need to retain stack up to this point
121-
xtensa_lx6_rt::set_stack_pointer(&mut _stack_end_cpu1);
122+
set_stack_pointer(&mut _stack_end_cpu1);
122123

123124
START_CORE1_FUNCTION.unwrap()();
124125
}

0 commit comments

Comments
 (0)