Skip to content

Commit f0b2580

Browse files
committed
dma: Improve documentation of panics
Also fixes a typo.
1 parent 970f5db commit f0b2580

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

src/dma.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ pub struct Transfer<B, C: Channel, T> {
3434

3535
impl<B, C: Channel, T> Transfer<B, C, T> {
3636
/// Start a DMA write transfer.
37+
///
38+
/// # Panics
39+
///
40+
/// Panics if the buffer is longer than 65535 words.
3741
pub fn start_write(mut buffer: B, mut channel: C, target: T) -> Self
3842
where
3943
B: WriteBuffer + 'static,
@@ -42,6 +46,7 @@ impl<B, C: Channel, T> Transfer<B, C, T> {
4246
// NOTE(unsafe) cannot call `&mut self` methods on `buffer` because its
4347
// concrete type is unknown here
4448
let (ptr, len) = unsafe { buffer.write_buffer() };
49+
let len = u16(len).expect("buffer is too large");
4550

4651
channel.set_memory_address(ptr as u32, Increment::Enable);
4752
channel.set_transfer_length(len);
@@ -52,6 +57,10 @@ impl<B, C: Channel, T> Transfer<B, C, T> {
5257
}
5358

5459
/// Start a DMA read transfer.
60+
///
61+
/// # Panics
62+
///
63+
/// Panics if the buffer is longer than 65535 words.
5564
pub fn start_read(buffer: B, mut channel: C, target: T) -> Self
5665
where
5766
B: ReadBuffer + 'static,
@@ -60,6 +69,7 @@ impl<B, C: Channel, T> Transfer<B, C, T> {
6069
// NOTE(unsafe) cannot call `&mut self` methods on `buffer` because its
6170
// concrete type is unknown here
6271
let (ptr, len) = unsafe { buffer.read_buffer() };
72+
let len = u16(len).expect("buffer is too large");
6373

6474
channel.set_memory_address(ptr as u32, Increment::Enable);
6575
channel.set_transfer_length(len);
@@ -97,7 +107,7 @@ impl<B, C: Channel, T> Transfer<B, C, T> {
97107
/// Is this transfer complete?
98108
pub fn is_complete(&self) -> bool {
99109
let inner = self.inner.as_ref().unwrap();
100-
inner.channel.event_occured(Event::TransferComplete)
110+
inner.channel.event_occurred(Event::TransferComplete)
101111
}
102112

103113
/// Stop this transfer and return ownership over its parts
@@ -420,7 +430,7 @@ pub enum Event {
420430
/// Trait implemented by all DMA channels
421431
pub trait Channel: private::Channel {
422432
/// Is the interrupt flag for the given event set?
423-
fn event_occured(&self, event: Event) -> bool;
433+
fn event_occurred(&self, event: Event) -> bool;
424434
/// Clear the interrupt flag for the given event
425435
fn clear_event(&mut self, event: Event);
426436

@@ -471,14 +481,17 @@ pub trait Channel: private::Channel {
471481
/// # Panics
472482
///
473483
/// Panics if this channel is enabled.
474-
fn set_transfer_length(&mut self, len: usize) {
484+
fn set_transfer_length(&mut self, len: u16) {
475485
assert!(!self.is_enabled());
476486

477-
let len = u16(len).expect("DMA transfer length too large");
478487
self.ch().ndtr.write(|w| w.ndt().bits(len));
479488
}
480489

481-
/// Set the word size
490+
/// Set the word size.
491+
///
492+
/// # Panics
493+
///
494+
/// Panics if the word size is not one of 8, 16, or 32 bits.
482495
fn set_word_size<W>(&mut self) {
483496
use cr::PSIZE_A::*;
484497

@@ -621,7 +634,7 @@ macro_rules! dma {
621634
}
622635

623636
impl Channel for $Ci {
624-
fn event_occured(&self, event: Event) -> bool {
637+
fn event_occurred(&self, event: Event) -> bool {
625638
use Event::*;
626639

627640
// NOTE(unsafe) atomic read

0 commit comments

Comments
 (0)