Fix build with all nrf chip models
This commit is contained in:
		
							parent
							
								
									2684bf605a
								
							
						
					
					
						commit
						0643095695
					
				| @ -12,11 +12,11 @@ defmt-info = [] | |||||||
| defmt-warn = [] | defmt-warn = [] | ||||||
| defmt-error = [] | defmt-error = [] | ||||||
| 
 | 
 | ||||||
| 52810 = ["nrf52810-pac"] | 52810 = ["nrf52810-pac", "nrf52810-hal"] | ||||||
| 52811 = ["nrf52811-pac"] | 52811 = ["nrf52811-pac"] #, "nrf52811-hal"] | ||||||
| 52832 = ["nrf52832-pac"] | 52832 = ["nrf52832-pac", "nrf52832-hal"] | ||||||
| 52833 = ["nrf52833-pac"] | 52833 = ["nrf52833-pac", "nrf52833-hal"] | ||||||
| 52840 = ["nrf52840-pac"] | 52840 = ["nrf52840-pac", "nrf52840-hal"] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| [dependencies] | [dependencies] | ||||||
| @ -24,7 +24,6 @@ embassy = { version = "0.1.0", path = "../embassy" } | |||||||
| cortex-m-rt = "0.6.12" | cortex-m-rt = "0.6.12" | ||||||
| cortex-m        = { version = "0.6.3" } | cortex-m        = { version = "0.6.3" } | ||||||
| embedded-hal    = { version = "0.2.4" } | embedded-hal    = { version = "0.2.4" } | ||||||
| nrf52840-hal    = { version = "0.11.0" } |  | ||||||
| bare-metal = { version = "0.2.0", features = ["const-fn"] } | bare-metal = { version = "0.2.0", features = ["const-fn"] } | ||||||
| defmt = "0.1.0" | defmt = "0.1.0" | ||||||
| 
 | 
 | ||||||
| @ -33,3 +32,9 @@ nrf52811-pac  = { version = "0.9.0", optional = true } | |||||||
| nrf52832-pac  = { version = "0.9.0", optional = true } | nrf52832-pac  = { version = "0.9.0", optional = true } | ||||||
| nrf52833-pac  = { version = "0.9.0", optional = true } | nrf52833-pac  = { version = "0.9.0", optional = true } | ||||||
| nrf52840-pac  = { version = "0.9.0", optional = true } | nrf52840-pac  = { version = "0.9.0", optional = true } | ||||||
|  | 
 | ||||||
|  | nrf52810-hal  = { version = "0.11.0", optional = true } | ||||||
|  | #nrf52811-hal  = { version = "0.11.0", optional = true }  # doesn't exist yet | ||||||
|  | nrf52832-hal  = { version = "0.11.0", optional = true } | ||||||
|  | nrf52833-hal  = { version = "0.11.0", optional = true } | ||||||
|  | nrf52840-hal  = { version = "0.11.0", optional = true } | ||||||
|  | |||||||
| @ -2,8 +2,8 @@ use core::cell::Cell; | |||||||
| use core::ptr; | use core::ptr; | ||||||
| use defmt::trace; | use defmt::trace; | ||||||
| use embassy::util::Signal; | use embassy::util::Signal; | ||||||
| use nrf52840_hal::gpio::{Input, Level, Output, Pin, Port}; |  | ||||||
| 
 | 
 | ||||||
