zl程序教程

您现在的位置是:首页 >  后端

当前栏目

龙芯1B:PCA9557用iic扩展口使能蜂鸣器

扩展 龙芯 IIC 蜂鸣器
2023-09-11 14:21:43 时间

文章目录


前言

一、PCA9557是什么?

二、驱动程序 pca9557.c 实现的函数: 

         三、i2c驱动函数

          1.BSP文件说明

          2.驱动程序 ls1x_i2c_bus.c 实现的函数:

         四、PCA9557控制蜂鸣器项目代码:

总结



前言

今天突然看到了嵌入式考证设备上的蜂鸣器有个是根据PCA9557扩展io口来使能蜂鸣器鸣叫,正好刚刚更新完蜂鸣器那就把PCA9557讲一下吧。

大家多多关注,我更新的动力来源于大家的支持,有问题都欢迎私信我。


一、PCA9557是什么?

因为考证设备很多io口已经固定在板子之中,有些也无法复用,所以我们就可以利用PCA9557来扩展io口,挂到IiC上,然后一下增加8个GPIO,特别爽。

注:PCA9557 用作 GPIO 扩展,设计和使用本芯片的目的是不占用 1B 芯片的 GPIO 资源。

源代码:ls1x‐drv/i2c/pca9557/pca9557.c

头文件:ls1x‐drv/include/i2c/pca9557.h

PCA9557 是否使用,在 bsp.h 中配置宏定义: #define PCA9557_DRV PCA9557

挂接在 I2C0 上,I2C 地址和通信速率定义如下(pca9557.c):

#define PCA9557_ADDRESS         0x1C             /* 7 位地址 */

#define PCA9557_BAUDRATE        100000           /* 100K */


二、驱动程序 pca9557.c 实现的函数: 

int PCA9557_init(void *dev, void *arg); 初始化

int PCA9557_read(void *dev, void *buf, int size, void *arg); 读数据

int PCA9557_write(void *dev, void *buf, int size, void *arg); 写数据

PCA9557_read 读 1 字节的输入寄存器;

PCA9557_write 写 1 字节的输出寄存器


三、i2c驱动函数

1.BSP文件说明

源代码:ls1x‐drv/i2c/ls1x_i2c_bus.c

头文件:ls1x‐drv/include/ls1x_i2c_bus.h

I2C 设备是否使用,在 bsp.h 中配置宏定义:
#define BSP_USE_I2C0
//#define BSP_USE_I2C1
//#define BSP_USE_I2C2
I2C 设备的参数,在 ls1x_i2c_bus.c 中定义:
   
#ifdef BSP_USE_I2C0
static LS1x_I2C_bus_t ls1x_I2C0 =
{
.hwI2C       = (struct LS1x_I2C_regs *)LS1x_I2C0_BASE,  
.base_frq    = 0,
.baudrate    = 100000,
.dummy_char  = 0,
.i2c_mutex   = 0,  
    .initialized = 0,
    .dev_name    = "i2c0",
};
LS1x_I2C_bus_t *busI2C0 = &ls1x_I2C0;
#endif

2.驱动程序 ls1x_i2c_bus.c 实现的函数:

函数 功能 int LS1x_I2C_initialize(void *bus); 初始化

int LS1x_I2C_send_start(void *bus, unsigned int Addr); 获取总线控制权

int LS1x_I2C_send_stop(void *bus, unsigned int Addr); 释放总线控制权

int LS1x_I2C_send_addr(void *bus, unsigned int Addr, int rw); 发送片选信号

int LS1x_I2C_read_bytes(void *bus, unsigned char *rxbuf, int len); 读数据

int LS1x_I2C_write_bytes(void *bus, unsigned char *txbuf, int len); 写数据

int LS1x_I2C_ioctl(void *bus, int cmd, void *arg); 发送控制命令


四、PCA9557控制蜂鸣器项目代码:

#include "Beep.h"
 #include "ls1x_i2c_bus.h"
 #include "i2c/pca9557.h"
 //初始化
 void PCA9557_Init(void)
 {

     ls1x_i2c_initialize(busI2C0);
     ls1x_pca9557_init(busI2C0,NULL);//默认端口引脚的原始极性被保留

 }
 //打开蜂鸣器
 void Buzzer_ON(void)
 {
    unsigned char outData = 0x80;
    ls1x_pca9557_write(busI2C0,&outData,0,0);
 }
 //关闭蜂鸣器
 void Buzzer_OFF(void)
 {
    unsigned char outData = 0x00;
    ls1x_pca9557_write(busI2C0,&outData,0,0);
 }
void Buzzer_ON_1(void)
 {
    Buzzer_ON();
    delay_ms(20);
    Buzzer_OFF();
 }
void Buzzer_ON_2(void)
 {
    Buzzer_ON();
    delay_ms(200);
    Buzzer_OFF();
 }
 
 //鸣叫三声
 void Buzzer_3(void)
 {
     int i;
     for(i=0;i<3;i++)
     {
         Buzzer_ON_2();
         delay_ms(200);
         Buzzer_OFF();
         delay_ms(200);
     }
 }


总结

总测试代码并不是完整,其中很多有问题,但PCA9557是测试没问题的,大家自行学习一下,有需要私聊我。


联系我们

                vx ——>  buildupup     公众号   嵌入式up   如果文章对您有帮助,请打赏一元呗,感谢支持,分享不易,码字不易。希望对大家帮助!


通往成功的道路上有一门必修课叫孤独。