前言

TLSR8258支持硬件I2C串行总线,可作为主模式(master)和从属模式(slave)
泰凌微I2C模块支持标准模式100kbps和快速模式400kbps,但必须保证系统时钟频率是通信速率的10倍以上

泰凌微TLSR825X开发五 硬件IIC-编程知识网

本章主要讲解下I2C主模式master下的使用,如有异议,欢迎留言指正

功能管脚
  • 复用引脚必须成对匹配
SDA SCL
GPIO_PA3 GPIO_PA4
GPIO_PB6 GPIO_PD7
GPIO_PC0 GPIO_PC1
GPIO_PC2 GPIO_PC3

寄存器

  • I2CSP [0x00]:分频寄存器,仅master模式需要配置,时钟计算公式为
    • I2C clock = system clock / (4*divclock)
  • I2C_ID [0x01]:从设备地址寄存器,最低位为读写位
    泰凌微TLSR825X开发五 硬件IIC-编程知识网
  • I2CMST [0x02]:状态寄存器,获取当前是否忙与ACK接收状态
  • I2CSCT0 [0x03]:控制寄存器0,配置主从模式与slave读写内存地址映射
  • I2CAD [0x04]:master模式下的数据缓存,高8位
  • I2CDW [0x05]:master模式下的数据缓存,低8位
  • I2CDR [0x06]:读写数据寄存器
  • I2CSCT1 [0x07]:控制寄存器1,配置I2C发送数据的流程与使能ack读取
    • 如可以配置流程顺序为 start->0x01->0x04->0x05->0x06->stop
  • I2CMAP_HADR [0xe0]:映射模式下I2C从模式数据接收缓存地址读取
  • HOSR_ADR[0xe1~0xe3]:从模式下映射模式缓存地址,重定向到sram地址
  • I2CMAP_HOST [0xe4]:从模式下的中断状态,主机读写后触发,写1清除
配置流程

泰凌微TLSR825X开发五 硬件IIC-编程知识网

DMA模式

  • 仅slave支持DMA模式

代码实例

驱动代码可以参考i2c.c文件

接口API
  • i2c_master_init:初始化时钟与从机地址
  • i2c_write_byte:主机写一个字节数据到从机
  • i2c_read_byte:主机到从机读一个字节数据
  • i2c_write_series:主机写入一包数据到从机
  • i2c_read_series:主机到从机读取一包数据

例程代码参考app_i2c_master.c文件

  • 初始化i2c主机模式
void i2c_master_test_init(void)
{i2c_gpio_set(I2C_GPIO_GROUP_C0C1);   //管脚映射PC0 PC1i2c_master_init(0x5C, (unsigned char)(CLOCK_SYS_CLOCK_HZ/(4*200000)) );//从机地址0x5C(写) 0x5D(读),200K总线时钟
}
  • I2C master读写测试程序
unsigned char regAddr_WriteCMD = 0x01; //从机寄存器写地址
unsigned char regAddr_ReadCMD  = 0x11; //从机寄存器读地址unsigned char i2c_master_tx_buff[2] = {0x11, 0x22};//写入数据缓存
unsigned char i2c_master_rx_buff[2];//读取数据缓存void i2c_master_mainloop(void)
{   i2c_write_series(regAddr_WriteCMD, 1, (unsigned char *)i2c_master_tx_buff, sizeof(i2c_master_tx_buff));//往寄存器0x01写入两个字节i2c_read_series(regAddr_ReadCMD,  1, (unsigned char *)i2c_master_rx_buff, sizeof(i2c_master_rx_buff));//从寄存器0x11读取两个字节数据
}

问题勘误

由于设计上SPI模块和I2C模块在芯片内部共享了部分硬件资源,所以在软件上无法做到I2C和SPI从机模式同时使用