瑞昱rtl8762芯片通过I2C操作AW20108,从而实现多个LED的控制


本人还在学习、摸索rtl8762,如有错误之处,欢迎指出。

1、引脚分布

引脚名称 引脚编号
SCK P3_2
DATA P3_3
INTN P2_2
EN P0_2

2、了解AW20108

资料来源:艾为官方,有需要的同学可以自取。

1)了解IC引脚

从下图可以看到,需要通过软件控制的IO口有4根,分别是:SDA、SCL、INTN、EN。硬件上目前是将EN直接拉高,所以EN不需要操作。
来自aw20108数据手册

2)如何控制

a、通信方式

aw20108是通过I2C控制,最大速率为400khz。器件地址通过由第25pin AD选择,硬件上与GND连接,所以器件地址为0x3A(如下图所示),大家根据自身硬件连接修改器件地址。
来自aw20108数据手册

b、如何点亮LED

aw20108可以同时控制108颗LED,而它是通过扫描控制。那么作为程序员,应该如何点亮LED呢?其实很简单,数据手册给出了两种方案:
 1、将ALLON位置1,通过改变某个LED的电流来点亮LED;
 2、将所有LED电流设为非0值(即有电流),再通过控制寄存器LEDONx来点亮LED;

两种方式各有优点:
 第一种:代码量略多,可以单独控制某个LED,从而不影响别的LED状态;
 第二种:代码量少,编写方便。由于一个寄存器LEDONx中,包含6个LED的状态,同时LEDONx是只写的,如果想做到点亮LED0的同时,不影响LED1的话,只能代码上使用变量保存寄存器的值。

所以,目前代码实现上使用的是第一种操作方式,以下代码也会以第一种方式展现。

3、代码添加

1)引脚宏定义

/***************************** IIC *****************************/
#define I2C_CLK_PIN             P3_2                                //< I2C 时钟线
#define I2C_DATA_PIN            P3_3                                //< I2C 数据线

/************************** LED DRIVER **************************/
#define LED_DRIVER_I2C          I2C0
#define LED_INTN_PIN            P2_2
#define LED_EN_PIN              P0_2                                //< led驱动使能
#define LED_INTN_PIN_NUM        GPIO_GetPin(LED_INTN_PIN)
#define LED_EN_PIN_NUM          GPIO_GetPin(LED_EN_PIN)

2)初始化GPIO

初始化GPIO分为两组,1组为spi的引脚初始化,1组为普通IO的引脚初始化。

/**
  * @brief  :引脚初始化
  * @param  :NULL
  * @retval :NULL
  */
static void gpio_init(void)
{
   
    RCC_PeriphClockCmd(APBPeriph_GPIO, APBPeriph_GPIO_CLOCK, ENABLE);
    
    Pad_Config(I2C_CLK_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP,
                PAD_OUT_ENABLE, PAD_OUT_HIGH);
    Pad_Config(I2C_DATA_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP,
                PAD_OUT_ENABLE, PAD_OUT_HIGH);

    
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值