数码之家

 找回密码
 立即注册
搜索
查看: 3269|回复: 0

[C51] GPIO扩展芯片XRA1402/XRA1403/XRA1404/XRA1405系列C51程序初试

[复制链接]
发表于 2019-5-22 22:41:23 | 显示全部楼层 |阅读模式

前段时间研究了    GPIO扩展芯片XRA1402/XRA1403/XRA1404/XRA1405系列





这个系列芯片可以通过SPI  扩展  通用GPIO, 1402为8位扩展,1403为16为扩展
官方只有数据手册,没有任何范例,其实挺简单的控制时序,自己却研究了一个星期,原因是有一句关键的话没有在意:

以前写的程序在写入寄存器后,没有将CLK拉低,所以怎么处理都不行。


以下为对数据手册的简单翻译,希望可以帮助其他使用该系列芯片的朋友。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

命令字节表示将被访问的寄存器的地址偏移量
在最后一次读或写事务之后,SPI主控制器将SCL信号设置回其空闲状态(LOW)
命令字节   寄存器描述                           读/写          默认数值
0x00  000  0 000  0  0x00  GSR -GPIO状态                      只读        0xXX
0x01  000  0 001  0  0x02   OCR – 输出控制       读/写      0xff
0x02  000  0 010  0  0x04   PIR -输入极性反转                    读/写     0x00
0x03 000  0 011  0  0x06   GCR- GPIO 组态/构造                 读/写     0xFF
0x04  000  0 100  0 0x08   PUR-输入内部上拉电阻启用/禁用       读/写      0x00
0x05  000  0 101  0  0x0A      IER-输入中断使能                    读/写      0x00
0x06  000  0 110  0  0x0C      TSCR - 输出三态控制              读/写       0x00
0x07  000  0 111  0 0x0E      ISR  -输入中断状态                 读         0x00
0x08  000  1 000  0  0x10      REIR - 输入上升沿中断使能         读/写       0x00
0x09  000  1 001  0  0x12      FEIR - 输入下降沿中断使能         读/写        0x00
0x0A  000  1 010  0 0x14     IFR  - 输入滤波器启用/禁用         读/写        0xFF
0x00  GSR   GPIO状态
可以通过该寄存器读取P7  -  P0的状态。 读操作将显示这些引脚的当前状态(如果通过PIR寄存器使能,则显示这些引脚的反转状态)。 读取该寄存器将清除输入中断。 对于任何配置为输出的引脚,读取该寄存器也将返回写入OCR寄存器的最后一个值(即,这与实际输出引脚的状态不同,因为输出引脚可以处于三态模式)。 写入该寄存器无效。 该寄存器的MSB与P7对应,该寄存器的LSB与P0对应
0x01   OCR  输出控制
当P7  -  P0定义为输出时,可以通过写入该寄存器来控制它们。 读取该寄存器将返回写入的最后一个值,但是,该值可能不是输出引脚的实际状态,因为这些引脚可以处于三态模式。 该寄存器的MSB与P7对应,该寄存器的LSB与P0对应
0x02   PIR-输入极性反转    1为输入翻转    0为实际输入
当P7  -  P0定义为输入时,该寄存器会反转从输入端口寄存器读取的输入值的极性。 如果该寄存器中的相应位设置为1,则GSR寄存器中该位的值将是输入引脚的反相值。 如果该寄存器中的相应位设置为0,则GSR寄存器中该位的值将是输入引脚的实际值。 该寄存器的MSB与P7对应,该寄存器的LSB与P0对应。
0x03  GCR-GPIO 组态/构造  0为输出   1为输入
该寄存器将GPIO配置为输入或输出。 上电和复位后,GPIO是输入。 将这些位设置为0将使GPIO成为输出。 将这些位设置为1将使GPIO成为输入。 该寄存器的MSB与P7对应,该寄存器的LSB与P0对应。
0x04   PUR-输入内部上拉电阻启用/禁用  1启用内部上拉   “0”将禁用
该寄存器使能/禁止输入的内部上拉电阻。 上电和复位后,XRA1402的内部上拉电阻被禁用。 向这些位写入1将使能内部上拉电阻。 向这些位写入“0”将禁用内部上拉电阻。 该寄存器的MSBP7对应,该寄存器的LSBP0对应。
IER -输入中断使能   1使能该引脚中断    0为
该寄存器启用/禁用输入的中断 上电和复位后,中断被禁用。 向这些位写入1将使能相应输入引脚的中断。当GCR位为0时,输出不产生中断。该寄存器的MSB对应P7,该寄存器的LSB对应P0
TSCR  - 输出三态控
该寄存器可以启用/禁用输出的三态模式。 向这些位写入1将启用相应输出引脚的三态模式。
ISR  - 输入中断状态
该寄存器报告产生中断的输入引脚。
REIR  - 输入上升沿中断使能
向这些位写入1将使相应的输入在上升沿产生中断。
FEIR  - 输入下降沿中断使能
向这些位写入1将使相应的输入在下降沿产生中断。
IFR  - 输入滤波器启用/禁用  一般为默认
默认情况下,输入过滤器已启用(IFR =0xFF)。 当输入滤波器使能时,任何大于1075ns的脉冲都将产生中断(如果使能)。 小于225ns的脉冲将被滤波,不会产生中断。在此范围之间的脉冲可能会也可能不会产生中断。 向这些位写入“0”将禁用相应输入的输入滤波器。 禁用输入滤波器后,输入上的任何更改都将产生中断(如果已启用)。
0x06 配置GPIO组态(输入/输出)   0x00  使所有IO为输出引脚//0xF0  高4位为输入,第四位为输出
0x02 输出控制     0x00  使所有IO为 0 电平  /  0xFF所有IO口为高电平
0x06配置GPIO组态(输入/输出)   0x14 (0001 0100)使第4位、第2位为输入,其他为输出
0x04 输入极性相反  0x04   使第2位输入数据反相(取 非 )
0x00 读GPIO状态  0x04  读第2位IO口的数据
  1. void XRA1402_int(void)            //初始化函数,将所有IO设置为输出,并且为低电平

  2. {

  3. CS=0;

  4. Write_Data((GCR<<1) & 0x7E);   //等同于Write_Data(0x06);

  5. ////////////////////////////////写寄存器时候要注意地址向左移一位才行

  6. Write_Data(0x00);   //GCR寄存器写0x00,设置所有IO口为输出

  7. VFD_SCK = 0;    //写完毕后,必须拉低

  8. CS=1;

  9. CS=0;

  10. Write_Data((OCR<<1) & 0x7E); //等同于 Write_Data(0x02);

  11. Write_Data(0x00);   //OCR寄存器写0x00,设置所有IO口为输出—低电平

  12. VFD_SCK = 0;    //写完毕后,必须拉低

  13. CS=1;

  14. }
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-11 04:12 , Processed in 0.187200 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表