TI系列DSP的I2C模块配置与应用

发布者:SerendipitySoul最新更新时间:2006-07-12 来源: 单片机及嵌入式系统应用关键字:寄存器  模块  时钟 手机看文章 扫描二维码
随时随地手机看文章

  I2C总线最早是由Philips公司提出的串行通信接口规范,标准I2C总线只使用两条线通信,能将多个具有I2C接口的设备连接,进行可靠的通信,连接到同一总线的I2C器件数量,只受总线最大电容400pF的限制,而且最高通信速率可以达到3.4Mb/s,由于I2C接口简单,使用方便,被很多芯片采用,成为一种广泛应用的接口[1]。

  DSP即数字信号处理器,是一种广泛应用的嵌入式处理器,主要应用是实时快速地实现各种数字信号处理算法,目前,国际主要的DSP供应商是TI公司,其TMS32系列产品占据了DSP市场近一半的份额,为了用户能方便快捷的进行系统的开发与集成,TI公司在一些型号的DSP中集成了I2C通信模块,本文以TMS320C6713为例,使用TI公司DSP开发工具CCS2.2提供的CSL(Chip Support Lib,片级支持库)配置I2C模块。

  图像采集和处理是DSP应用的一个重要领域,本文结合作者开发的基于DSP的图像采集、处理系统、以CMOS图像采集芯片OV7620为例,介绍DSP芯片通过I2C模块对I2C设备进行配置的过程。

  1 TI公司带I2C接口的DSP

  在嵌入式系统开发过程中,如果处理器没有I2C接口而系统中又存在I2C器件时,通用的办法是利用处理器的两根引脚分别模拟SDA和SCL信号,并利用程序模拟接口,这种方法的通用性好,灵活可靠,但是移植性差,不同型号的处理器需要不同的程序,尽管在网上能够下载到这类程序的源代码,但是进行程序移植仍会浪费开发人员大量的时间,而且使得程序变得庞大,不易维护。

  为了用户能方便快捷地进行系统的开发与集成,TI公司在一些型号的DSP中集成了I2C通信模块,例如TMS320C6713、TMS320C6416、TMS320C5509等。

  TMS320C6713是一款高性能浮点DSP,内部集成2个I2C接口:I2C0和I2C1。其中,I2C1的引脚与McBSP1(Multichannel Buffered Serial Port 1,多通道缓存串口1)的引脚复用,默认情况下是激活McBSP1,使用I2C1必须将寄存器DEVCFG的最低位置1[2,3]。I2C模块的结构如图1所示。

  I2CDXR是发送缓存,I2CXSR是发送移位寄存器。总线上的数据送到I2CDXR之后,被拷贝到I2CXSR,按位移出,送到SDA,先移出的位是最高位。I2CDRR与I2CRSR分别是接收缓存和接收移位寄存器,负责将SDA上的数据移入,合并成字节后,放到接收缓存,并将数据发送到数据总线。

  I2C模块有5种状态会产生中断信号,作为中断源提供给DSP中断系统调用,这5种状态是:准确好发送数据、准确好接收数据、可以访问寄存器、主机没收到响应信号和总线仲裁失败。因为I2C模块能够提供中断信号,可以编制中断处理函数,中断中相应I2C事件,确保了响应的实时性。

  I2C模拟还可以与EDMA(Enhanced Direct Memory Access,增强型内存直接访问)配合工作。当数据由I2CDXR拷贝到I2CXSR或由I2CRSR拷贝到I2CDRR时,都会触发EDMA操作,EDMA会发送下一个数据或读取收到的数据。由于EDMA操作不占用DSP处理时间,可以大大提高DSP的运算速度,避免流水线被不停的打断,因此,如果使用I2C模块与外设进行数据量比较大的数据交换,比如,将缓存中的大量数据保存到I2C接口的Flash中,可以使用EDMA操作,如果交换的数据量比较小,而对实时性比较高,比如,接收I2C接口传感器的采集数据,可以采用DSP中断的方式;如果交换的数据量比较小,对实时性要求又不高,比如,对I2C设备进行设置,则可以使用DSP查询状态位的方式,本文例程使用I2C模块配置OV7620,采用查询方式。

  为使I2C模块正常工作,必须为其提供驱动时钟,在TMS320C6713中,I2C模块的时钟由系统时钟经分频得到,如图2所示。

  外接时钟为DSP系统的外接时钟,本文设计的系统时钟频率为25MHz,PLL为系统的锁相环,先对外接时钟分频,再倍频,锁定时钟,然后按照不同的分频系数,分出三个时钟,供TMS320C6713使用,其中的一个输出到I2C模块,I2C模块先根据IPSC的值将时钟预分频,分频后的时钟供I2C模块使用,同时,根据ICCL与ICCH的值再将时钟分频,分别控制SCL的低电平与高电平周期,SCL的频率为

  在配置I2C模块之前,必须配置PLL。TMS320C6713的I2C不支持高速模式,一般配置在标准模式下。

  2 使用CSL配置I2C模块

  对I2C模块的控制是通过操作控制/状态寄存器组实现的。TMS320C6713的寄存器映射到地址空间,可以通过地址操作直接读写寄存器,如
