从零入手Kinetis系统开发12-SPI模块

合集下载

kinect原理

kinect原理

kinect原理
Kinect原理是基于一种称为结构光的技术。

它通过发送红外光和红外点阵投影器上的深度传感器,来感知和捕捉环境中的物体和人体的位置信息。

具体原理如下:
1. 红外点阵投影器:Kinect在其前面板上使用了一个点阵投影器,它在红外光谱范围内发射一系列红外点阵。

2. 相机:Kinect还包含一个红外摄像头,它用于观察红外点阵投影在环境上的细微变化。

3. 红外摄像头观察红外点阵:红外摄像头观察红外点阵在环境中的变化,并记录下这些变化。

4. 计算深度:通过计算红外点阵在环境中的偏移量和投影点之间的距离,Kinect可以计算出物体和人体相对于传感器的深度信息。

这样,它就可以确定物体和人体的位置。

5. RGB摄像头:Kinect还包含一个RGB摄像头,用于捕捉环境中的彩色图像。

通过结构光技术,Kinect能够实时获取环境中的深度信息和彩色图像,从而实现了对人体和物体的识别和跟踪等功能。

这使得Kinect可以被广泛应用于游戏、虚拟现实、人机交互和计算机视觉等领域。

SPI总线组成及其工作原理

SPI总线组成及其工作原理

SPI总线组成及其工作原理SPI(Serial Peripheral Interface)是一种同步串行通信总线,常用于连接微控制器与外部设备,如传感器、存储器、外设等。

SPI总线由四条信号线组成,包括SCLK(串行时钟线),MOSI(主设备输出从设备输入线),MISO(主设备输入从设备输出线)和SS(片选信号线)。

以下将详细介绍SPI总线的工作原理和其组成部分。

SPI总线采用主从架构,由一个主设备(如微控制器)和一个或多个从设备(如传感器、存储器等)组成。

主设备通过SCLK产生时钟信号来驱动整个通信过程。

主设备通过MOSI线发送数据到从设备,从设备通过MISO线传输数据给主设备。

每个从设备都有一个片选信号线(SS),用于使能该从设备。

当主设备需要与一些从设备通信时,将对应的片选信号线拉低,使该从设备处于选中状态。

1.SCLK(串行时钟线):SCLK是SPI通信中的时钟信号,由主设备通过该线产生并驱动。

SCLK信号的频率可以由主设备控制,通常可以在MHz级别。

SCLK的上升沿和下降沿都用于同步数据传输。

数据在SCLK的上升沿或下降沿的边沿进行读写操作。

2.MOSI(主设备输出从设备输入线):MOSI是主设备输出从设备输入的数据线。

主设备通过MOSI将数据传输给从设备。

数据在每个SCLK周期的上升沿或下降沿被写入。

3.MISO(主设备输入从设备输出线):MISO是主设备输入从设备输出的数据线。

从设备通过MISO将数据传输给主设备。

数据在每个SCLK周期的上升沿或下降沿被读取。

4.SS(片选信号线):每个从设备都有一个对应的SS信号线。

当主设备需要与一些从设备通信时,将该从设备的SS信号线拉低,使该从设备处于选中状态。

当通信结束后,SS信号线会被拉高,表示该从设备不再被选中。

1.主设备通过控制SS信号线,选中一些从设备开始通信。

2.主设备通过SCLK产生时钟信号,并通过MOSI线发送数据给从设备。

3.从设备在SCLK的上升沿或下降沿将数据写入MISO线,传输给主设备。

体感(Kinect)技术开发和应用简介

体感(Kinect)技术开发和应用简介

体感(Kinect)技术开发和应⽤简介体感有多种;Kinect是微软做的;⼀微软 Kinect 技术简介Kinect使⼈机交互从⼆维扩展到三维,进⼊到⾮接触的交互体验。

Kinect硬件基本组成:传动马达,⽤于仰⾓控制;彩⾊摄像头;红外摄像头;红外投影机;麦克风阵列(4个);主板和芯⽚;底座,风扇等;⼯作原理。

Kinect传感器提供三⼤类原始数据:深度数据流(depth stream),彩⾊视频流(color stream),原始⾳频数据(raw audio stream);分别对应三个处理过程:⾻骼跟踪(Skeletal Tracking),⾝份识别(Identify),语⾳识别(Speech Pipeline)。

Kinect SDK应⽤层API包括三⼤组件:NUI API,SDK的核⼼,⽤来处理彩⾊图像流,深度数据,⾻骼跟踪,控制Kinect设备;Kinect Audio DMO,提供波束成形和⾳源定位功能;Speech SDK,⾳频、语⾳、多媒体API以及微软语⾳识别功能。

初始化API时,设定⾻骼跟踪选项,应⽤程序可以最多同时⾻骼跟踪2个⽤户,获得每个⽤户20个⾻骼关节点的三维坐标。

(Kinect SDK 1.7版本)开发所需技能。

C#,WPF;或C++;常⽤数据结构;常⽤解析⼏何、坐标变换;图形学基础,如位图、像素;熟悉⼀些3D开发环境更好。

系统要求:Kinect SDK可以免费下载;Kinect 传感器可在亚马逊或京东购买;Win7, VS2010以上。

Kinect的视距和⾻骼跟踪范围不是很⼤,⼤体是⼏⽶范围的⼀个⽴体空间。

⼀般开发之初可以先根据获取的⾻骼关节绘制⽕柴⼈,以初步了解开发。

⽕柴⼈就是指返回关节坐标给程序,⾃⼰连线来绘制⼀个⼈形。

Kinect可返回的⼈体关节和⽕柴⼈⽰例如下;⼆体感应⽤简介虚拟应⽤Kinect试⾐镜,基于kinect体感技术的试⾐镜,让客户能够⾼速的试穿⾐服;就是不⽤脱⾐服,可以快速看到⼀件件⾐服穿在⾝上的效果;3D建模3D摄像机, ⽤两个KINECT实现3D摄像机的基本效果;利⽤Kinect对⼈体进⾏3D建模,然后依据⼈体的3D信息,连接对应的塑模设备,塑造出⼈体塑像;机械控制⽤Kinect 操控遥控直升机;Kinect Robo,使⽤Kinect作为机器⼈的头,通过kinect检測周围环境,并进⾏3D建模,来指导机器⼈的⾏动;虚拟乐器空⽓吉他,通过Kinect⼿势操作虚拟吉他弹奏⾳乐;Kinect弹奏中国古代乐器,通过⼿势的改变能够演奏出不同中国古代乐器的声⾳;计算机相关应⽤Kinect⼿势操作浏览器,通过Kinect⼿势对浏览器进⾏翻页,下拉,放缩等操作;Kinect体感控制看⽚,应⽤在⼿术室,⼿术者可通过体感控制查看患者的影像资料;因为戴⼿套的情况下不⽅便⽤⿏标和键盘操作电脑;虚拟实验Kinect蜡笔物理,使⽤Kinect⼿势画图,通过体感控制所画图形,并使之具有物理特性,⽐⽅重⼒,吸引⼒等;也可以将主持⼈与背景图合成,实现类似天⽓预报导播。

