diff --git a/Cargo.toml b/Cargo.toml index 9db89d6f7248cb8a61d39dbd125f8d2f0759ecc3..e1be021cd594b729ce6aa43f4517892719d555e0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ keywords = ["arm", "cortex-m", "register", "peripheral"] license = "MIT OR Apache-2.0" name = "cortex-m" repository = "https://github.com/japaric/cortex-m" -version = "0.3.1" +version = "0.3.2" [dependencies] aligned = "0.1.1" diff --git a/src/itm.rs b/src/itm.rs index 80de99ca5f7a87600a5530016d34f88b09807158..7eab5ac1d86926df3741c0ab1e4c8b71ac26eb37 100644 --- a/src/itm.rs +++ b/src/itm.rs @@ -1,6 +1,6 @@ //! Instrumentation Trace Macrocell -use core::{fmt, mem, ptr, slice}; +use core::{fmt, ptr, slice}; use aligned::Aligned; @@ -27,47 +27,52 @@ impl<'p> fmt::Write for Port<'p> { /// Writes a `buffer` to the ITM `port` pub fn write_all(port: &Stim, buffer: &[u8]) { - unsafe { - let mut len = buffer.len(); - let mut ptr = buffer.as_ptr(); - - if len == 0 { - return; - } - - // 0x01 OR 0x03 - if ptr as usize % 2 == 1 { - while !port.is_fifo_ready() {} - port.write_u8(*ptr); - - // 0x02 OR 0x04 - ptr = ptr.offset(1); - len -= 1; - } - - // 0x02 - if ptr as usize % 4 == 2 { - if len > 1 { - // at least 2 bytes - while !port.is_fifo_ready() {} - port.write_u16(ptr::read(ptr as *const u16)); - - // 0x04 - ptr = ptr.offset(2); - len -= 2; - } else { - if len == 1 { - // last byte - while !port.is_fifo_ready() {} - port.write_u8(*ptr); - } - - return; - } - } - - write_aligned(port, mem::transmute(slice::from_raw_parts(ptr, len))); + for d in buffer { + while !port.is_fifo_ready() {} + port.write_u32(*d as u32); } + // unsafe { + // let mut len = buffer.len(); + // let mut ptr = buffer.as_ptr(); + // + // if len == 0 { + // return; + // } + // + // + // // 0x01 OR 0x03 + // if ptr as usize % 2 == 1 { + // while !port.is_fifo_ready() {} + // port.write_u8(*ptr); + // + // // 0x02 OR 0x04 + // ptr = ptr.offset(1); + // len -= 1; + // } + // + // // 0x02 + // if ptr as usize % 4 == 2 { + // if len > 1 { + // // at least 2 bytes + // while !port.is_fifo_ready() {} + // port.write_u16(ptr::read(ptr as *const u16)); + // + // // 0x04 + // ptr = ptr.offset(2); + // len -= 2; + // } else { + // if len == 1 { + // // last byte + // while !port.is_fifo_ready() {} + // port.write_u8(*ptr); + // } + // + // return; + // } + // } + // + // write_aligned(port, mem::transmute(slice::from_raw_parts(ptr, len))); + // } } /// Writes a 4-byte aligned `buffer` to the ITM `port`