#define I2CMDR0 0x01B40024
*(volatile unsigned int *)I2CMDR0&=~0x20;

  通过地址操作读写寄存器,语法简单,编译效率高,但是程序的可读性和可移植性差,不易维护。

  在DSP应用系统中,一般会涉及到大量DSP器件,特别是片上外设的编程处理工作,在开发初期消耗了开发人员较多精力,TI公司在开发环境CCS中,提供了CSL。多数CSL模块都由对应的函数、宏、类和表示符号组成。可以简单方便地完成对DSP器件片上外设配置和控制的编程工作,从而简化DSP片上外设开发工作,缩短了开发周期,具有标准化控制和管理片上外设的能力,减少了DSP硬件特殊性对用户程序代码的影响,方便用户在不同器件间进行代码移植。但是使用CSL进行外设控制对用户代码执行效率可能会造成一些影响[4]。

  本文先给出配置PLL的程序,再给出配置I2C模块的程序,因为DSP电路板的时钟并不相同,PLL配置程序并不具有很强的可移植性,同时为了提高编译、执行效率,配置PLL的程序采用直接地址操作的方式,寄存器的宏定义请参考相应的DSP数据手册。本例程参考了文献[2],DSP系统的外接时钟为25MHz。


  注意,DSP系统的内部时钟大部分来自于PLL,PLL设置程序必须放在全部的最前面,只有对PLL配置成功,系统才能正常的工作。

  提供时钟之后,可以对I2C模块进行配置。本文将I2C0配制成主机发送模式,工作频率为100kHz,非连续发送,7位地址。因为本程序是为配置OV7620作准备,所以并没有使用EDMA与DSP中断。

  注意,I2C0在发送一个字节后,自动缓缓到主机接收模式,为了验证I2C0工作是否正常,可以将I2C0与I2C1环接。

  本例程只提供配置I2C模块所需的头文件。

  3 使用I2C模块配置OV7620

  Omnivision公司推出的CMOS彩色图像传感器OV7620,最大分辨率为664×492,不但能工作在逐行扫描方式下,也能工作在隔行扫描方式下,可通过I2C总线配置片内寄存器,以使其输出RGB原始数据,本文设计的系统加电复位后,先由TMS320C6713产生I2C总线信号来对OV7620工作寄存器进行初始化,然后OV7620即可开始按要求输出图像信号,包括行同步信号HREF、场同步信号VSYNC、像素时钟信号PCLK和数字图像信号[5]。DSP通过EDMA接收原始图像数据,进行中值滤波,去掉噪声,再进行有关的图象处理,下面给出OV7620的初始化程序。

  OV7620initial()函数的4个参数分别为CMOS感光区域起始点和区域范围,I2C_SetOV7620()为自定义的函数,通过I2C发送两个数据,第一个数据为OV7620的寄存器地址,第二个数据为寄存器内容。

  4 结论

  本文介绍了I2C总线规范,以TMS320C6713为例,说明TI一些DSP中I2C模块的结果及各部分的功能,介绍了如何配置DSP的PLL及系统时钟;给出了开发环境CCS中CSL的使用方法,对TMS320C6713的I2C模块进行了配置,对OV7620进行了配置。

关键字:寄存器  模块  时钟 引用地址:TI系列DSP的I2C模块配置与应用

上一篇:自动断电的CPLD
下一篇:TI系列DSP的I2C模块配置与应用

推荐阅读最新更新时间:2024-05-02 20:25

LPC824-时钟配置
要让LPC824正常工作,首先要对它的时钟源进行配置。LPC824的最高工作频率为30MHz,因此给它的主时钟频率最大不能超过30MHz。实际上,通常都是使用频率较低的晶振,以降低外部电磁干扰,然后再通过内部倍频的方式把主时钟频率提高。根据管方手册给出的数据,外部晶振的频率范围是1MHz~25MHz,一般情况下使用12MHz晶振,然后内部进行2倍频,主时钟工作频率为24MHz。 要对LPC824的时钟进行配置,必须要了解它的时钟结构,先来看一下它的时钟结构图,如下图所示。 首先来看主时钟,给主时钟(main clock)提供选择有4个源,分别是:内部RC振荡器、未倍频之前的PLL时钟、内部看门狗时钟、经过PLL倍频之后的
[单片机]
LPC824-<font color='red'>时钟</font>配置
基于TMS320LF2407的CAN总线数控系统底层测控模块
  1引言   用计算机或微控制器通过一种或多种总线方式,实现与现场各种设备的通信,并通过总线实现对现场设备进行必要控制的计算机网络系统称为底层测控通信网络系统,简称底层测控网络。本文是针对数控系统方面来展开研究的,提出了一种基于CAN总线的数控系统底层测控网络,现场设备就是数控机床等数控设备。   2CAN总线的基本工作原理   CAN总线的拓扑结构是一个典型的串行总线的结构形式。CAN总线中一个节点发送信息,多个节点接收信息;但CAN总线的信息存取方式采用的是一种广播式的存取工作方式。在CAN总线的通信协议中支持的是基于报文的工作方式。也就是说加入或撤销节点设备都不会影响网络的工作,十分适用于控制系统要求快速、可靠、简明
