龙芯1B:PCA9557用iic扩展口使能蜂鸣器
文章目录
前言
今天突然看到了嵌入式考证设备上的蜂鸣器有个是根据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 如果文章对您有帮助,请打赏一元呗,感谢支持,分享不易,码字不易。希望对大家帮助!
通往成功的道路上有一门必修课叫孤独。
相关文章
- [python]赶集网二手房爬虫插件【可用任意扩展】
- Linux 上安装 PHP 扩展
- 基于libmemcached,php扩展memcached的安装
- MySQL数据库复制概念及数据库架构不断扩展方案
- 《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
- ECMAScript 6 -- 字符串的扩展
- 浏览器扩展开发-Firefox临时载入附加组件(图)
- SAP CRM Application Extension Tool类型为Code List的扩展字段实现原理
- Visual Studio Code Active File in StatusBar 扩展以及 Extension API 概述
- SAP Cloud for Customer 2102版本如何使用Key User Tool创建扩展字段 - extension field
- 如何使用Key User Tool扩展SAP S/4HANA Fiori UI
- 哈希表之bkdrhash算法解析及扩展
- 003-正则的扩展、数值的扩展、函数的扩展、数组的扩展、对象的扩展
- 19 06-读取DTC扩展数据记录
- Java数组扩展