NRF51822之IIC(MEMS_LIS2DH12)
在上篇介绍了OLED的II以写操作为主,没有进行读取操作。所以在现再补充读取的操作。
我在此以LIS2DH为例子
uint8_t temp;
lis2dh_read_registers(LIS2DH_WHO_AM_I,&temp,);
我们现在操作的寄存器为who_am_i时序如下
好了现在贴上主要代码
#define MEMS_LIS2DH_ADDR (0x30U>>1) #define LIS2DH_WHO_AM_I 0x0F #define MEMS_TWI_TIMEOUT 5000 static const nrf_drv_twi_t m_twi_mems_lis2ds12 = NRF_DRV_TWI_INSTANCE();//需要在nrf_drv_config.h文件中 #define TWI1_ENABLED 1 volatile static bool twi_tx_done = false;
volatile static bool twi_rx_done = false; void mems_lis2dh12_twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context)
{
ret_code_t err_code;
switch(p_event->type)
{
case NRF_DRV_TWI_RX_DONE:
twi_rx_done = true;
break;
case NRF_DRV_TWI_TX_DONE:
twi_tx_done = true;
break;
default:
break;
}
} void bsp_lis2dh12_init(void)
{
ret_code_t err_code; const nrf_drv_twi_config_t twi_mems_lis2dh12_config =
{
.scl = MEMS_LIS2DH12_I2C_SCL_PIN,
.sda = MEMS_LIS2DH12_I2C_SDA_PIN,
.frequency = NRF_TWI_FREQ_100K,
.interrupt_priority = APP_IRQ_PRIORITY_LOW
}; err_code = nrf_drv_twi_init(&m_twi_mems_lis2dh12, &twi_mems_lis2dh12_config, mems_lis2dh12_twi_handler, NULL);
APP_ERROR_CHECK(err_code); nrf_drv_twi_enable(&m_twi_mems_lis2dh12); nrf_gpio_pin_clear(MEMS_LIS2DH12_SD0_PIN);
nrf_gpio_cfg_output(MEMS_LIS2DH12_SD0_PIN); nrf_gpio_pin_set(MEMS_LIS2DH12_CS_PIN);
nrf_gpio_cfg_output(MEMS_LIS2DH12_CS_PIN); } uint32_t lis2dh12_write_register(uint8_t reg_param, uint8_t data_param)
{
uint32_t err_code;
uint32_t timeout = MEMS_TWI_TIMEOUT; uint8_t packet[2] = {reg_param, data_param}; err_code = nrf_drv_twi_tx(&m_twi_mems_lis2dh12, MEMS_LIS2DH12_ADDR, packet, 2, false);
if(err_code != NRF_SUCCESS)
{
return err_code;
} while((!twi_tx_done) && --timeout);
if(!timeout)
{
return NRF_ERROR_TIMEOUT;
} twi_tx_done = false; return err_code;
} uint32_t lis2dh12_read_registers(uint8_t reg_param, uint8_t * p_data, uint32_t length)
{
uint32_t err_code;
uint32_t timeout = MEMS_TWI_TIMEOUT; err_code = nrf_drv_twi_tx(&m_twi_mems_lis2dh12, MEMS_LIS2DH12_ADDR, ®_param, 1, false);
if(err_code != NRF_SUCCESS)
{
return err_code;
} while((!twi_tx_done) && --timeout);
if(!timeout)
{
return NRF_ERROR_TIMEOUT;
}
twi_tx_done = false; err_code = nrf_drv_twi_rx(&m_twi_mems_lis2dh12, MEMS_LIS2DH12_ADDR, p_data, length, false);
if(err_code != NRF_SUCCESS)
{
return err_code;
} timeout = MEMS_TWI_TIMEOUT;
while((!twi_rx_done) && --timeout);
if(!timeout)
{
return NRF_ERROR_TIMEOUT;
}
twi_rx_done = false; return err_code;
}
NRF51822之IIC(MEMS_LIS2DH12)的更多相关文章
- nRF51822之模拟IIC
使用的工程为是基于sdk10工程 在将以nRF51_SDK_10.0.0_dc26b5e\examples\peripheral\twi_sensor作为模版 修改代码main.c #include ...
- nrf51822裸机教程-IIC
关于IIC总线的核心有以下几点: :时钟线高电平期间必须保持数据线不变. :时钟线低电平期间可以改变数据. :时钟线和数据线上都要接上拉电阻,以使总线不工作时,两根线的电平都处于高电平状态. :每个传 ...
- [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)
蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...
- 《我的嵌入式开发》---- IIC 通信
IIC 通用文件,文件是在NRF51xx 芯片基础,keil 平台开发测试通过,后期修改为STM32F2xx系列的配置. 文件百度云盘链接 : https://pan.baidu.com/s/1AFx ...
- Nordic NRF51822 从零开始系列(外部设备片—MPU6050DMP驱动的移植)
一.硬件准备 (1)开发板和软件参看 Nordic NRF51822 从零开始系列(一)开发环境的搭建 (2)mpu6050模块 二.前置知识 ...
- IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)
首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...
- 基于STM32Cube的IIC主从通信
1.建立STM32Cube工程,我使用的芯片是STM32F429,为了更简单的建立单独的IIC通信任务,我使用了FREERTOS,另外选择了RCC(系统时钟初始化),I2C1,I2C2(为了验证代码的 ...
- STM32 IIC
#include "Type.h" #include "IIC.h" #include "Delay.h" void I2C_Init(vo ...
- [nRF51822] 13、浅谈nRF51822和NRF24LE1/NRF24LU1/NRF24L01经典2.4G模块无线通信配置与流程
前言: nRF51可以支持基于2.4G的互相通信.与NRF24LE1的通信.与NRF24LU1的通信.与NRF24L01的通信. 一.nRF51822基于2.4G和nRF51822通信 其中nRF5 ...
随机推荐
- AT指令获取基站信息
AT+CREG 网络注册和漫游 命令发送(command): AT+CREG=<mode> 命令响应(Response): +CREG :<mode&g ...
- 实战之中兴ZXHN F460光猫破解超级密码+开启无线路由功能
本文面向小白用户,即使你不懂电脑看完你也会破解光猫,网上有些文章的操作方法是错误的.按照我这篇文章,只要型号对,那么肯定没问题!电信光纤入户,家里用的是电信送的中兴查看 ZXHN F460 中的全部文 ...
- B 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 枪与玫瑰 我看了一下聊天室的名单,哈哈哈,我不禁喜出望外:蝶恋花那丫头片子挂在线上呢,真是天助我也.初时的担心一扫而光,我精神抖擞地喝下一大口咖啡,猛抽了三口烟,现在的我 ...
- 彻底卸载 RAD Studio 2009/2010/XE
彻底卸载 RAD Studio 2009/2010/XE: 控制面板-->添加/删除程序中执行了卸载操作以后, 还需要做以下工作: 1. 删除以下目录(注意有些目录是隐藏的): %ALLUSER ...
- 安装ntp
#yum -y install ntp#service ntpd restart#vi /etc/ntp.confserver 0.aisa.pool.ntp.org iburstserver 1.a ...
- HTML5精美网站模板分享
1. http://newweb.top/ 2. http://newweb.top/Templates/agency-gh-pages/index.html
- a new blog from MarsEdit
终于在网上找到了一款mac 下的blog写作和发布工具了. 先测试一下.
- sed字符串替换
把drivers目录下的所有pr_log替换成:pr_snd sed -i "s/pr_log/pr_snd/g" `grep pr_log -rl drivers/` 把driv ...
- owncloud7.0.2.1升级8.0.3
进入更新中心升级,会自动备份下载安装,安装完提示更新数据库,跳转页面后提示需要php5.4以上版本,检查当前环境为php5.3.3.服务器为CentOS6.4,使用yum更新最新版本即5.3.3. ...
- [转]理解HTTP幂等性
基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式.无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API.为什么Web API如此流 ...