mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-25 08:12:30 +00:00
stm32/gpdma: ensure bndt in bytes doesn't overflow.
This commit is contained in:
parent
9705f3332b
commit
f2f96a731c
@ -216,7 +216,10 @@ impl<'a> Transfer<'a> {
|
|||||||
data_size: WordSize,
|
data_size: WordSize,
|
||||||
_options: TransferOptions,
|
_options: TransferOptions,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
assert!(mem_len > 0 && mem_len <= 0xFFFF);
|
// BNDT is specified as bytes, not as number of transfers.
|
||||||
|
let Ok(bndt) = (mem_len * data_size.bytes()).try_into() else {
|
||||||
|
panic!("DMA transfers may not be larger than 65535 bytes.");
|
||||||
|
};
|
||||||
|
|
||||||
let info = channel.info();
|
let info = channel.info();
|
||||||
let ch = info.dma.ch(info.num);
|
let ch = info.dma.ch(info.num);
|
||||||
@ -226,9 +229,6 @@ impl<'a> Transfer<'a> {
|
|||||||
|
|
||||||
let this = Self { channel };
|
let this = Self { channel };
|
||||||
|
|
||||||
#[cfg(dmamux)]
|
|
||||||
super::dmamux::configure_dmamux(&*this.channel, request);
|
|
||||||
|
|
||||||
ch.cr().write(|w| w.set_reset(true));
|
ch.cr().write(|w| w.set_reset(true));
|
||||||
ch.fcr().write(|w| w.0 = 0xFFFF_FFFF); // clear all irqs
|
ch.fcr().write(|w| w.0 = 0xFFFF_FFFF); // clear all irqs
|
||||||
ch.llr().write(|_| {}); // no linked list
|
ch.llr().write(|_| {}); // no linked list
|
||||||
@ -245,10 +245,7 @@ impl<'a> Transfer<'a> {
|
|||||||
});
|
});
|
||||||
w.set_reqsel(request);
|
w.set_reqsel(request);
|
||||||
});
|
});
|
||||||
ch.br1().write(|w| {
|
ch.br1().write(|w| w.set_bndt(bndt));
|
||||||
// BNDT is specified as bytes, not as number of transfers.
|
|
||||||
w.set_bndt((mem_len * data_size.bytes()) as u16)
|
|
||||||
});
|
|
||||||
|
|
||||||
match dir {
|
match dir {
|
||||||
Dir::MemoryToPeripheral => {
|
Dir::MemoryToPeripheral => {
|
||||||
|
Loading…
Reference in New Issue
Block a user