Add more docs
This commit is contained in:
parent
65c7457c01
commit
70dfbc03b0
@ -5,14 +5,23 @@ use crate::gpio::Pull;
|
||||
#[repr(u8)]
|
||||
#[derive(Copy, Clone)]
|
||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||
/// Bits of the I2C OA2 register to mask out.
|
||||
pub enum AddrMask {
|
||||
/// No mask
|
||||
NOMASK,
|
||||
/// OA2\[1\] is masked and don’t care. Only OA2\[7:2\] are compared.
|
||||
MASK1,
|
||||
/// OA2\[2:1\] are masked and don’t care. Only OA2\[7:3\] are compared.
|
||||
MASK2,
|
||||
/// OA2\[3:1\] are masked and don’t care. Only OA2\[7:4\] are compared.
|
||||
MASK3,
|
||||
/// OA2\[4:1\] are masked and don’t care. Only OA2\[7:5\] are compared.
|
||||
MASK4,
|
||||
/// OA2\[5:1\] are masked and don’t care. Only OA2\[7:6\] are compared.
|
||||
MASK5,
|
||||
/// OA2\[6:1\] are masked and don’t care. Only OA2\[7:6\] are compared.
|
||||
MASK6,
|
||||
/// OA2\[7:1\] are masked and don’t care. No comparison is done, and all (except reserved) 7-bit received addresses are acknowledged
|
||||
MASK7,
|
||||
}
|
||||
impl From<AddrMask> for Oamsk {
|
||||
@ -32,8 +41,13 @@ impl From<AddrMask> for Oamsk {
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||
/// An I2C address. Either 7 or 10 bit.
|
||||
pub enum Address {
|
||||
/// A 7 bit address
|
||||
SevenBit(u8),
|
||||
/// A 10 bit address.
|
||||
///
|
||||
/// When using an address to configure the Own Address, only the OA1 register can be set to a 10-bit address.
|
||||
TenBit(u16),
|
||||
}
|
||||
impl From<u8> for Address {
|
||||
@ -54,6 +68,9 @@ impl Address {
|
||||
Address::TenBit(_) => stm32_metapac::i2c::vals::Addmode::BIT10,
|
||||
}
|
||||
}
|
||||
/// Get the inner address as a u16.
|
||||
///
|
||||
/// For 7 bit addresses, the u8 that was used to store the address is returned as a u16.
|
||||
pub fn addr(&self) -> u16 {
|
||||
match self {
|
||||
Address::SevenBit(addr) => *addr as u16,
|
||||
@ -64,17 +81,29 @@ impl Address {
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||
/// The second Own Address register.
|
||||
pub struct OA2 {
|
||||
/// The address.
|
||||
pub addr: u8,
|
||||
/// The bit mask that will affect how the own address 2 register is compared.
|
||||
pub mask: AddrMask,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||
/// The Own Address(es) of the I2C peripheral.
|
||||
pub enum OwnAddresses {
|
||||
/// Configuration for only the OA1 register.
|
||||
OA1(Address),
|
||||
/// Configuration for only the OA2 register.
|
||||
OA2(OA2),
|
||||
Both { oa1: Address, oa2: OA2 },
|
||||
/// Configuration for both the OA1 and OA2 registers.
|
||||
Both {
|
||||
/// The [Address] for the OA1 register.
|
||||
oa1: Address,
|
||||
/// The [OA2] configuration.
|
||||
oa2: OA2,
|
||||
},
|
||||
}
|
||||
|
||||
/// Slave Configuration
|
||||
@ -87,16 +116,10 @@ pub struct SlaveAddrConfig {
|
||||
pub general_call: bool,
|
||||
}
|
||||
impl SlaveAddrConfig {
|
||||
pub fn new_oa1(addr: Address, general_call: bool) -> Self {
|
||||
/// Create a new slave address configuration with only the OA1 register set in 7 bit mode and the general call disabled.
|
||||
pub fn basic(addr: u8) -> Self {
|
||||
Self {
|
||||
addr: OwnAddresses::OA1(addr),
|
||||
general_call,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn basic(addr: Address) -> Self {
|
||||
Self {
|
||||
addr: OwnAddresses::OA1(addr),
|
||||
addr: OwnAddresses::OA1(Address::SevenBit(addr)),
|
||||
general_call: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ use embassy_hal_internal::{Peripheral, PeripheralRef};
|
||||
use embassy_sync::waitqueue::AtomicWaker;
|
||||
#[cfg(feature = "time")]
|
||||
use embassy_time::{Duration, Instant};
|
||||
use mode::{Master, MasterMode, MultiMaster};
|
||||
use mode::{Master, MasterMode};
|
||||
|
||||
use crate::dma::ChannelAndRequest;
|
||||
#[cfg(gpio_v2)]
|
||||
@ -146,7 +146,9 @@ pub enum CommandKind {
|
||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||
/// The command kind to the slave from the master and the address that the slave matched
|
||||
pub struct Command {
|
||||
/// The kind of command
|
||||
pub kind: CommandKind,
|
||||
/// The address that the slave matched
|
||||
pub address: Address,
|
||||
}
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ use config::{Address, OwnAddresses, OA2};
|
||||
use embassy_embedded_hal::SetConfig;
|
||||
use embassy_hal_internal::drop::OnDrop;
|
||||
use embedded_hal_1::i2c::Operation;
|
||||
use mode::Master;
|
||||
use mode::{Master, MultiMaster};
|
||||
use stm32_metapac::i2c::vals::Addmode;
|
||||
|
||||
use super::*;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user