[嵌入式]
传感器与AT89S52单片机的接口电路设计:测量模块电路
该测试仪以AT89S52单片机为核心,外接温湿度传感器SHTll、照度传感器TSL2561、四位共阴数码管、RS485总线通信接口以及显示切换按键。单片机上电工作后,对当前温度、湿度、光强度进行实时测量,通过按键切换将测得的3种参数通过LED数码管进行轮流显示;此外,还可以通过RS485总线与PC机进行通信,将参数值传送到上位机,以达到远程监测的目的。该测试仪的结构框图如图1所示。 测量模块电路 温度和湿度测量采用的是瑞士Sensirion公司生产的SHTll传感器。该传感器采用独特的CMOsens TM技术,将温湿度传感器、信号放大处理、A/D转换、I2C总线全部集成在一块芯片上,可直接与单片机接口。该芯片采用数字式
[单片机]
传感器与AT89S52单片机的接口电路设计:测量<font color='red'>模块</font>电路
Silicon Labs为IoT推出新型WiFi模块
近日,根据Silicon Labs的消息,他们推出全新Wi-Fi模块产品组合,这种新的模块相比之前简化对功耗敏感的电池供电型Wi-Fi产品的设计,特别是针对功耗进行了大幅度优化,甚至降低到了还只有原来一半的功耗水平,非常适合IoT的移动设备使用。 新的模块包括WF200收发器和WFM200模块,支持2.4GHz 802.11 b/g/n Wi-Fi标准,使用该产品的移动设备,电池可以进行缩减但续航时间不会有明显变化,或者使用同样的电池来保证更长的续航能力。 WFM200是目前为止,最小且带有集成天线的预先认证的系统级封装模块。参数方面,它拥有超低的发射(TX: 138mA)和接收(RX: 48mA)功率,200μA平
[半导体设计/制造]
ATmega168 时钟系统及其分布
时钟系统及其分布 Figure12为ATmega168 的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟,详见 P32” 电源管理及休眠模式 ” 。下面为时钟系统的详细描述。 CPU 时钟- clkCPU CPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。终止CPU 时钟将使内核停止工作和计算。 I/O 时钟- clkI/O I/O时钟用于主要的I/O 模块,如定时器/ 计数器、SPI 和USART。I/O 时钟还用于外部中断模块。要注意的是有些外部中断由异步逻辑检测,因此即使I/O 时钟停止了这些中断仍然可以得到
[单片机]
ATmega168 <font color='red'>时钟</font>系统及其分布
GY-30数字光强度模块BH1750FV
GY-30数字光强度模块BH1750FVI资料。压缩包内含数据手册、接线图(原理图)、STC89c52用Lcd1602显示光照度数据的例子程序、还有avr的例子程序。资料是网上找到的,这段时间在用这个模块,用的89c52,资料没有问题,lcd1602显示模块采集的光照度。 GY-30数字光强度模块BH1750FVI: 下面是stc89c52中的接线图 GY-30在stc89c52的接线图 avr中的接线图: 下面是89c52的程序: //*************************************** // BH1750FVI IIC测试程序 // 使用单片机STC89C51 // 晶振:11.0592M
[单片机]
GY-30数字光强度<font color='red'>模块</font>BH1750FV
ARM学习笔记8 通用寄存器和存储器内容交换指令和软中断指令
  交换指令将一个存储单元内容与制定的寄存器内容相交换,交换指令为进程间同步提供了一种方便的解决途径。该指令产生一堆原子Load/Store操作,该操作发生在一个连续的总线操作中,在操作期间阻止其他任何指令对该存储单元的读/写。 一、通用寄存器和存储器字数据交换指令SWP   1、作用     将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。   2、语法格式     SWP{ condition } Rd , Rm ,   3、参数说明     3.1、 Rd :确定指令的目标寄存器     3.2、 Rm :该寄存器包含将要被存储到内存单元中的数据  
[单片机]
个人对STM32 SysTick的总结(寄存器操作)
一、概述: SysTick是一个简单的递减24位计数器。如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断。 状态控制寄存器的第0位可以使能计数器,当前值寄存器随着时钟一直递减,当他减到0的时候,重装载寄存器就会重新装载这只的值,计数器继续从这个值递减。 二、相关寄存器: 2.1SysTick- CTRL 状态和控制寄存器 位16:当前值寄存器递减到0,位16置1 位2:时钟源选择位,0:使用外部参考时钟;1:使用内核时钟 位1:使能SysTick中断,当前值寄存器递减到0时产生中断 位0:SysTick时钟使能 2.2SysTick- LOAD 重装载值寄存器 当前值寄存器为
[单片机]
个人对STM32 SysTick的总结(<font color='red'>寄存器</font>操作)
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved