- 博客(58)
- 资源 (2)
- 收藏
- 关注
原创 softdevice设置keil部分
需要先烧写softDevice,当然烧写什么样的你自定。然后你的程序是跟在softDevice后面的,但是keil并不知道这点。所以需要手动设置先来到options fof target----target 接下来说下原理,我们的程序要紧跟在softDevice后。softDevice有一定的大小(我一直试着找到那篇文档里面有说各个版本的softDevice的R
2015-11-10 16:28:51
3015
转载 nrf51 官方PWM库
地址:https://github.com/NordicSemiconductor/nrf51-pwm-library (已上传)nrf_pwm_init函数 初始化PWM参数 设置输出pwm的gpio pin pwm周期 分频 分辨率等。在示例pwm_example_sin中设置100分辨率,9分频,156hz的pwm频率 3路pwm在pin 8、9、10上 并占用默认设置的
2015-11-10 16:27:10
2126
原创 NRF51822 PWM (simple_pwm_motor_control_example)
1.首先设置gpiote 设置初始为高电平2.接着设置ppi 定时器timer2的compare0和compare1触发gpiote翻转3.设置定时器timer2 预分频为4 按时钟16Mhz 每tick=16000000/2^4 正好为1us设置cc0为pwm的低点 cc1为整个pwm周期 cc2为pwm高点 启用compare2中断 compare1清零执行顺序应为cc0->c
2015-11-10 16:23:00
3020
转载 6 nRF51 DFU 初始化包
当升级数据包时,在应用程序映像传输之前,在DFU中需要初始化包来执行映像的安全检测。这个初始化包作为升级流程的一部分提供了安全检测机制,因此被升级的设备只能接收兼容的应用程序。初始化包包括以下信息可用于安全检测(参见dfu_init_packet_t)/**@brief Structure contained in an init packet. Contains informat
2015-11-10 16:05:27
1873
转载 1 nrf51822简介
本文的目的是教你如何一步步创建自己的BLE应用程序,包括使用nRF51822芯片创建一个定制的服务。1.1 最低要求需要有嵌入式C语言编程经验,以便完全理解本应用手册。1.1.1 需要的工具需要一个nRF51822 Evaluation Kit的开发板,另外还需要下载和安装以下软件工具: • S110 SoftDevice
2015-11-10 15:53:14
2314
转载 3 最小BLE应用简介
3.1初始化介绍有一些初始化函数通常在执行一个BLE应用之前调用,下面的表格中列出了这些初始化调用函数,在后面将对它们进行详细的介绍。 大部分采用数据结构的形式作为输入参数,这些数据结构包含一系列的配置和选项信息,阅读代码中的注释能更好地理解它们。在广播开始之后,你就进入了main函数中的for循环。3.2 协议栈S110 SoftDevice
2015-11-10 15:49:15
1046
转载 2 BLE介绍
本章将介绍BLE协议不同的层,包括各个层的部件和它们的概念。2.1 通用访问规范(Generic Access Profile,GAP)GAP是应用层能够直接访问BLE协议栈的最底层,它包括管理广播和连接事件的有关参数。注意:GAP的更多详细介绍见《Bluetooth Core Specification》(蓝牙核心规范)的第3卷C部分。2.1.1
2015-11-10 15:47:28
1166
原创 nrf51822 app_timer
它的源代码和头文件分别为app_timer.c/app_timer.h。这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作为了一个资源进行管理,所以会有初始化、创建等过程。 nrf51822的SDK采用封装思想,需要暴露给用户的信息都在相关模块的头文件中;为了提醒用户不去看具体实现细节,我们可以发现相关的A
2015-11-10 15:29:45
9291
转载 NRF51822实例代码说明
说在前面:此说明用于nrf51822的主从机的实例代码解析,通过讲解主从机的双向通讯来说明如何添加自己的服务及特征。此说明为个人理解,可能与原意不同。目录主机模块... 3从main说起... 3app_trace_init() 3ble_stack_init(); 4client_handling_init() 6device_manager_init. 7
2015-11-10 14:02:30
5430
2
原创 nrf51822 GPIOTE
The GPIO Tasks and Events (GPIOTE) module provides functionality for accessing GPIO pins using tasks and events.GPIO的任务TASK和事件EVENT模块提供了使用任务和事件来使用GPIO的功能A task can be used for performing the follo
2015-11-10 10:52:56
3479
转载 nrf51822之间通讯
GPIO引脚配置://大家51单片机用过吗?知道P0 ,P1 ,P2 ,P3这些io口吗?//因为nrf51822是32位单片机。用下面的代码可以拆成8位单片机用。使用的效果就和51单片机一模一样//可以P1=0x0f;这样51822的P0.8~P0.15脚就被设置了typedef enum{ NRF_GPIO_PORT_SELECT_PORT0 = 0,
2015-11-09 17:18:05
5575
1
转载 nRF51822低功耗CPU睡眠软件应用
下面是本人调试通过的nRF51822低功耗睡眠的软件应用,当执行NRF_POWER->SYSTEMOFF = 1;CPU将停止运行,保留外设参数,本人实测睡眠模式下电路电流消耗10微安,当被GPIO的DETECT信号唤醒后,复位,软件从main函数开始执行。whilie(1)下CPU消耗18毫安电流。不废话了,上实例代码/***********************************
2015-11-09 16:30:59
4421
1
原创 SPI接口
SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。1. 接口SPI接口经常被称为4线串行总线,SPI协议是主从模式:从机不主动发起访问,总是被动执行操作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:
2015-11-09 11:44:25
3615
1
原创 UART接口
UART传输时序如图所示:1、UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。其中各位的意义如下:起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。奇偶校验位:数据位加上这一位后,使得“1”
2015-11-09 11:14:40
3172
转载 I2C接口
1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 支持多主控(multimastering),任何时间点只能有一个主控。 总线上每个设备都有自己的一个addr,共7个bit,广播地址全0. 系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看da
2015-11-09 10:49:42
1294
转载 主流蓝牙BLE控制芯片详解(2):CSR BC6130
[导读] BC6130是一款超低功耗,低成本,适用于入门级的单声道蓝牙耳机解决方案,与BlueVox2引脚兼容,并包含支持一个蓝牙耳机和两个设备间多个同时连接的HFP多点连结。关键词:BlueTunes蓝牙BLECSR公司在日益激烈的市场竞争中,CSR公司全新的BlueCore系列芯片能够使设计者更快捷、更容易的开发出创新的差异化和低功耗产品。通过使用这些BlueCore芯
2015-09-01 08:02:19
3200
转载 主流蓝牙BLE控制芯片详解(1):TI CC2540
[导读] CC2540是一款高性价比,低功耗的片上系统(SOC)解决方案,适合蓝牙低功耗应用,诸如2.4G 低功耗蓝牙系统、健康医疗、运动和健身设备和消费电子/移动配件等。关键词:蓝牙BLETI公司CC2540 蓝牙BLE的概念近年来十分火热,由于是新兴技术,市面上主流的控制芯片厂商可谓是屈指可数。在此,小编为你尽可能收集了这些主流控制芯片的详细介绍,希望对你的设计有所
2015-08-31 22:14:22
10350
转载 jiffies 时间转换
来源:《深入Linux设备驱动程序内核机制》第8章时间管理,本章将讨论这两类时间上的操作的技术细节,设备驱动程序员在掌握了这些幕后的技术之后可以更好地理解设备驱动是如何对时间进行掌控的,当程序中需要对时间进行管理时选择最合适的解决方案。本节为大家介绍时间转换。时间转换有时候,设备驱动程序可能需要将用jiffies表达的时间间隔转化成毫秒ms或者是微秒us的形式,这种情况
2015-07-25 16:44:51
9204
转载 Linux 网卡驱动_04
rtl8139 网卡驱动分析:(注:这里只分析了主要函数,代码版本是:8139too.c71420 bytes2010-04-01 22:56:18 )/* * 提供了一系列驱动程序可调用的接口,主要用于发现和初始化设备 */static struct pci_driver rtl8139_pci_driver = {
2015-07-11 20:15:01
863
1
转载 Linux 网卡驱动_03
紧接上一篇,这里简要介绍net_device 结构和网卡驱动框架。 struct net_device 是一个比sk_buff 更复杂的结构,里面包含了与TCP/IP协议栈通信的接口函数,但是自从2.6.31 之后的内核中这些接口函数就被封装在了 stuct net_device_ops 结构中,在net_device 结构中以 netdev_ops 成员的形式出现。我
2015-07-11 20:14:16
663
转载 Linux 网卡驱动_02
接上一篇,我们来看与skb相关的一些重要函数: 网络模块中,有两个用来分配SKB描述符的高速缓存,在SKB模块初始函数skb_init()中被创建: void __init skb_init(void){skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struc
2015-07-11 20:13:23
547
转载 Linux 网卡驱动_01
参考:1. 深入理解Linux网络技术内幕 PartIII 2. Essential Linux Device Driver Chap15 3. Linux 内核源码剖析——TCP/IP 实现 5. rtl8139too.c 2010.4 修订 6. Linux 内核 2.6.33 7. google 当
2015-07-11 20:06:32
579
转载 linux网络流程分析(一)---网卡驱动
分析linux网络的书已经很多了,包括《追踪Linux TCP/IP代码运行》《Linux内核源码剖析——TCP/IP实现》,这里我只是从数据包在linux内核中的基本流程来分析,尽可能的展现一个主流程框架。内核如何从网卡接收数据,传统的过程:1.数据到达网卡;2.网卡产生一个中断给内核;3.内核使用I/O指令,从网卡I/O区域中去读取数据; 我们在许多网卡驱动
2015-07-11 20:02:00
1266
转载 net_device 结构的详情
17.3. net_device 结构的详情net_device 结构处于网络驱动层的非常核心的位置并且值得完全的描述. 这个列表描述了所有成员, 更多的是提供了一个参考而不是用来备忘. 本章剩下的部分简要地描述了每个成员, 一旦它用在例子代码上, 因此你不需要不停地回看这一节.17.3.1. 全局信息结构 net_device 的第一部分是由下面成员组成:ch
2015-07-11 19:10:57
796
转载 I2C总线协议学习
1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 支持多主控(multimastering),任何时间点只能有一个主控。 总线上每个设备都有自己的一个addr,共7个bit,广播地址全0. 系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datash
2015-07-08 09:57:42
577
转载 CCS中寄存器定义方法
1.2.1 传统#define 方法 1.2 外设位域结构体方法综述DSP281x 头文件和外设示例使用位域结构体方法,映射和访问基于F28x 外设寄存器。本节将介绍这种方法,并把它和传统的#define 方法加以比较。1.2.1 传统#define 方法C代码访问寄存器的传统方法是使用#define宏为每一个寄存器分配一个地址。例如: //******
2015-06-29 09:37:04
8233
1
转载 DSP入门前的背景知识
数字信号处理(DigitalSignal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。 数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增
2015-06-29 09:34:00
1283
原创 BBB IRQ 驱动分析
一、 说明Beaglebone Black开发板自带GPIO以及IRQ等驱动程序,所以为驱动的开发提供了极大的便利,在此主要分析内核自带的库文件中相关的函数以及驱动编写的步骤。二、 IRQ库函数分析 驱动添加的库函数有:#include #include #include #include 其中,库位于/kernel/kernel/include/linux
2015-04-27 14:39:38
1039
原创 BBB GPIO驱动分析
一、 说明IO驱动是驱动开发最基础也是很有代表性的,因为IO驱动基本包含了驱动框架中的所有常用函数,例如加载函数、卸载函数、打开函数、关闭函数、IO配置函数,此外还包括设备结构体、存储结构体。具体实现下面分析二、 IO驱动函数分析 设备加载函数: 加载函数主要是实现设备驱动的注册、分配设备号等相关操作,具体实现代码如下:static int __init omap3gpi
2015-04-27 14:32:12
1162
转载 BBB的cape和设备树(device tree)的使用
只要你想用BBB做哪怕一丁点涉及到硬件的东西,你就不可避免地要用到cape和device tree的知识。所以尽管它们看起来很陌生而且有点复杂,但还是得学。其实用起来不难的。下面我只讲使用时必须会的内容,不深究其工作原理。文中基本没有废话,请仔细阅读每个字,勿遗漏细节。我们已经知道beagleboard官网上有一些官方的硬件外设,比如lcd显示屏之类的,他们管这些外设叫做cape。其实应该
2015-04-17 09:35:12
2189
原创 BeagleBone Black GPIO IRQ 驱动
最近打算把GPIO的中断驱动起来,本打算网上能找到现成的驱动程序,可是找了几个测试都不好使,经过一番研究终于测试好使了,在此分享出来。一、 说明Beaglebone Black开发板自带GPIO以及IRQ等驱动程序,所以为驱动的开发提供了极大的便利,在此主要分析内核自带的库文件中相关的函数以及驱动编写的步骤。二、 IRQ库函数分析 驱动添加的库函数有:#include
2015-04-14 10:20:29
2632
转载 ARM常用汇编指令
ARM汇编程序特点:l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通用寄存器来完成.因此代码中大量看到LDR,STR指令来传送值.l ARM汇编语句中.当前语句很多时候要隐含的使用上一句的执行结果.而且上一句的执行结果,是放在CPSR寄存器里
2015-04-11 14:48:15
713
转载 Linux makefile 教程 非常详细,且易懂
最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。 于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。 后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比
2015-04-07 10:27:21
881
转载 用Device tree overlay掌控Beaglebone Black的硬件资源
简介device tree是linux 3.x开始使用的加载硬件资源的方式,这里说的硬件资源既包括片上的诸如GPIO、PWM、I2C、ADC等资源,也包括外部拓展的如FLASH、LCD等。device tree主要作用是将某个硬件外设与相应的驱动程序进行绑定,关于它在实际使用中的地位可以参考我的日志《嵌入式linux如何操作硬件》。使用时首先需要编写一个.dts文件(device
2015-04-07 10:24:03
993
转载 uboot-的start.S详细注解及分析
大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其
2015-04-06 11:16:20
826
转载 U-boot源代码全分析系列(基于PowerPC)
一、概述 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目,是从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Li
2015-03-28 12:07:09
2744
转载 AM335X  uboot烧写
原创:http://blog.sina.com.cn/u/2312748742NAND地址如下: +------------+-->0x00000000-> SPL start (SPL copy on 1st block)| || |-->0x0001FFFF-> SPL end | |-->0
2015-03-28 12:06:15
2181
转载 AM335x nand启动
PC操作系统:(下载)ubuntu 12.04使用的开发板:am335x Beaglebone am335x Beaglebone 开发板使用的操作系统:linux 3.2step1:安装linux开发环境。(下载)ti-sdk-am335x-evm-05.07.00.00-Linux-x86-Install。err1:建议搭配的Ubuntu系统版本是10
2015-03-28 12:02:50
3353
转载 AM335x uboot 移植
uBOOT的编译命令直接一次性编译make O=am335x CROSS_COMPILE=arm-arago-linux-gnueabi ARCH=arm am335x_evm配置make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi- am335x_evm_config编译make ARCH=arm CROSS_COMP
2015-03-28 12:02:15
7674
转载 AM335x uboot spl分析
AM335x uboot spl分析芯片到uboot启动流程 ROM → SPL→ uboot.img简介 在335x 中ROM code是第一级的bootlader。mpu上电后将会自动执行这里的代码,完成部分初始化和引导第二级的bootlader,第二级的bootlader引导第三级bootader,在ti官方上对于第二级和第三级的bootlader由uboot
2015-03-28 12:01:18
896
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人