stm32: xspi fixes and consistency
Fix some incorrect DTR flags, fix _bit vs _Bit inconsistency (copied from qspi and ospi). Use the same NCS pullup for all constructors. xspi is now enabled in PWR register
This commit is contained in:
parent
6b80f3bada
commit
5f7da4cfc8
@ -160,9 +160,9 @@ impl Into<u8> for MemorySize {
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum AddressSize {
|
||||
/// 8-bit address
|
||||
_8Bit,
|
||||
_8bit,
|
||||
/// 16-bit address
|
||||
_16Bit,
|
||||
_16bit,
|
||||
/// 24-bit address
|
||||
_24bit,
|
||||
/// 32-bit address
|
||||
@ -172,8 +172,8 @@ pub enum AddressSize {
|
||||
impl Into<u8> for AddressSize {
|
||||
fn into(self) -> u8 {
|
||||
match self {
|
||||
AddressSize::_8Bit => 0b00,
|
||||
AddressSize::_16Bit => 0b01,
|
||||
AddressSize::_8bit => 0b00,
|
||||
AddressSize::_16bit => 0b01,
|
||||
AddressSize::_24bit => 0b10,
|
||||
AddressSize::_32bit => 0b11,
|
||||
}
|
||||
|
||||
@ -122,17 +122,17 @@ impl Default for TransferConfig {
|
||||
Self {
|
||||
iwidth: XspiWidth::NONE,
|
||||
instruction: None,
|
||||
isize: AddressSize::_8Bit,
|
||||
isize: AddressSize::_8bit,
|
||||
idtr: false,
|
||||
|
||||
adwidth: XspiWidth::NONE,
|
||||
address: None,
|
||||
adsize: AddressSize::_8Bit,
|
||||
adsize: AddressSize::_8bit,
|
||||
addtr: false,
|
||||
|
||||
abwidth: XspiWidth::NONE,
|
||||
alternate_bytes: None,
|
||||
absize: AddressSize::_8Bit,
|
||||
absize: AddressSize::_8bit,
|
||||
abdtr: false,
|
||||
|
||||
dwidth: XspiWidth::NONE,
|
||||
@ -214,11 +214,11 @@ impl<'d, T: Instance, M: PeriMode> Xspi<'d, T, M> {
|
||||
w.set_isize(WccrIsize::from_bits(write_config.isize.into()));
|
||||
|
||||
w.set_admode(WccrAdmode::from_bits(write_config.adwidth.into()));
|
||||
w.set_addtr(write_config.idtr);
|
||||
w.set_addtr(write_config.addtr);
|
||||
w.set_adsize(WccrAdsize::from_bits(write_config.adsize.into()));
|
||||
|
||||
w.set_dmode(WccrDmode::from_bits(write_config.dwidth.into()));
|
||||
w.set_ddtr(write_config.idtr);
|
||||
w.set_ddtr(write_config.ddtr);
|
||||
|
||||
w.set_abmode(WccrAbmode::from_bits(write_config.abwidth.into()));
|
||||
w.set_dqse(true);
|
||||
@ -283,6 +283,13 @@ impl<'d, T: Instance, M: PeriMode> Xspi<'d, T, M> {
|
||||
width: XspiWidth,
|
||||
dual_quad: bool,
|
||||
) -> Self {
|
||||
// Enable the interface
|
||||
match T::SPI_IDX {
|
||||
1 => crate::pac::PWR.csr2().modify(|r| r.set_en_xspim1(true)),
|
||||
2 => crate::pac::PWR.csr2().modify(|r| r.set_en_xspim2(true)),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
#[cfg(xspim_v1)]
|
||||
{
|
||||
// RCC for xspim should be enabled before writing register
|
||||
@ -447,7 +454,7 @@ impl<'d, T: Instance, M: PeriMode> Xspi<'d, T, M> {
|
||||
w.set_isize(CcrIsize::from_bits(command.isize.into()));
|
||||
|
||||
w.set_admode(CcrAdmode::from_bits(command.adwidth.into()));
|
||||
w.set_addtr(command.idtr);
|
||||
w.set_addtr(command.addtr);
|
||||
w.set_adsize(CcrAdsize::from_bits(command.adsize.into()));
|
||||
|
||||
w.set_dmode(CcrDmode::from_bits(command.dwidth.into()));
|
||||
@ -686,7 +693,10 @@ impl<'d, T: Instance> Xspi<'d, T, Blocking> {
|
||||
None,
|
||||
new_pin!(clk, AfType::output(OutputType::PushPull, Speed::VeryHigh)),
|
||||
ncs.sel(),
|
||||
new_pin!(ncs, AfType::output(OutputType::OpenDrain, Speed::VeryHigh)),
|
||||
new_pin!(
|
||||
ncs,
|
||||
AfType::output_pull(OutputType::PushPull, Speed::VeryHigh, Pull::Up)
|
||||
),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
@ -915,7 +925,10 @@ impl<'d, T: Instance> Xspi<'d, T, Async> {
|
||||
None,
|
||||
new_pin!(clk, AfType::output(OutputType::PushPull, Speed::VeryHigh)),
|
||||
ncs.sel(),
|
||||
new_pin!(ncs, AfType::output(OutputType::PushPull, Speed::VeryHigh)),
|
||||
new_pin!(
|
||||
ncs,
|
||||
AfType::output_pull(OutputType::PushPull, Speed::VeryHigh, Pull::Up)
|
||||
),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user