泰凌微TLSR825X开发五 硬件IIC

本文介绍TLSR8258芯片中I2C模块的应用,包括支持的模式、通信速率及寄存器配置等。详细讲述了I2C主模式(master)的使用方法,包括功能管脚说明、寄存器功能解析、配置流程和代码实例。
前言

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

在这里插入图片描述

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

功能管脚
  • 复用引脚必须成对匹配
SDASCL
GPIO_PA3GPIO_PA4
GPIO_PB6GPIO_PD7
GPIO_PC0GPIO_PC1
GPIO_PC2GPIO_PC3
寄存器
  • I2CSP [0x00]:分频寄存器,仅master模式需要配置,时钟计算公式为
    • I2C clock = system clock / (4*divclock)
  • I2C_ID [0x01]:从设备地址寄存器,最低位为读写位
    在这里插入图片描述
  • 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清除
配置流程

在这里插入图片描述

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 PC1
    i2c_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从机模式同时使用

### 配置泰凌微8258芯片GPIO以驱动外部LED的方法 在嵌入式开发中,配置GPIO以驱动外部LED是常见的任务之一。以下是关于如何在泰凌微8258芯片上配置GPIO来驱动外部LED的详细说明[^1]。 #### 一、GPIO初始化 在使用GPIO驱动外部LED之前,需要对目标引脚进行初始化。以下是一个典型的GPIO初始化代码示例: ```c #include "tl_common.h" #include "drivers/gpio.h" #define LED_PIN GPIO_PIN_0 void gpio_init(void) { gpio_config_t io_conf; // 禁用中断 io_conf.intr_type = GPIO_PIN_INTR_DISABLE; // 设置为输出模式 io_conf.mode = GPIO_MODE_OUTPUT; // 配置引脚号 io_conf.pin_bit_mask = (1ULL << LED_PIN); // 禁用下拉模式 io_conf.pull_down_en = 0; // 禁用上拉模式 io_conf.pull_up_en = 0; // 应用配置 gpio_config(&io_conf); } ``` 此代码段通过`gpio_config`函数设置指定引脚为输出模式,并禁用了中断和上下拉电阻。 #### 二、控制LED状态 完成GPIO初始化后,可以通过设置GPIO电平来控制LED的亮灭。以下是控制LED状态的代码示例: ```c void led_on(void) { gpio_set_level(LED_PIN, 1); // 设置高电平点亮LED } void led_off(void) { gpio_set_level(LED_PIN, 0); // 设置低电平熄灭LED } ``` 上述代码通过`gpio_set_level`函数设置GPIO引脚的电平,从而控制LED的状态。 #### 三、完整程序示例 以下是一个完整的程序示例,展示了如何在泰凌微8258芯片上配置GPIO并实现LED闪烁效果: ```c #include "tl_common.h" #include "drivers/gpio.h" #define LED_PIN GPIO_PIN_0 void gpio_init(void) { gpio_config_t io_conf; io_conf.intr_type = GPIO_PIN_INTR_DISABLE; io_conf.mode = GPIO_MODE_OUTPUT; io_conf.pin_bit_mask = (1ULL << LED_PIN); io_conf.pull_down_en = 0; io_conf.pull_up_en = 0; gpio_config(&io_conf); } void led_on(void) { gpio_set_level(LED_PIN, 1); } void led_off(void) { gpio_set_level(LED_PIN, 0); } void app_main(void) { gpio_init(); // 初始化GPIO while (1) { led_on(); // 点亮LED delay_ms(500); // 延时500ms led_off(); // 熄灭LED delay_ms(500); // 延时500ms } } ``` 此程序实现了LED的周期性亮灭功能,延时函数`delay_ms`用于控制亮灭的时间间隔。 --- #### 四、注意事项 - 在实际应用中,需确保外部LED电路设计合理,包括限流电阻的选择,以避免电流过大损坏芯片或LED。 - 如果使用的是共阳极LED,则需要将GPIO设置为低电平以点亮LED。 --- ###
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值