/* * MCP23S17.h * * Created on: 19 июл. 2019 г. * Author: titov */ #ifndef SOURCE_DRIVER_CHIPSET_MCP23S17_H_ #define SOURCE_DRIVER_CHIPSET_MCP23S17_H_ #include "PackagerMCP23S17.hpp" #include "../SerialPortAdapter.hpp" #include "../PinIO.hh" #include "../PinIOOverride.hh" #include "../PortMultiplexer.hpp" #include "../../systemic/RegisterEncoder.hpp" namespace driver { namespace chipset { namespace MCP23S17 { typedef PackagerMCP23S17 Packager; typedef uint16_t Latency; typedef SerialPortAdapter SerialPortRegister; typedef PinIO PinIO; typedef PinIOOverride PinIOOverride; typedef PortMultiplexer PortMultiplexer; //Струткура адресов регистров управления при парном доступе. struct ControlRegistersPairedAcronims { enum Acronims { IODIR = 0x00, //Управление направлением порта. IPOL = 0x02, //Конфигурация полярности регистров порта. GPINTEN = 0x04, //Управление прерыванием по изменению для каждого пина порта. DEFVAL = 0x06, //Значение по умолчанию для сравнения. INTCON = 0x08, //Контроль сравнение ассоциированного пина для прерывания по изменению. IOCON = 0x0A, //Поля настройки устройства. GPPU = 0x0C, //Управление резисторами PULL-UP для пинов порта. INTF = 0x0E, //Условия прерывания пинов порта. INTCAP = 0x10, //Значение пина порта при срабатывание прерывания. GPIO = 0x12, //Отображение состояния порта. OLAT = 0x14, //Доступ к защелка порта. }; }; //! Перечисление возможных адресов устройст на шине передачи данных enum HardwareAddress { A0 = 0, A1, A2, A3, A4, A5, A6, A7 }; //! Перечисление порядковых номеров пинов в регистре порта enum PinOrderNum { GPA0 = 0, GPA1, GPA2, GPA3, GPA4, GPA5, GPA6, GPA7, GPB0, GPB1, GPB2, GPB3, GPB4, GPB5, GPB6, GPB7, }; //! Перечисление способов адрессации enum BANKOption { REGISTER_ASSOCIATED_WITH_EACH_PORT = 1, //!