|  | use crate::hal::gpio::{Input, Level, Output, Pin, Port}; | ||||||
| use crate::interrupt; | use crate::interrupt; | ||||||
| use crate::pac::generic::Reg; | use crate::pac::generic::Reg; | ||||||
| use crate::pac::gpiote::_TASKS_OUT; | use crate::pac::gpiote::_TASKS_OUT; | ||||||
| @ -100,6 +100,7 @@ impl Gpiote { | |||||||
|                     EventPolarity::None => w.mode().event().polarity().none(), |                     EventPolarity::None => w.mode().event().polarity().none(), | ||||||
|                     EventPolarity::Toggle => w.mode().event().polarity().toggle(), |                     EventPolarity::Toggle => w.mode().event().polarity().toggle(), | ||||||
|                 }; |                 }; | ||||||
|  |                 #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
|                 w.port().bit(match pin.port() { |                 w.port().bit(match pin.port() { | ||||||
|                     Port::Port0 => false, |                     Port::Port0 => false, | ||||||
|                     Port::Port1 => true, |                     Port::Port1 => true, | ||||||
| @ -140,6 +141,7 @@ impl Gpiote { | |||||||
|                     TaskOutPolarity::Clear => w.polarity().hi_to_lo(), |                     TaskOutPolarity::Clear => w.polarity().hi_to_lo(), | ||||||
|                     TaskOutPolarity::Toggle => w.polarity().toggle(), |                     TaskOutPolarity::Toggle => w.polarity().toggle(), | ||||||
|                 }; |                 }; | ||||||
|  |                 #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
|                 w.port().bit(match pin.port() { |                 w.port().bit(match pin.port() { | ||||||
|                     Port::Port0 => false, |                     Port::Port0 => false, | ||||||
|                     Port::Port1 => true, |                     Port::Port1 => true, | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| //! This module implements an API for managing interrupts compatible with
 | //! This module implements an API for managing interrupts compatible with
 | ||||||
| //! nrf_softdevice::interrupt. Intended for switching between the two at compile-time.
 | //! nrf_softdevice::interrupt. Intended for switching between the two at compile-time.
 | ||||||
| 
 | 
 | ||||||
| use core::sync::atomic::{compiler_fence, AtomicBool, Ordering}; | use core::sync::atomic::{compiler_fence, Ordering}; | ||||||
| 
 | 
 | ||||||
| use crate::pac::{NVIC, NVIC_PRIO_BITS}; | use crate::pac::{NVIC, NVIC_PRIO_BITS}; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -37,8 +37,20 @@ pub use nrf52833_pac as pac; | |||||||
| #[cfg(feature = "52840")] | #[cfg(feature = "52840")] | ||||||
| pub use nrf52840_pac as pac; | pub use nrf52840_pac as pac; | ||||||
| 
 | 
 | ||||||
|  | #[cfg(feature = "52810")] | ||||||
|  | pub use nrf52810_hal as hal; | ||||||
|  | #[cfg(feature = "52811")] | ||||||
|  | pub use nrf52811_hal as hal; | ||||||
|  | #[cfg(feature = "52832")] | ||||||
|  | pub use nrf52832_hal as hal; | ||||||
|  | #[cfg(feature = "52833")] | ||||||
|  | pub use nrf52833_hal as hal; | ||||||
|  | #[cfg(feature = "52840")] | ||||||
|  | pub use nrf52840_hal as hal; | ||||||
|  | 
 | ||||||
| pub mod gpiote; | pub mod gpiote; | ||||||
| pub mod interrupt; | pub mod interrupt; | ||||||
|  | #[cfg(feature = "52840")] | ||||||
| pub mod qspi; | pub mod qspi; | ||||||
| pub mod rtc; | pub mod rtc; | ||||||
| pub mod uarte; | pub mod uarte; | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| use crate::pac::{Interrupt, QSPI}; |  | ||||||
| use core::future::Future; | use core::future::Future; | ||||||
| use nrf52840_hal::gpio::{Output, Pin as GpioPin, Port as GpioPort, PushPull}; | 
 | ||||||
|  | use crate::hal::gpio::{Output, Pin as GpioPin, Port as GpioPort, PushPull}; | ||||||
|  | use crate::pac::{Interrupt, QSPI}; | ||||||
| 
 | 
 | ||||||
| pub use crate::pac::qspi::ifconfig0::ADDRMODE_A as AddressMode; | pub use crate::pac::qspi::ifconfig0::ADDRMODE_A as AddressMode; | ||||||
| pub use crate::pac::qspi::ifconfig0::PPSIZE_A as WritePageSize; | pub use crate::pac::qspi::ifconfig0::PPSIZE_A as WritePageSize; | ||||||
| @ -314,7 +315,7 @@ static SIGNAL: Signal<()> = Signal::new(); | |||||||
| 
 | 
 | ||||||
| #[interrupt] | #[interrupt] | ||||||
| unsafe fn QSPI() { | unsafe fn QSPI() { | ||||||
|     let p = unsafe { crate::pac::Peripherals::steal().QSPI }; |     let p = crate::pac::Peripherals::steal().QSPI; | ||||||
|     if p.events_ready.read().events_ready().bit_is_set() { |     if p.events_ready.read().events_ready().bit_is_set() { | ||||||
|         p.events_ready.reset(); |         p.events_ready.reset(); | ||||||
|         SIGNAL.signal(()); |         SIGNAL.signal(()); | ||||||
|  | |||||||
| @ -96,8 +96,8 @@ impl<T: Instance> RTC<T> { | |||||||
|             w |             w | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         self.rtc.tasks_clear.write(|w| w.tasks_clear().set_bit()); |         self.rtc.tasks_clear.write(|w| unsafe { w.bits(1) }); | ||||||
|         self.rtc.tasks_start.write(|w| w.tasks_start().set_bit()); |         self.rtc.tasks_start.write(|w| unsafe { w.bits(1) }); | ||||||
| 
 | 
 | ||||||
|         // Wait for clear
 |         // Wait for clear
 | ||||||
|         while self.rtc.counter.read().bits() != 0 {} |         while self.rtc.counter.read().bits() != 0 {} | ||||||
|  | |||||||
| @ -13,11 +13,14 @@ use core::ptr; | |||||||
| use core::sync::atomic::{compiler_fence, Ordering}; | use core::sync::atomic::{compiler_fence, Ordering}; | ||||||
| use core::task::{Context, Poll}; | use core::task::{Context, Poll}; | ||||||
| 
 | 
 | ||||||
|  | use embedded_hal::digital::v2::OutputPin; | ||||||
|  | 
 | ||||||
|  | use crate::hal::gpio::{Floating, Input, Output, Pin as GpioPin, Port as GpioPort, PushPull}; | ||||||
| use crate::interrupt; | use crate::interrupt; | ||||||
| use crate::interrupt::CriticalSection; | use crate::interrupt::CriticalSection; | ||||||
| use crate::pac::{uarte0, Interrupt, UARTE0, UARTE1}; | #[cfg(any(feature = "52833", feature = "52840", feature = "9160"))] | ||||||
| use embedded_hal::digital::v2::OutputPin; | use crate::pac::UARTE1; | ||||||
| use nrf52840_hal::gpio::{Floating, Input, Output, Pin as GpioPin, Port as GpioPort, PushPull}; | use crate::pac::{uarte0, Interrupt, UARTE0}; | ||||||
| 
 | 
 | ||||||
| // Re-export SVD variants to allow user to directly set values
 | // Re-export SVD variants to allow user to directly set values
 | ||||||
| pub use uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Parity}; | pub use uarte0::{baudrate::BAUDRATE_A as Baudrate, config::PARITY_A as Parity}; | ||||||
| @ -152,6 +155,7 @@ pub struct UarteState<T> { | |||||||
|     _pin: PhantomPinned, |     _pin: PhantomPinned, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
| fn port_bit(port: GpioPort) -> bool { | fn port_bit(port: GpioPort) -> bool { | ||||||
|     match port { |     match port { | ||||||
|         GpioPort::Port0 => false, |         GpioPort::Port0 => false, | ||||||
| @ -164,12 +168,14 @@ impl<T: Instance> Uarte<T> { | |||||||
|         // Select pins
 |         // Select pins
 | ||||||
|         uarte.psel.rxd.write(|w| { |         uarte.psel.rxd.write(|w| { | ||||||
|             let w = unsafe { w.pin().bits(pins.rxd.pin()) }; |             let w = unsafe { w.pin().bits(pins.rxd.pin()) }; | ||||||
|  |             #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
|             let w = w.port().bit(port_bit(pins.rxd.port())); |             let w = w.port().bit(port_bit(pins.rxd.port())); | ||||||
|             w.connect().connected() |             w.connect().connected() | ||||||
|         }); |         }); | ||||||
|         pins.txd.set_high().unwrap(); |         pins.txd.set_high().unwrap(); | ||||||
|         uarte.psel.txd.write(|w| { |         uarte.psel.txd.write(|w| { | ||||||
|             let w = unsafe { w.pin().bits(pins.txd.pin()) }; |             let w = unsafe { w.pin().bits(pins.txd.pin()) }; | ||||||
|  |             #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
|             let w = w.port().bit(port_bit(pins.txd.port())); |             let w = w.port().bit(port_bit(pins.txd.port())); | ||||||
|             w.connect().connected() |             w.connect().connected() | ||||||
|         }); |         }); | ||||||
| @ -178,6 +184,7 @@ impl<T: Instance> Uarte<T> { | |||||||
|         uarte.psel.cts.write(|w| { |         uarte.psel.cts.write(|w| { | ||||||
|             if let Some(ref pin) = pins.cts { |             if let Some(ref pin) = pins.cts { | ||||||
|                 let w = unsafe { w.pin().bits(pin.pin()) }; |                 let w = unsafe { w.pin().bits(pin.pin()) }; | ||||||
|  |                 #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
|                 let w = w.port().bit(port_bit(pin.port())); |                 let w = w.port().bit(port_bit(pin.port())); | ||||||
|                 w.connect().connected() |                 w.connect().connected() | ||||||
|             } else { |             } else { | ||||||
| @ -188,6 +195,7 @@ impl<T: Instance> Uarte<T> { | |||||||
|         uarte.psel.rts.write(|w| { |         uarte.psel.rts.write(|w| { | ||||||
|             if let Some(ref pin) = pins.rts { |             if let Some(ref pin) = pins.rts { | ||||||
|                 let w = unsafe { w.pin().bits(pin.pin()) }; |                 let w = unsafe { w.pin().bits(pin.pin()) }; | ||||||
|  |                 #[cfg(any(feature = "52833", feature = "52840"))] | ||||||
|                 let w = w.port().bit(port_bit(pin.port())); |                 let w = w.port().bit(port_bit(pin.port())); | ||||||
|                 w.connect().connected() |                 w.connect().connected() | ||||||
|             } else { |             } else { | ||||||
| @ -493,11 +501,11 @@ pub struct Pins { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| mod private { | mod private { | ||||||
|     use nrf52840_pac::{UARTE0, UARTE1}; |  | ||||||
|     pub trait Sealed {} |     pub trait Sealed {} | ||||||
| 
 | 
 | ||||||
|     impl Sealed for UARTE0 {} |     impl Sealed for crate::pac::UARTE0 {} | ||||||
|     impl Sealed for UARTE1 {} |     #[cfg(any(feature = "52833", feature = "52840", feature = "9160"))] | ||||||
|  |     impl Sealed for crate::pac::UARTE1 {} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub trait Instance: Deref<Target = uarte0::RegisterBlock> + Sized + private::Sealed { | pub trait Instance: Deref<Target = uarte0::RegisterBlock> + Sized + private::Sealed { | ||||||
| @ -515,12 +523,14 @@ unsafe fn UARTE0_UART0() { | |||||||
|     interrupt::free(|cs| UARTE0::get_state(cs).as_mut().unwrap().on_interrupt()); |     interrupt::free(|cs| UARTE0::get_state(cs).as_mut().unwrap().on_interrupt()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[cfg(any(feature = "52833", feature = "52840", feature = "9160"))] | ||||||
| #[interrupt] | #[interrupt] | ||||||
| unsafe fn UARTE1() { | unsafe fn UARTE1() { | ||||||
|     interrupt::free(|cs| UARTE1::get_state(cs).as_mut().unwrap().on_interrupt()); |     interrupt::free(|cs| UARTE1::get_state(cs).as_mut().unwrap().on_interrupt()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static mut UARTE0_STATE: *mut UarteState<UARTE0> = ptr::null_mut(); | static mut UARTE0_STATE: *mut UarteState<UARTE0> = ptr::null_mut(); | ||||||
|  | #[cfg(any(feature = "52833", feature = "52840", feature = "9160"))] | ||||||
| static mut UARTE1_STATE: *mut UarteState<UARTE1> = ptr::null_mut(); | static mut UARTE1_STATE: *mut UarteState<UARTE1> = ptr::null_mut(); | ||||||
| 
 | 
 | ||||||
| impl Instance for UARTE0 { | impl Instance for UARTE0 { | ||||||
| @ -536,6 +546,7 @@ impl Instance for UARTE0 { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[cfg(any(feature = "52833", feature = "52840", feature = "9160"))] | ||||||
| impl Instance for UARTE1 { | impl Instance for UARTE1 { | ||||||
|     fn interrupt() -> Interrupt { |     fn interrupt() -> Interrupt { | ||||||
|         Interrupt::UARTE1 |         Interrupt::UARTE1 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user