ESPHome
2026.5.0b1
Loading...
Searching...
No Matches
esphome
components
mcp23s08
mcp23s08.cpp
Go to the documentation of this file.
1
#include "
mcp23s08.h
"
2
#include "
esphome/core/log.h
"
3
4
namespace
esphome::mcp23s08
{
5
6
static
const
char
*
const
TAG =
"mcp23s08"
;
7
8
// IOCON register bits
9
static
constexpr
uint8_t IOCON_SEQOP = 0x20;
// Sequential operation mode
10
static
constexpr
uint8_t IOCON_HAEN = 0x08;
// Hardware address enable
11
static
constexpr
uint8_t IOCON_ODR = 0x04;
// Open-drain output for INT pin
12
13
void
MCP23S08::set_device_address
(uint8_t device_addr) {
14
if
(device_addr != 0) {
15
this->
device_opcode_
|= ((device_addr & 0x03) << 1);
16
}
17
}
18
19
void
MCP23S08::setup
() {
20
this->
spi_setup
();
21
22
// Enable HAEN (broadcast to all chips since HAEN isn't active yet)
23
this->
enable
();
24
this->
transfer_byte
(0b01000000);
25
this->
transfer_byte
(
mcp23x08_base::MCP23X08_IOCON
);
26
this->
transfer_byte
(IOCON_SEQOP | IOCON_HAEN);
27
this->
disable
();
28
29
// Read current output register state
30
this->
read_reg
(
mcp23x08_base::MCP23X08_OLAT
, &this->
olat_
);
31
32
if
(this->
open_drain_ints_
) {
33
// enable open-drain interrupt pins, 3.3V-safe (addressed, only this chip)
34
this->
write_reg
(
mcp23x08_base::MCP23X08_IOCON
, IOCON_SEQOP | IOCON_HAEN | IOCON_ODR);
35
}
36
37
this->
setup_interrupt_pin_
();
38
}
39
40
void
MCP23S08::dump_config
() {
41
ESP_LOGCONFIG(TAG,
"MCP23S08:"
);
42
LOG_PIN(
" CS Pin: "
, this->
cs_
);
43
LOG_PIN(
" Interrupt Pin: "
, this->
interrupt_pin_
);
44
}
45
46
bool
MCP23S08::read_reg
(uint8_t reg, uint8_t *value) {
47
this->
enable
();
48
this->
transfer_byte
(this->
device_opcode_
| 1);
49
this->
transfer_byte
(reg);
50
*value = this->
transfer_byte
(0);
51
this->
disable
();
52
return
true
;
53
}
54
55
bool
MCP23S08::write_reg
(uint8_t reg, uint8_t value) {
56
this->
enable
();
57
this->
transfer_byte
(this->
device_opcode_
);
58
this->
transfer_byte
(reg);
59
this->
transfer_byte
(value);
60
this->
disable
();
61
return
true
;
62
}
63
64
}
// namespace esphome::mcp23s08
esphome::mcp23s08::MCP23S08::device_opcode_
uint8_t device_opcode_
Definition
mcp23s08.h:25
esphome::mcp23s08::MCP23S08::write_reg
bool write_reg(uint8_t reg, uint8_t value) override
Definition
mcp23s08.cpp:55
esphome::mcp23s08::MCP23S08::dump_config
void dump_config() override
Definition
mcp23s08.cpp:40
esphome::mcp23s08::MCP23S08::set_device_address
void set_device_address(uint8_t device_addr)
Definition
mcp23s08.cpp:13
esphome::mcp23s08::MCP23S08::setup
void setup() override
Definition
mcp23s08.cpp:19
esphome::mcp23s08::MCP23S08::read_reg
bool read_reg(uint8_t reg, uint8_t *value) override
Definition
mcp23s08.cpp:46
esphome::mcp23x08_base::MCP23X08Base::olat_
uint8_t olat_
Definition
mcp23x08_base.h:36
esphome::mcp23xxx_base::MCP23XXXBase< 8 >::setup_interrupt_pin_
void setup_interrupt_pin_()
Definition
mcp23xxx_base.h:35
esphome::mcp23xxx_base::MCP23XXXBase< 8 >::open_drain_ints_
bool open_drain_ints_
Definition
mcp23xxx_base.h:55
esphome::mcp23xxx_base::MCP23XXXBase< 8 >::interrupt_pin_
InternalGPIOPin * interrupt_pin_
Definition
mcp23xxx_base.h:56
esphome::spi::SPIClient::cs_
GPIOPin * cs_
Definition
spi.h:414
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_10MHZ >::enable
void enable()
Definition
spi.h:501
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_10MHZ >::spi_setup
void spi_setup() override
Definition
spi.h:438
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_10MHZ >::disable
void disable()
Definition
spi.h:503
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_10MHZ >::transfer_byte
uint8_t transfer_byte(uint8_t data)
Definition
spi.h:487
log.h
mcp23s08.h
esphome::mcp23s08
Definition
mcp23s08.cpp:4
esphome::mcp23x08_base::MCP23X08_OLAT
@ MCP23X08_OLAT
Definition
mcp23x08_base.h:21
esphome::mcp23x08_base::MCP23X08_IOCON
@ MCP23X08_IOCON
Definition
mcp23x08_base.h:16
Generated by
1.12.0