Kinect开发教程

Kinect开发教程

Kinect开发Windows7 环境的 Kinect SDK Beta(开发工具包),需要Microsoft .NET Framework 4.0、Microsoft Visual Studio 2010,使用 C++, C#, VB 等开发语言。

硬件要求是双核 2.66GHz CPU,至少 2GB 内存建议 4GB,支持 DirectX 9 的显卡。

微软发布的Kinect SDK包含以下三方面功能:原始传感器流:该功能可以从深度传感器、彩色摄像头传感器、麦克风等传感器中获取原始数据流,并可以使开发者在由Kinect传感器中所产生的低层次的数据流基础上进行开发。

骨骼追踪技术:该功能可以追踪一至两名用户在Kinect区域内活动时的骨骼图像,并可以为开发者提供更方便的途径开发动作应用程序。

高级音频功能:音频处理功能包括高级的噪音处理、回声消音,并可以辨别当前发声源,以及将这些数据信息导入Windows语音识别应用程序中。

安装环境:首先来说,Kinect for Windows SDK的下载地址:/en-us/um/redmond/projects/ kinectsdk/download.aspxKinect SDK目前只支持Windows 7,分为x86和x64两个版本。

开发工具方面还需要.NET Framework 4.0和Visual Studio 2010 (最低Express版本)的支持。

Kinect SDK的视频开发教程:/Series/KinectSDKQuickstarts?sort=r ecent#tab_sortBy_recentKinect SDK的开发指南:/en-us/um/redmond/projects/kin ectsdk/guides.aspxKinect SDK的官方论坛:/Forums/en-US/kinectsdk/thr eads硬件设备的需求是:Kinect for Xbox 360 sensor和Xbox 360 Kinect AC Adapter/ Power Supply。

kinect 工作原理

kinect 工作原理

kinect 工作原理
Kinect是一种类似摄像头的设备,它能够将人体的动作和声音
转化为数字信号,并通过计算机进行处理和识别。

Kinect的工
作原理主要通过以下几个组件实现:
1. 深度传感器(Depth Sensor):Kinect通过红外技术和RGB
摄像机的结合来生成深度图像。

红外光源发射红外光,然后红外摄像头捕捉反射回来的红外光,并通过红外摄像头的图像来计算物体与摄像头之间的距离。

2. RGB摄像头:Kinect内置有一台RGB彩色摄像头,用于捕
捉人体或物体的彩色图像。

RGB图像可以用于计算物体的形
状和颜色信息。

3. 声音传感器:Kinect还包含了麦克风阵列,用于捕捉周围环
境中的声音,并通过声音识别算法对声音进行分析和识别。

4. 运动追踪算法:Kinect内置了一套先进的运动追踪算法,可
以对深度图像和RGB图像进行分析,以识别人体的关节位置、姿势和动作。

通过对捕捉到的图像和声音进行实时处理和分析,Kinect能够将用户的动作和声音实时转化为数字信号。

5. 数据传输和处理:Kinect通过USB接口与计算机相连,将
捕捉到的图像和声音数据传输给计算机进行处理和分析。

计算机上的软件可以根据用户的动作和声音输出相应的指令或产生互动效果。

综上所述,Kinect的工作原理是通过深度传感器、RGB摄像头、声音传感器和运动追踪算法来捕捉和识别用户的动作和声音,从而实现与计算机的互动。

小技巧之简单移植Kinetis IAR开发框架模板

小技巧之简单移植Kinetis IAR开发框架模板

小技巧之简单移植Kinetis IAR 开发框架模板最近有博友在博客里留言反应关于在IAR 旧模板上直接新建工程的问题,呵呵,这也是我的失误,在以前写的那篇《从零入手Kinetis 系列开发(三)之建立自己风格的IAR 编程结构》当中把IAR 模板的建立说的有点太过麻烦了以致于好多博友都因为繁琐的添加文件及文件组和工程设置而望而生却了,之后上传了开发框架代码也只是分析了框架结构也没有给出简单的移植解决方案,所以造成了当时我上传的代码只能作为参考代码而没法子直接在其上修改成自己的工程进行开发。

这里得感谢guzubao 这位博友的提醒,今儿个为了弥补上这个不足,也为了避免了大家以后遇到类似问题手足无措,就单独开一篇说说怎么把现成模板修改成自己的工程。

可能好多人第一个直觉就是直接把工程目录下所有带有原工程名的文件(包括. eww、.ewp、.ewd、.dep)重命名成自己定义的工程名字就OK 了,不过很打击人的是改完之后整个工程就打不开了,提示cann’t open the xxx.ewp,到这一步可能很多人就会对自己的第一直觉产生质疑了,然后就放弃了改谋他法或者是干脆不用IAR 了,去搞MDK 或者CW 了。

我提这个的意思是告诉大家,其实往往第一直觉是对的,只不过咱们没有去深入挖掘,在遇到这种情况的时候,我们最好要保持一种遇到问题分析问题然后去解决问题的态度,这里我就以我以前上传的那个开发框架代码为例重建工程,说明一下移植的解决方案(等到我们解决了,会觉得其实真的很简单,成功与失败真的就差一小步)。

首先我们进入到工程目录下,可以看到目录下的文件列表如下图1 所示,这里我们需要删掉一些跟原工程有关的一些文件,图中用红圈画的要删掉,删完之后如下图2 所示:。

Kinect功能及原理

Kinect功能及原理

1.侦测3D影像不同于普通的通过计算得到物体3D坐标的设备,Kinect可以直接获取物体与摄像头之间的距离,这是Kinect最受人瞩目的一个功能。

微软先后于2009年和2010年收购了3DV Systems(TOF)和PrimeSense(Light Coding)这两家以色列公司,并最终采用了Light Coding技术作为Kinect体感设备的深度摄像功能的基础。

Light Coding技术理论是利用连续光(近红外线)对测量空间进行编码,经感应器读取编码的光线,交由晶片运算进行解码后,产生一张具有深度的图像。

Light Coding技术说到底还是结构光技术。

但与传统的结构光方法不同的是,他的光源打出去的并不是一副周期性变化的二维的图像编码,而是一个具有三维纵深的“体编码”。

这种光源叫做激光散斑(laser speckle),是当激光照射到粗糙物体或穿透毛玻璃后形成的随机衍射斑点。

这些散斑具有高度的随机性,而且会随着距离的不同变换图案,空间中任何两处的散斑都会是不同的图案,等于是将整个空间加上了标记,所以任何物体进入该空间以及移动时,都可确切记录物体的位置。

光源标定:测量前对原始空间的散斑图案做记录,先做一次光源的标定,方法是每隔一段距离,取一个参考平面,把参考平面上的散斑图案记录下来;假设Kinect规定的用户活动范围是距离摄像头1~4m,每隔10cm取一个参考平面,标定后保存了30幅散斑图像;测量时拍摄一幅待测场景的散斑图案,将这幅图像和保存的30幅参考图像依次做互相关运算,得到30幅相关度图像;空间中有物体存在的位置,在相关度图像上就会显示出峰值。

