0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

电子工程师 来源:《单片机与嵌入式系统应 作者: 赵世峰;张海;范耀 2021-04-08 10:30 次阅读

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

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所示。

pIYBAGBuaO-AaCNVAAB0WwQG0JE494.png

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所示。

pIYBAGBuaQGAFNY8AAA606kp4Ro949.png

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

o4YBAGBuaWaATRtUAAAVQSnXsEk219.png

在配置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。

o4YBAGBuaaOAZLLCAAC2L6sLn3k898.png

pIYBAGBuaa-AW28QAAAzAwLqhAg296.png

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

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

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

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

o4YBAGBuagyACGQkAADpaiojEIU116.png

3 使用I2C模块配置OV7620

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

o4YBAGBuah2AVmvWAAB89bbJnq8436.png

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

4 结论

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

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50698

    浏览量

    752040
  • dsp
    dsp
    +关注

    关注

    552

    文章

    7962

    浏览量

    348282
  • 信号处理器
    +关注

    关注

    1

    文章

    251

    浏览量

    25252
  • I2C总线
    +关注

    关注

    8

    文章

    388

    浏览量

    60830
收藏 人收藏

    评论

    相关推荐

    ISO154xEVM低功耗双向I2C隔离器评估模块

    电子发烧友网站提供《ISO154xEVM低功耗双向I2C隔离器评估模块.pdf》资料免费下载
    发表于 11-18 14:46 0次下载
    ISO154xEVM低功耗双向<b class='flag-5'>I2C</b>隔离器评估<b class='flag-5'>模块</b>

    可并联的I2C遥感6A/12A电源模块评估模块

    电子发烧友网站提供《可并联的I2C遥感6A/12A电源模块评估模块.pdf》资料免费下载
    发表于 11-06 09:09 0次下载
    可并联的<b class='flag-5'>I2C</b>遥感6A/12A电源<b class='flag-5'>模块</b>评估<b class='flag-5'>模块</b>

    RISC V的I2C操作

    system_i2c_0_io_scl_writeEnable = !system_i2c_0_io_scl_write;Interface配置示例I2C寄存器设置在
    的头像 发表于 11-01 11:06 129次阅读

    I2C协议的基础知识

    本文从I2C协议的概述开始,描述协议的历史、不同速度模式、物理层和数据帧结构,最后介绍I2C混合电压系统中电平兼容性以及上拉电阻大小计算。
    的头像 发表于 10-22 15:51 292次阅读
    <b class='flag-5'>I2C</b>协议的基础知识

    将TMS320F280x DSP配置I2C主处理器或从处理器

    电子发烧友网站提供《将TMS320F280x DSP配置I2C主处理器或从处理器.pdf》资料免费下载
    发表于 10-15 09:34 0次下载
    将TMS320F280x <b class='flag-5'>DSP</b><b class='flag-5'>配置</b>为<b class='flag-5'>I2C</b>主处理器或从处理器

    了解I2C总线

    电子发烧友网站提供《了解I2C总线.pdf》资料免费下载
    发表于 10-08 11:13 1次下载
    了解<b class='flag-5'>I2C</b>总线

    I2C基本指南

    电子发烧友网站提供《I2C基本指南.pdf》资料免费下载
    发表于 09-10 09:40 0次下载
    <b class='flag-5'>I2C</b>基本指南

    CAN转I2C桥接器

    电子发烧友网站提供《CAN转I2C桥接器.pdf》资料免费下载
    发表于 08-28 11:10 0次下载
    CAN转<b class='flag-5'>I2C</b>桥接器

    使用C2000 I2C模块连接EEPROM

    电子发烧友网站提供《使用C2000 I2C模块连接EEPROM.pdf》资料免费下载
    发表于 08-27 09:53 0次下载
    使用<b class='flag-5'>C</b>2000 <b class='flag-5'>I2C</b><b class='flag-5'>模块</b>连接EEPROM

    I2C逻辑选型指南

    电子发烧友网站提供《I2C逻辑选型指南.pdf》资料免费下载
    发表于 06-20 16:20 1次下载

    什么是I2C协议 I2C总线的控制逻辑

    在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。
    发表于 03-12 09:17 967次阅读
    什么是<b class='flag-5'>I2C</b>协议 <b class='flag-5'>I2C</b>总线的控制逻辑

    i2c接口由哪几根线组成 i2c接口可以接哪些器件

    I2C接口的线路可以适应不同的系统需求和器件规格,因此具体的线路配置可能会有所不同。但通常来说,时钟线(SCL)和数据线(SDA)是I2C接口的核心线路。
    的头像 发表于 03-05 16:55 3655次阅读
    <b class='flag-5'>i2c</b>接口由哪几根线组成 <b class='flag-5'>i2c</b>接口可以接哪些器件

    GD32 MCU硬件I2C不可靠不如软件I2C?来看看红枫派开发版的硬件I2C驱动如何做到稳得一批

    在一个评论中,看到网友对硬件I2C的讨论,硬件I2C Busy找不到原因、软件I2C稳得一批。
    的头像 发表于 02-23 09:37 2710次阅读
    GD32 MCU硬件<b class='flag-5'>I2C</b>不可靠不如软件<b class='flag-5'>I2C</b>?来看看红枫派开发版的硬件<b class='flag-5'>I2C</b>驱动如何做到稳得一批

    如何配置TC38x I2C中断?

    我们的项目有 MCAL,但是 Loader 只是一个 while 循环,不要使用操作系统模块。 我们已经通过轮询模式实现了 I2C 通信,然后我们想切换到中断模式。 我们如何 CAN 通过寄存器
    发表于 01-29 07:42

    蓝牙串口通讯总线——I2C/SPI/UART

    Sensor、Touch、蓝牙模块、WIFI模块等也都兼容这三种通信协议的1种以上。那么这三条通信总线有什么区别呢?工业物联网无线通信专业厂商为您一一细说—— I2C:半双工、同步、串行传输,物理上只有两根线(SDA/SCL);
    的头像 发表于 01-22 09:41 1476次阅读
    蓝牙串口通讯总线——<b class='flag-5'>I2C</b>/SPI/UART