一、MCP23S18的引脚
GPIOA和GPIOB共16个为双向IO,输出为开漏输出,GPIO模块包含数据端口GPIOn、内部上拉电阻、输出锁存器OLATn
CS片选、SCK时钟、SI串行数据输入、SO串行数据输出
Vdd接电源、Vss接地、RESET复位
INTA、INTB对应端口中断输出
二、寄存器
一共22个寄存器,分为A组和B组。
1、方向寄存器IODIR
配置为1,该位引脚为输入引脚。为0,为输出引脚。
2、输入极性寄存器IPOL
某位置1,对应GPIO反映引脚电平反转后的值
3、电平变化中断控制寄存器GPINTEN
置1,允许对应引脚电平变化中断
4、中断控制寄存器INTCON
为1,引脚值与默认值DEFVAL比较。为0,引脚与先前值比较
5、电平变化中断的默认值比较寄存器DEFVAL
用于判断中断时的比较默认值
6、配置寄存器IOCON
BANK位控制如何对寄存器寻址
当BANK=1,PORTA寄存器映射到00h~0Ah,PORTB寄存器映射到10h~1Ah
当BANK=0,A/B寄存器组合配对
MIRROR位控制INTA和INTB如何相互作用
为1,任何一个端口上的中断都会使INTA和INTB激活
为0,B端口中断使INTB激活,A端口中断INTA激活
SEQOP连续操作模式位
为1,禁止连续操作,地址指针不递增
为0,使能连续操作,地址指针递增
ODR开漏控制位,用于使能或禁止INT引脚的开漏输出
为1,使能开漏输出
为0,驱动器输出有效
INTPOL中断极性,用于设置INT引脚的极性,仅在ODR清零时起作用,将INT配置为有源推挽输出。
为1,高电平有效,为0,低电平有效
INTCC中断清零控制,配置如何清除中断
为1,读INTCAP寄存器时清除中断
为0,读GPIO寄存器清除中断
7、GPPU上拉电阻配置寄存器
为1,相应端口引脚被一个内部电阻上拉
8、INTF中断标志寄存器
为1,相应引脚发生了中断
9、INTCAP中断捕捉寄存器
中断时捕捉GPIO端口值。该寄存器维持不变知道中断清除。
10、GPIO端口寄存器
写入该寄存器将修改输出锁存寄存器OLAT
11、OLAT输出锁存寄存器
读取该寄存器将读取OLAT而不是端口本身,写入该寄存器将修改输出锁存器,后者将修改输出引脚的配置。
三、中断逻辑
1、电平变化中断的发生:GPINTEN允许中断,引脚发生变化或与默认值不同(设置INTCON和DEFVAL)
2、IOCON.MIRRO决定INTA和INTB互为镜像
3.中断输出
通过IOCON配置为低电平、高电平、开漏输出
4.中断端口值
INTCAP
5.中断清除
读GPIO或INTCAP。只要中断未清除,后续中断条件不会再引起中断。
四、工作模式
1、字节模式,禁止指针自动递增,可通过额外时钟连续访问同一地址
2、一种特殊模式(IOCON.BANK=0的字节模式)使地址指针在关联的A/B寄存器对之间切换。
3、连续模式,地址指针自动递增,访问完最后一个寄存器后,地址指针返回到00h。
五、SPI
1.SPI读写
字节模式,对于读写操作都是从拉低CS开始,随后发送读写命令到器件,操作码后跟地址和至少一个数据字节
连续操作,以上拉CS结束
2.SPI寻址
控制字节格式
SPI寻址寄存器