把这些峰值一层层叠在一起,经过插值运算,即可得到整个场景的三维形状。

Kinect就是以红外线发出人眼看不见的class 1镭射光,透过镜头前的diffuser(光栅)将镭射光均匀分布投射在测量空间中,再透过红外线CMOS传感器记录下空间中的每个散斑,结合原始散斑图案,再透过晶片计算成具有3D深度的图像。

kinect深度传感器原理

kinect深度传感器原理

kinect深度传感器原理
Kinect深度传感器采用了结构光的原理,其基本原理为在场景中发射一束光,并利用相机来捕捉被投射在场景上的结构光,并生成一个深度图像。

具体来说,Kinect深度传感器发射一条红外线激光,在被扫描的房间中自动徘徊,到处寻找物体。

当激光束收到反射信号时,Kinect会测量被反射回的激光的时间达到计算它的距离。

这个时间可以转换成一个唯一的像素值,用于创建深度图像。

这个深度图像被人类或机器人用来定位阴影或真实世界中的物体,从而更准确地将它们捕捉到3D建模、虚拟现实或其他应用程序中。

Kinect深度传感器是通过结合提供不同角度和方向的不同设备(投射器和相机)中的深度数据来创建3D场景。

Kinect深度传感器也可以跟踪并识别人体姿势和位置,并让设备上的奇妙应用程序,如Kinect体育节目,Kinect舞蹈中心和Kinect Star Wars等游戏体验变得更真实和有趣。

kinectv2结构 -回复

kinectv2结构 -回复

kinectv2结构-回复Kinect V2 结构详解Kinect V2 是由微软公司在Kinect V1 基础上推出的一款体感设备,具备更高的精度和更广泛的功能。

在本文中,我们将一步一步详细回答关于Kinect V2 结构的问题,帮助读者更好地理解Kinect V2 设备。

1. 什么是Kinect V2?Kinect V2 是微软公司推出的一款深度相机和体感设备。

它包含了一个深度传感器、RGB 彩色相机、麦克风阵列以及运动传感器。

通过这些传感器,Kinect V2 可以实现人体骨骼追踪、手势识别和语音控制等功能。

2. Kinect V2 的外观和尺寸是怎样的?Kinect V2 设备的外观类似一个长方体,尺寸约为25.9 厘米x 6.9 厘米x 5.5 厘米。

它的外壳采用黑色的亚光材料,看起来十分简洁和高档。

3. Kinect V2 的深度传感器是如何工作的?Kinect V2 的深度传感器使用了一种名为“时间飞行”的技术。

它通过射出红外线光束,然后测量光束从相机发出到被物体反射回相机的时间来计算物体与相机之间的距离。

利用这种方式,Kinect V2 可以获取物体的三维深度信息。

4. Kinect V2 的RGB 彩色相机是用于什么目的?RGB 彩色相机是Kinect V2 设备中的一个重要部分,它可以捕捉到场景中的彩色图像。

这样可以将深度信息和彩色图像结合起来,实现更加真实的场景重建和人体追踪。

5. Kinect V2 的麦克风阵列有什么作用?Kinect V2 设备搭载了一个声音采集系统,包含了多个麦克风。

通过这个麦克风阵列,Kinect V2 可以实现语音识别和语音控制功能。

它可以过滤掉环境中的噪音,提取出人声,并根据指令来执行相应的操作。

6. Kinect V2 的运动传感器是如何工作的?Kinect V2 的运动传感器包括陀螺仪和加速度计。

陀螺仪用于检测设备的旋转状态,而加速度计则可以感知设备的线性加速度。

SPI XS12

SPI XS12
void main(void) { unsigned char spich=0; EnableInterrupts; SPI_Init();
for(;;) {
Dly_ms(200); SPI_Write_Byte(0xff); spich=SPI_Read_Byte(); } }
int ii,jj; if (ms<1) ms=1; for(ii=0;ii<ms;ii++) for(jj=0;jj<2670;jj++); //busclk:16MHz‐‐1ms }
//SPI 写一个字节
void SPI_Write_Byte(byte val) {
SPI0DR = val; while(!(SPI0SR_SPIF)); return; }
SPI 模块 SPI 作为串行外设接口,有 4 个外部引脚,分别为 SS(从机选择引脚)、SPSCK (SPI 串行时钟引脚)、MOSI、MISO。 利用 SPI 进行数据传输时,有主机和从机之分,主机的程序控制着数据的传输, 从机的程序必须配合主机的工作。 一、SPICR1 控制寄存器 1
SPIE: SPI 中断允许位,与标志位 SPIF(数据传送完毕后置位) 及 MODF 相对应。 SPE: SPI 系统工作允许位。为 1 时,允许 SPI 工作;为 0 时,禁止 SPI 工作。 SPTIE:数据传送中断允许位,与标志位 SPTEF(SPIDR 为空时置位)对应。 MSTR:主从模式选择位。0 为从机模式,1 为主机模式。 CPOL: SPI 时钟极性位。主从机得有相同的 CPOL 值。CPOL=1 时,时钟选择低有 效,SPICLK 空闲时为高电平。CPOL=0 时,时钟选择高有效,SPICLK 空闲时为低 电平。 CPHA: SPI 时钟相位位。CPHA=1 时,会在发送数据开始 SPICLK 就发生一次上升沿 跳变。CPHA=0 时,则在发送数据的一个半的位置开始 SPICLK 就发生一次上升沿 跳变。 SSOE:从机选择输出允许位。此位与 MODFEN 配合使用。 LSBFE: SPI 数据位传输顺序允许位。为 0 时,数据传输高位在先;为 1 时,数据 传输低位在先。该位只决定各位传输的先后顺序,不影响数据位在寄存器中的顺 序。 二、SPICR2。 五、SPIDR 数据寄存器

从零入手Kinetis系统开发(三)建立自己风格的IAR编程.

从零入手Kinetis系统开发(三)建立自己风格的IAR编程.

