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

导读:本篇文章讲解 龙芯1B:PCA9557用iic扩展口使能蜂鸣器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

文章目录


前言

一、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 字节的输出寄存器

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


三、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); 发送控制命令

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


四、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是测试没问题的,大家自行学习一下,有需要私聊我。

源码链接:龙芯1B:总测试模块例程-单片机文档类资源-CSDN文库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73681.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!