赛【原创】从零入手Kinetis系统开发(三之建立自己风格的IAR编程结构•2011-12-1122:51发表系统分类:嵌入式系统自定义分类:Kinetis•标签:Kinetis K60IAR本来按计划在这篇博客第三系列,我是想跟大家一块儿分析和整理下K60的启动代码部分的。

可是后来想来想去,觉着既然上一篇写了飞思卡尔的官方例程的编程结构,那么这次就一鼓作气索性先把自己的工程风格建立起来,而且这样建立好了工程之后再分析其启动代码也不显得突兀,容易接受和理解,呵呵(咳咳,有点当老师的赶脚了。

所以这篇如果具体来说,应该叫做“从零建立属于自己风格的基于IAR的K60工程”。

既然说是自己风格,可能就有些偏主观色彩了,呵呵,希望高手大侠们不要拍砖,主要是拿出来希望可以给入门级的同志们一点借鉴和经验,当然也希望跟高手们交流下,有错误的地方期待得到你们的批评指正(这点很重要的。

由于这篇内容可能会有点多甚至有点乱,所以下面就不再废话了,直接上图了哈(都快口头禅了,晕~呵呵,上图就是我自己的一种风格,其中Library文件组为自己做的库,包括了CPU文件组(K60的内核部分,Drivers文件组(K60功能模块驱动,Headers文件组(部分系统头文件和StartUp文件组(K60的启动代码文件;Link文件组为K60的配置模式文件组,icf文件可以到网上搜一搜它的作用,Project文件组为一个新项目工程的文件组,在该文件组新建功能C文件,Output文件组为链接输出文件组,,out文件用于下载调试。

每个人可能都有一种编程风格,只不过如果可以给大家一点启发或者借鉴则足已。

整体的工程架构我已经晒出来了(呵呵,我也潮一把,用一用“晒”这个字,也就是本篇的任务和最终的目标,下面将分几个步骤层层剥解,如果把它看成牛,那希望我们能像庖丁一样游刃有余,开始吧:(可能有的步骤较粗略,没办法,篇幅所限,注重领会精神,呵呵(1目前大多数开发环境都是基于项目工程(project来管理的,但是每个project又必须建立在工作区内,且一个工作区允许多个项目的建立,如果第一次建立一个project则必须要先建立工作区。

Kinect开发者指南说明书

Kinect开发者指南说明书

Table of ContentsAbout1 Chapter 1: Getting started with kinect2 Remarks2 Examples2 Installation or Setup2 Credits7AboutYou can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: kinectIt is an unofficial and free kinect ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official kinect.The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to ********************Chapter 1: Getting started with kinectRemarksThis section provides an overview of what kinect is, and why a developer might want to use it.It should also mention any large subjects within kinect, and link out to the related topics. Since the Documentation for kinect is new, you may need to create initial versions of those related topics. ExamplesInstallation or SetupDetailed instructions on getting kinect set up or installed.Setting Up a Kinect SensorKinect for Windows 1.5, 1.6, 1.7, 1.8Here are some simple steps to get your Kinect sensor up and running.Step 1: Mount the Sensor on a Stable SurfacePlace the sensor on a stable surface in a location where it will not fall or be struck during use. Here are some other tips.Do not place the Kinect on or in front of a speaker or on a surface that vibrates or makes noise.Keep the Kinect out of direct sunlight.Use the Kinect within its specified operating temperature range of 41 to 95 degrees Fahrenheit (5 to 35 degrees Celsius). If the sensor is exposed to an environment outside of itsprescribed temperature range, turn it off and allow the temperature to stabilize within the specified range before you use the sensor again.Do not tilt a Kinect on its base. Manually tilting the Kinect can damage the sensor. TheKinect tilt angle is controlled by software; see Kinect Explorer - WPF C# Sample for an example.Step 2: Install the Kinect for Windows SDKIf you haven't done so already, download and install the free SDK from the Kinect for Windows download page.If you haven't done so already, download and install the free Developer Toolkit from theKinect for Windows download page.Step 3: Plug in your Kinect sensorConnect the power supply for your Kinect to an external power source.Connect the Kinect to a USB port on your PC and wait for Windows to recognize it.All the drivers, including audio, will load seamlessly.When you install the Kinect for Windows SDK, the installation package includes the Kinect drivers.When the Kinect drivers are installed on a Windows-based PC, a Kinect that is plugged into the PC's USB port appears as a multicomponent USB device.There is a known issue regarding USB host controller compatibility.After loading the drivers, you need to set up your development environment. If you are using Visual Studio, continue with Configuring the Development Environment to help you create your first C# or C++ application.Troubleshooting TipsThe following tips will help you get started using your Kinect:If a non-Microsoft driver for the Kinect is installed on your computer, the Kinect for Windows drivers might not install or function correctly. To fix this, uninstall the non-Microsoft drivers before installing the Kinect for Windows SDK.Connect the power supply for the Kinect to an external power source; if the Kinect has only power from the USB connection, it will be minimally functional and light the LED, but it must be connected to an external power source to be fully functional.No tools are required for calibration of audio and video.Your Kinect should be the only device plugged into a USB hub on your computer. If you have more than one Kinect, connect them to different USB controllers. If 2 hubs are connected tothe same controller, only 1 Kinect can work at a time.The Kinect is protected from overheating by a fan. It is controlled by the sensor's firmware, which turns off the camera at 90 degrees Celsius. There is no software interface forapplications to control the fan.Reasonable lighting, neither extremely dark nor extremely bright, is important for capturing images with the RGB camera. Incandescent, fluorescent, and natural lighting provide no special obstacles, but do not point an intense or constant light source at the camera because this can blind the RGB sensor.The depth sensor functions adequately in typical and reduced lighting, although in near darkness there is increased noise in the signal.The depth sensor reads depth information from reflected light. Objects that are highlyreflective (mirrors and shiny metal) or highly absorptive (fluffy and/or dark materials) may not be registered by the depth sensor as successfully as other objects.SourceLinuxUbuntu/Debian Official packagesStarting from Ubuntu 11.10 (Oneiric) and Debian 7 (Wheezy), Ubuntu and Debian provide official packages of libfreenect. You can install them easily in a console:$ sudo apt-get install freenectIn Ubuntu 12.04 the gspca kernel driver prevent libfreenect from claiming the Kinect device in user-mode. Either remove and blacklist the module$ sudo modprobe -r gspca_kinect$ sudo modprobe -r gspca_main$ echo "blacklist gspca_kinect" |sudo tee -a /etc/modprobe.d/blacklist.confor install a recent versions of libfreenect that can automatically detach the kernel driver by adding Florian Echtler libtisch PPA (see below) with updated libfreenect packages for Ubuntu 12.04.The freenect device is accessible to any user belonging to the group 'plugdev'. By default, a desktop user belongs to the plugdev group but if you need to add them to the group:$ sudo adduser $USER plugdevthen log out and log in again NeuroDebian repositoryIf you want a recent version of libfreenect no matter which version of Debian or Ubuntu you use, backports of the latest release of libfreenect for all supported version of Debian and Ubuntu (namely Ubuntu Lucid(10.04), Maverick (10.10), Natty (11.04), Oneiric (11.10) and Debian Squeeze and Wheezy at the time of writing) are available on NeuroDebian repository . The packages available there are created by the maintainers of the official Debian package and follows the standards of Debian/Ubuntu.To enable the NeuroDebian repository:$ wget -O- /lists/$(lsb_release -cs).us-nh | sudo tee/etc/apt/sources.list.d/neurodebian.sources.list$ sudo apt-key adv --recv-keys --keyserver 2649A5A9$ sudo apt-get updateInstalling libfreenect is the same as before:$ sudo apt-get install freenectMake sure your user belongs to the plugdev group (The default for a desktop user) to access the device without the root privileges. If it is not the case, add them by:$ sudo adduser $USER plugdevand log out and log in again libtisch PPAAn Ubuntu launchpad ppa for Lucid(10.04), Maverick (10.10), Natty (11.04), Oneiric (11.10) and Pangolin (12.04) is available at this link.to use it, open a console and execute:$ sudo add-apt-repository ppa:floe/libtisch$ sudo apt-get updateAfter that, you can use:$ sudo apt-get install libfreenect libfreenect-dev libfreenect-demosThis will install libfreenect, the development headers, and the demo applications.After that, you need to add yourself to the 'video' group and log back in. The package already includes the necessary rules for the udev daemon so that accessing the device will be possible for users in the group video.$ sudo adduser $USER videobe sure to log out and back in. You don't need to reboot, just plug in the kinect device right now (if it was already connected, unplug and plug back in).To start the demo applications use:$ freenect-glviewProblems with accessing deviceIn case of problems, run$ lsusb | grep Xboxwhich should list 3 devices> lsusb | grep Xbox Bus> 001 Device 021: ID 045e:02ae Microsoft Corp. Xbox NUI Camera Bus 001> Device 019: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor Bus 001 Device> 020: ID 045e:02ad Microsoft Corp. Xbox NUI AudioIf they are not present, runecho -1 | sudo tee -a /sys/module/usbcore/parameters/autosuspendand reconnect Kinekt and Kinect Camera should be listedYou find all demo applications starting with the freenect- prefix. Ubuntu Manual InstallQuick copy-paste instructions to get up-and-running instantly:sudo apt-get install git-core cmake libglut3-dev pkg-config build-essential libxmu-dev libxi-dev libusb-1.0-0-devgit clone git:///OpenKinect/libfreenect.gitcd libfreenectmkdir buildcd buildcmake ..makesudo make installsudo ldconfig /usr/local/lib64/sudo freenect-glviewNote: If you getting an error saying apt-get cannot find libglut3, you might be on anewer version of Ubuntu that has freeglut3-* instead of libglut3-*, so your initial apt-getinstall would look like:sudo apt-get install git-core cmake freeglut3-dev pkg-config build-essential libxmu-dev libxi-dev libusb-1.0-0-devTo use Kinect as a non-root user do the following:sudo adduser $USER videoAlso make a file with rules for the Linux device manager:sudo nano /etc/udev/rules.d/51-kinect.rulesCopy and paste:# ATTR{product}=="Xbox NUI Motor"SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02b0", MODE="0666"# ATTR{product}=="Xbox NUI Audio"SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ad", MODE="0666"# ATTR{product}=="Xbox NUI Camera"SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ae", MODE="0666"# ATTR{product}=="Xbox NUI Motor"SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02c2", MODE="0666"# ATTR{product}=="Xbox NUI Motor"SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02be", MODE="0666"# ATTR{product}=="Xbox NUI Motor"SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02bf", MODE="0666"Be sure to log out and back in.If you can't access or still need root privileges to use your device: in some cases there might be conflicts between permissions of two drivers installed (libfreenect and primesense). If this is your case, try reinstalling primesense's sensor driver and keep only primesense's rules file/etc/udev/rules.d/55-primesense-usb.rule s, removing the /etc/udev/rules.d/51-kinect.rules file if you created it.Read Getting started with kinect online: https:///kinect/topic/10611/getting-started-with-kinectCredits。

从零入手Kinetis系统开发(五)GPIO模块

从零入手Kinetis系统开发(五)GPIO模块

赛【原创】从零入手Kinetis系统开发(五)之GPIO模块•2012-01-0817:04发表系统分类:嵌入式系统自定义分类:Kinetis•标签:Kinetis K60GPIO IAR本文参与参与“飞思卡尔创意嘉年华——博客征文比赛”获投票:3好久没有写从零入手这个系列了,发现有点生疏了,看来以后不能老搁置下来啊,呵呵~假期临近,貌似最近好多人都得了假前松散症了,我就是这个样子了,天天在等着放假回家,无心科研了,哈哈,但是该做的还得做。

闲话说完了,下面进入正题。

可以说,前面几个系列只是个准备阶段,从该篇之后就打算进入到应用阶段了,会以K60为例逐篇介绍Kinetis的各个功能模块,并给以相应的实例工程作为参考,总之希望初手们能尽早入门(加油啊,不然我可白费这么大劲了,呵呵),高手们给点意见,哈哈。

本篇就开个好头,说个简单的却是最最常用的模块—GPIO模块。

要想了解一个模块,有些重要的图表必不可少,下面我们看下GPIO模块框图(refer to kinetis datasheet)然后下面列出Kinetis的GPIO模块的一些特点作为参考(这点对一款芯片的选型很重要的,不得不说kinetis的GPIO功能还是挺强大的):(1)I/O口兼容5v外部设备(所以不需要像244or245之类的电平转换接口),同时可以支持开漏输出(这点的好处,百度谷歌之,这里不赘述了哈,呵呵)。

(2)5组I/O(PORTA,PORTB,PORTC,PORTD,PORTE)都支持I/O中断和DMA中断(边沿或者电平触发),这点我们可以粗算一下,假设不考虑片子的管脚限制,即每组I/O有32pins,也就是支持32*5个中断,够吓人的吧,不过需要注意的是每组I/O用的是一个中断向量号,具体组内哪个IO中断则需要根据中断标志来判断了,所以如果需要设置优先级的场合还是采用不同组的IO中断吧,这点相信用到的都懂的。

(3)带数字干扰(毛刺or抖动)滤波器(digital glitch filter),可配置滤波宽度和时钟源。

kinect原理

kinect原理

Kinect原理详解1. 简介Kinect是由微软公司开发的一款基于深度摄像头和红外线传感器的体感控制设备。

它能够通过捕捉玩家的动作和声音,实现与游戏、虚拟现实等应用的交互。

Kinect 的原理涉及到深度感知、运动追踪和声音识别等多个方面。

2. 深度感知原理Kinect的深度感知能力是通过红外线投影和红外线摄像头来实现的。

在Kinect设备上,有一个红外线发射器和一个红外线摄像头。

红外线发射器会发射一束不可见的红外线光束,并覆盖整个场景。

当这些红外线光束照射到物体表面时,一部分光会被物体吸收,另一部分光会被反射回来。

红外线摄像头能够接收到这些反射回来的光,并将其转换成电信号。

根据物体与Kinect之间的距离,反射回来的光强会有所不同。

通过测量反射光强度,Kinect可以计算出物体与其之间的距离。

这样就实现了对场景中物体的深度感知。

3. 运动追踪原理Kinect的运动追踪能力是通过红外线摄像头和RGB摄像头的配合来实现的。

红外线摄像头主要用于捕捉玩家的骨骼信息,而RGB摄像头则用于捕捉玩家的图像。

在运动追踪过程中,红外线摄像头会将场景中的人体轮廓提取出来,并识别出骨骼关节。

这些骨骼关节包括头部、颈部、肩部、手臂、手掌、腿部等。

通过对骨骼关节的跟踪,Kinect可以实时获取玩家的姿势和动作信息。

例如,当玩家抬起手臂时,Kinect能够识别出这一动作,并将其转换成相应的指令,用于控制游戏或其他应用。

4. 声音识别原理Kinect还具备声音识别功能。

它内置了多个麦克风阵列,可以接收到环境中的声音信号,并对其进行处理和分析。

声音信号在进入麦克风阵列后,会经过一系列的处理步骤,包括噪声消除、语音增强和语音识别等。

通过这些处理,Kinect能够准确地识别出玩家的语音指令。

Kinect支持多种语音指令,玩家可以通过语音来控制游戏、播放音乐、搜索内容等。

声音识别的原理主要是基于模式匹配和机器学习算法,通过对大量训练数据进行学习和分析,提高了声音识别的准确性和稳定性。

从零入手Kinetis系统开发(七)之ADC模块

从零入手Kinetis系统开发(七)之ADC模块

【原创】从零入手Kinetis系统开发(七)之ADC模块•2012-02-2922:52发表系统分类:嵌入式系统自定义分类:Kinetis•标签:Kinetis K60IAR ADC今天是2月最后一天,而且还是四年一次的2月29日,为了纪念这难得的一天还是决定写点东西,呵呵。

在连续写了几篇有关飞思卡尔开发环境(IDE)的博客之后,觉着虽然有点新意有点小技巧在里面,不过看多了估计大家也看腻歪了也会觉着其实写了那么多没实际内容(其实真有的,这些小技巧我还是花费了一些心思专研了一番的,哈哈),所以这次就再爆点实料,继续更新从零入手系列。

前一阵儿,自己的确在找状态,因为放假回来之后觉着对Kinetis生疏了不少,思路有些空白,所以私底下弥补了一番,真的是台上十分钟,台下十年功,当然不是在给开源者邀功颂德之类的,就是明白了为什么好多人不愿意开源,其实一方面可能的确涉及到自己的知识产权和核心的东西,还有就是想要开源不单单是简单的贴出源代码这么简单(这点很同意AET博主说的,其实作为开源者也是),作为开源者,开源常常会拖带一些麻烦的义务还有因为自己辛苦的劳动被别人简单的贴出去连转载两个字都不加的委屈,说真的,简单的贴出源代码,估计没几个人能看懂,当然代码风格好的就不算了,嘿嘿,所以开源需要很大的勇气。

晕,又扯偏了,呵呵,还是继续说正事吧,哈哈~又是老惯例,啰嗦了一堆,所以老朋友可以直接跳的该段了,哈哈,本篇就拿Kinetis的ADC模块开刀,其实有过网友说急需DMA的例程还有说写写细说寄存器使用方法之类的,不是不想写,是的确我还没用到DMA之类的,所以可能还需一些时日,不过保证肯定会有的,如果有先写出来的还是欢迎分享出来,独乐乐不如众乐乐嘛,哈哈,下面进入正题:1.Kinetis的ADC模块的一些特点(以K60为例),挑重要的说了,一些AD模块常见的特点就不提了,呵呵:(1)最高16位AD转换精度,逐次逼近型的,所以速度没问题,而且能做到如此精度已实属不易了,再往高估计就该换Σ-Δ的了;(2)最多4对差分模拟输入通道和24个单端模拟输入通道,对一般工业应用足够了,其实在对AD要求不高的应用还是用内部AD好些,选外部AD的话一是操作起来麻烦,还有就是对模拟电路布局布线上还是有些技巧的;(3)输出精度可选,例如差分的话可编程16位,13位,11位和9位模式,单端的话可编程为16位,12位,10位和8位,不明白为什么差分精度非要比单端多1位,有知道的希望不吝告诉一下,在下面留言即可,呵呵;(4)输入时钟可选四种时钟,即bus_clock,bus_clock/2,ALTCK,ADACK;(5)内设内部温度传感器,用于监控芯片温度,这个还是有一定用途的,不过对他的精度不要有过高期望;(6)硬件平均功能,对AD转换结果在队列里平均之后输出,挺实用的,要是再能对列排列一下就好了,咳咳,有点要求太高了,哈哈;(7)带自校准模式,用过外部AD的知道,这个功能是必须的但又颇有点小道道的,深入做过项目的肯定知道,呵呵;(8)最高64倍PGA(programable gain Amplifier),加上这个还是让俺们给飞思卡尔加点满意分的,哈哈。

从零入手Kinetis系统开发

从零入手Kinetis系统开发

整理内容转自,向jihceng0622表示感谢!!!【原创】从零入手Kinetis系统开发(一)研究飞思卡尔的Kinetis有段时间了,由于一直在跟飞思卡尔的片子打交道,所以从Kinetis一出来就引起了我很大的兴趣,从去年9月份发布以来,估计大家就都在翘首以盼FSL能尽快出开发套件和相关资料,呵呵。

提到这,就不得不对飞思卡尔抢占的市场先机赞一个,毕竟M4的核还是飞思卡尔领先发布了,虽然紧接着NXP和意法都推出了相关产品,不过在当今这个激烈的市场机制下,尤其是电子产品,谁先抢占先机谁就占据了优势,这个我们从如今智能手机领域竞争的激烈程度上就可略窥一斑,虽然不灰常了解FSL为什么ColdFire,PowerPC做的好好的,转向ARM(估计是在如今ARM家族正如日中天的大环境下,显然飞思卡尔也不想落下它,偏的太远,呵呵),不过飞思卡尔片子的可靠性还是公认比较好的了,就是小小的期望一下,FSL以后客户定向能稍稍微偏向下我们小群体(片子太贵了啊,汗~),尤其是我们这些个穷学生,呵呵。

以上纯是自己一点个人观点,有点偏主观色彩,大家心急的可以直接略过,不心急的咱以后再探讨,呵呵,那下面咱直接进入主题。

既然标题是从零入手,就得像垒积木那样一步步的来,因为我也是从零开始的,也希望同大家一块儿交流自己学习期间的一点心得和经验,给过去、现在或者将来徘徊在Kinetis大门外犹豫的广大电子爱好者一点启发,起码别像我当初那样愁眉苦脸四处碰壁找不到入门的途径,毕竟Kinetis太新了以至于现在资料都很少(咳咳,主要都是英文的,看着太累了,哎),大多数人都在边摸索边前进着,当然肯定有大牛已经远远走在前列了,这个只能仰视了,呵呵,我们还是一步步慢点来踏实些。

下面我以我自己的开发经历给大家敲响Kinetis的大门(有点大了,咳咳)。

第一系列就首先带大家准备一下开发系统的搭建,巧妇难为无米之炊,那我们就从硬件和软件两个方面准备一下:硬件方面,因为我手里有块K60的最小系统板(要玩就玩数大的是吧,60够大的了,呵呵,开玩笑的,这个根据自己实际情况来,其实大部分操作还是一样的),以后的开发不出意外的话就先以它为例,下面给大家看下俺的板子,片子用的还是工程测试的片子(PK60,哎,期待看到MK60呢一直,呵呵),不过不影响使用,还是比较稳定的。

Kinect开发——骨骼追踪进阶(上)

Kinect开发——骨骼追踪进阶(上)

Kinect开发——⾻骼追踪进阶(上)Kinect传感器核⼼只是发射红外线,并探测红外光反射,从⽽可以计算出视场范围内每⼀个像素的深度值。

从深度数据中最先提取出来的是物体主体和形状,以及每⼀个像素点的游戏者索引信息。

然后⽤这些形状信息来匹配⼈体的各个部分,最后计算匹配出来的各个关节在⼈体中的位置。

这就是我们之前介绍过的⾻骼追踪。

红外影像和深度数据对于Kinect系统来说很重要,它是Kinect的核⼼,在Kinect系统中其重要性仅次于⾻骼追踪。

事实上,这些数据相当于⼀个输⼊终端。

随着Kinect或者其他深度摄像机的流⾏和普及。

开发者可以不⽤关注原始的深度影像数据,他们变得不重要或者只是作为获取其他数据的⼀个基础数据⽽已。

我们现在就处在这个阶段,Kinect SDK并没有提供给开发者访问原始红外影像数据流的接⼝,但是其它第三⽅的SDK可以这么做。

可能⼤多数开发者不会使⽤原始的深度数据,⽤到的只是Kinect处理好了的⾻骼数据。

但是,⼀旦姿势和⼿势识别整合到Kinect SDK并成为其⼀部分时,可能开发者甚⾄不⽤接触到⾻骼数据了。

⽤户交互在底层,⿏标,触摸板或者⼿写设备都是提供⼀些X,Y坐标,操作系统将这些X,Y坐标从其在的空间坐标系统转换到计算机屏幕上,这⼀点和上篇⽂章讨论的空间变换类似。

操作系统的职责是响应这些标准输⼊设备输⼊的数据,然后将其转换到图形⽤户界⾯或者应⽤程序中去。

操作系统的图形⽤户界⾯显⽰光标位置,并响应⽤户的输⼊。

在有些时候,这个过程没有那么简单,需要我们了解GUI平台。

以WPF应⽤程序为例,它并没有对Kinect提供像⿏标和键盘那样的原⽣的⽀持。

这个⼯作就落到开发者⾝上了,我们需要从Kinect中获取数据,然后利⽤这些数据与按钮,下拉框或者其他控件进⾏交互。

根据应⽤程序或者⽤户界⾯的复杂度的不同,这种⼯作可能需要我们了解很多有关WPF的知识。

WPF 应⽤程序中输⼊系统当开发⼀个WPF应⽤程序时,开发者并不需要特别关注⽤户输⼊机制。

kinect体感控制器原理解释

kinect体感控制器原理解释

Kinect体感技术简介摘要:微软推出kinect体感控制器,大家对此惊叹不已。

最大的特点就是无需再配备手柄、摇杆等控制器,让玩家完全凭身体动作、声音就能对游戏进行操作,带来了全新的游戏体验。

这是怎么实现的呢?通过光学,电磁学一些知识进一步了解这项技术。

关键词:kincct技术,摄像头,传感器,芯片。

前言:学到的知识不知怎么用,通过对体感控制器的认识,进一步加深对传感器,芯片等的认识。

目录—kinect技术介绍二kinect体感控制器的功能三kinect体感控制器元件有哪些?怎么实现全新的游戏体验的?四结束语—kinect技术介绍kinect彻底颠覆了游戏的单一操作。

使人机互动的理念更加彻底的展现出来。

它是一种3D体感摄影机,同时它导入了即时动态捕捉、影像辨识、麦克风输入、语音辨识、社群互动等功能。

玩家可以通过这项技术在游戏中开车、与其他玩家互动、通过互联网与其他Xbox 舷分享图片和信息等。

不需要使用任何控制器;它是依靠相机捕捉三维空间中玩家的运动。

二kinect体感控制器的功能kinnectl作原理,摄像头起到了很大的作用,它负责捕捉人肢体的动作,然后微软的工程师就可以设计程序教它如何去识别、记忆、分析处理这些动作。

Kinect 摄像头可以捕捉到用户的手势动作,再把这些手势语言转换成游戏控制。

具体来说,Kinect借助PrimeSense软件和摄像头侦测、捕捉用户手势动作,然后再将捕捉到的影像与本身内部存有的人体模型相对照。

每一个符合内部已存人体模型的物体就会被创造成相关的骨骼模型,系统再将该模型转换成虚拟角色,该角色通过识别该人体骨骼模型的关键部位进行动作触发。

在虚拟骨骼模型的帮助下,系统可识别人体的25个关键部位。

此基础上加入了识别人体站立/坐姿的新技术。

使用红外定位 Kinect 比一般的摄像头更为智能。

首先,它能够发射红夕卜线,从而对整个房间进行立体定位。

摄像头则可以借助红外线来识别人体的运动。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

∙从零入手Kinetis系统开发(十二)之SPI模块∙2012-12-28 16:47 发表系统分类:嵌入式系统自定义分类:Kinetis∙标签:Kinetis K60SPI呼。

真是太久没有更新从零入手系列了,掐指一算距离上次更新(第十一篇Flexbus)已经足足六个月有余了。

正印证了信息时代更新发展迅猛的那句话(这句话在移动领域感触尤其深刻,今早不小心看到自己半年前花1200买的手机现在都不到600了,刺激死我了,哎),这大半年期间,Kinetis的资料从当初的凤毛麟角到现在的百花争放,各种开源资料层出不穷,各种牛人大展身手。

可以说各大网站开发板、开源软件包及开发教程的出现极大的降低了开发者们的入手门槛(怎么评价飞思卡尔的产品呢,一般是入手比较难,等熟悉了就感觉好用,又爱又恨的感觉啊有木有,呵呵),很多人都从中受益,so,此时再写从零入手系列已感觉作用不是那么明显了,不过我不喜欢半途而废的感觉,还是习惯坚持把它写完,一方面把它保存下来作为自己的学习笔记,另一方面肯定还是会对一些人有些帮助的,所以何乐为不为呢,哈哈~前段时间完成了SPI模块驱动的编写和测试,所以今天就抓紧抽空把它写出来,唯恐拖久了就该忘了,然后就又得重新温习一遍了,呵呵。

所以毫无疑问,今天的主角就是Kinetis 的SPI模块了,个人感觉相对来说SPI模块的驱动比较好写,毕竟本身SPI协议就比较简单,那下面我们就直入主题了:SPI,即Serial Peripheral Interface,就是所谓的串行外设接口。

这里虽说是串行通信接口,不过相比于传统的UART来讲,其优势当属高速、全双工和同步这三大特性了,呵呵,当然它兼有串行总线的占用管脚少的特点,只需要4根线即可,即串行时钟线(SCK,同步必须的)、主出从入(MOSI)、主入从出(MISO)及从机片选(nSS)。

同时拥有这么多优势那自然广受各大半导体厂商的欢迎了,所以SPI接口的应用比较广泛,如EEPROM、片外Flash及各种外设芯片,总之很多很多的片子都会选择SPI作为其通信接口,以致于如果一款SOC或者MCU没有SPI接口的话都会显得非常另类了,哈哈。

当然还有一个小插曲了,那就是SPI的老祖宗就是Motorola了,Motorola半导体(Freescale前身)最早提出该接口并应用于其当年闻名遐迩的68k处理器了,所以Freescale自家的产品上的SPI估计不会太差吧,呵呵,当然现在讨论这个有点为时过早,用过了才知道,下面我们就正式说说Kinetis 的SPI模块吧:1.首先还是按套路出牌吧,呵呵,在浅浅的给大家普及完下SPI的常识之后,那下面就具体化些,以Kinetis的片上SPI模块为例捡重点的说说Kinetis SPI的特性:(1)SPI的共性,全双工,四线同步传输(基本等于废话,呵呵,上面提到了);(2)支持主机与从机模式,主模式支持最高busclk/2的传输速率;(3)支持深度为4宽度为32bit的发送和接收FIFO,这个不错;(4)可编程控制的SPI发送接收属性,包括可编程一帧发送位数(4bit到16bit可选,当然也可以支持连续发送,这个发送位数就不受限了)、可编程的SS有效到SCK有效延迟时间、可编程时钟信号极性及相位等等;(5)支持多个SPI模块(我的K60 144pin有3个),并且每个SPI模块最多支持6个外设片选SSx,且可以使用外部编码器扩展成64个片选,这个我们平时用基本用不到这么多,可能用在复杂的系统里;(6)支持多达6个中断源,但注意这些中断源共用一个中断向量,所以进ISR后需要软件判断具体是哪个中断源;(7)允许Interrupt、DMA及查询方式发送和接受SPI数据。

下图为SPI模块系统框图,官方SPI框图比较粗,只能凑合着看了,呵呵:2.说完Kinetis的基本特性之后,我们还需要做些准备,了解了解Kinetis的管脚描述及其中断源。

SPI引脚分配:PCS0/nSS0 ——主机模式为片选输出PCS0,从机为片选输入SS0;PCS[4:1] ——主机模式为外设片选PCS[1:4],从机无效;PCS5/nPCSS ——主机模式下位外设片选PCS5或者频闪(频闪用于和PCS[0:4]搭配编码片选64个SPI外设),从机无效;SIN ——即MISO,主入从出;SOUT ——即MOSI,主出从入;SCK ——主机作为输出同步时钟,从机则作为输入接收同步时钟。

中断源:3.到此准备工作就都结束了,下面就可以放开手脚开始软件的编写了,这也是前面啰嗦了半天之后最关键的一步了,估计大家也都等着这一步呢,呵呵,不过放心本篇会继续开源软件包,可以到文章最后的附件下载。

当然,所谓的硬件驱动无非就是设置寄存器了,难的是从一堆英文datasheet里摘出完成相应功能所需的基本的寄存器进行恰当的设置来完成相应的功能。

所以这里就拿出SPI驱动所需要的关心的几个最基本的寄存器设置了,如下:(1)SPIx_MCR寄存器(重点的设置位我已用红圈标识)MSTR:主从模式选择位0 ——从机,1——主机PCSIS[5:0]:片选端无效状态0 —— PCSx无效状态为低电平,1 —— PCSx无效状态为高电平MDIS:模块禁能(注意默认上电为1,而且该位需要清零才能进一步设置DIS_TXF和DIS_RXF)0 ——使能SPI时钟,1 ——通过外部逻辑禁能SPI时钟DIS_TXF、DIS_RXF:禁能发送接收FIFO0 ——使能FIFO缓冲,1 ——禁能FIFO缓冲CLR_TXF、CLR_RXF:清空FIFO计数器(需要用到)0 ——不清零TX_FIFO\RX_FIFO counter,1 ——清零TX_FIFO\RX_FIFO counter HALT:停止SPI发送接收位(注意默认上电是置1的,在发送数据的时候需要清零该位才可)0 ——启动SPI发送,1 ——停止SPI发送(2)SPIx_CTARn寄存器,即时钟及发送属性寄存器,该寄存器有一定特殊性,在主机模式下该寄存器有CTAR[0:1]两个寄存器可选(具体使用哪个由SPI_PUSHR寄存器的CTAS位决定),而从机模式下同样有两个个专用寄存器为SPIx_CTAR[0:1]_Slave:FMSZ:帧大小设置位,即决定每次发送多少个数据位。

最小为3,最大15,且实际发送位数为FMSZ+1位。

另外需要注意的是该位默认上电为1111,即一次发送16位,这点需要注意。

CPOL:时钟极性设置0——SCK空闲状态为低, 1——SCK空闲状态为高CPHA:时钟相位设置0 —— Data is captured on the leading edge of SCK and changed on the following edge1 —— Data is changed on the leading edge of SCK and captured on the following edgeLSBFE:最低位先发设置0 ——最高为先发(MSB first),1 ——最低位先发(LSB first)DBR、PBR、BR:SCK时钟频率设置f(SCK)=[f(Busclk)/PBR]*[(1+DBR)/BR],f(SCK)最大为f(Busclk)/2PASC、CSSCK:PCS有效到SCK有效时间和SCK无效到PCS无效时间间隔设置(3)SPIx_RSER寄存器,即中断使能寄存器。

上图画圈的两个中断使能比较常用,即发送完成中断使能(TCF_RE,每发送完一次即置位SPI_SR_TCF)和SPI队列发送完毕中断使能(EOQF_RE,即FIFO发送完毕置位SPI_SR_EOQF),其他的设置为可以看文章开头的那个中断源截图所示。

(4)SPIx_PUSHER寄存器及SPI_xPOPER寄存器,即SPI的发送寄存器和接收寄存器,不过与普通的发送寄存器不同的是,该发送寄存器还包含相应的指令,实际数据位最多为16位,而接收寄存器则可以32位接收。

CTAS:主机模式下选择SPIx_CTAR[0:1]中的一个,从机模式下选择SPIx_CTAR——Slave[0:1]中一个;EOQ:指示当前要发送的数据是否为最后要发送的数据0 ——指示TXDATA中的数据不是最后要发送的数据,1 ——指示TXDATA中的数据是最后要发送的数据;PCS[5:0]:设定在发送数据时哪个PCSx有效00000——全部PCS无效00001——PCS0有效.....11111——全部PCS有效;TXDATA:要发送的数据,最多为16位,由SPI_CTAR_FMSZ决定;RXDATA:接收的数据,最多为32位,由主机决定。

4.呼呼...一个一个的解释寄存器真够累的,不过我个人觉着这样效果会好些,所以多写了些,呵呵。

下面就可以软件实现了,由于上面寄存器已经说的很明白了,所以这部分我就只贴出部分代码加注释了,多余的我就不解释了,完整代码见附件:/****************************************************************************** ****@ Routine:SPI_Init@ Parameter:无@ Descriptior:SPI模块初始化******************************************************************************* ***/void SPI_Init(void);/****************************************************************************** ****@ Routine:SPI_Send()@ Parameter:jc_data 要发送的数据(可以为16bit或者8bit)@ Descriptior:SPI数据发送(本函数兼容缓冲FIFO和不带FIFO)******************************************************************************* ***/void SPI_Send(uint8 jc_data);/****************************************************************************** ****@ Routine:SPI_Read()@ Parameter:输入 jc_data 发送的数据(可以任意,只是为了提供从机相应的SCK时钟)输出读取到的数据@ Descriptior:SPI数据接收(本函数兼容缓冲FIFO和不带FIFO)******************************************************************************* ***/uint8 SPI_Read(uint8 jc_data);好长时间没写Kinetis的从零入手系列了,没想到这次毫无手生的感觉,而且还颇有些文思泉涌控制不住的感脚来,哈哈哈。

相关文档
最新文档