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

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

    关注

    2525

    文章

    48056

    浏览量

    739948
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7680

    浏览量

    344324
  • 信号处理器
    +关注

    关注

    1

    文章

    239

    浏览量

    25026
  • I2C总线
    +关注

    关注

    8

    文章

    356

    浏览量

    60398
收藏 人收藏

    评论

    相关推荐

    STM32F103系列做PMBus的主机和I2C配置上有什么区别吗?

    有没有人用STM32F103系列做过PMBus的主机呀?和I2C配置上有什么区别吗?
    发表于 03-13 07:41

    请问CCG5是通过I2C interface来进行配置吗?

    Cypress 可以通过EZ-PD Configuration utility 对 CCGX进行一系列配置,请问CCG5是通过I2C interface来进行配置吗,是否有相关的文档
    发表于 02-28 06:15

    CYPD3171怎么配置I2C地址?

    请教下,i2c地址怎么配置那描述的 在上面文档没有找到,抽空帮指点下,谢谢!
    发表于 02-27 06:32

    如何配置TC38x I2C中断?

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

    最简单的总线通讯!I2C通讯总线的原理原来这么好懂

    通讯I2C
    安泰仪器维修
    发布于 :2024年01月02日 11:16:31

    lpc1114的i2c监听模式怎么配置

    lpc1114监听i2c总线上的数据怎么配置,不作为通讯用,把总线上数据通过串口传输到电脑
    发表于 10-07 06:53

    全面掌握面试必考题I2C协议 - 第13节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:08:34

    全面掌握面试必考题I2C协议 - 第12节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:07:43

    全面掌握面试必考题I2C协议 - 第11节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:06:53

    全面掌握面试必考题I2C协议 - 第10节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:06:03

    全面掌握面试必考题I2C协议 - 第6节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:02:42

    80 第23.1讲 I2C实验-I2C协议和6U的I2C控制器详解 - 第7节 #硬声创作季

    程序代码I2C协议
    充八万
    发布于 :2023年08月17日 10:07:44

    80 第23.1讲 I2C实验-I2C协议和6U的I2C控制器详解 - 第4节 #硬声创作季

    程序代码I2C协议
    充八万
    发布于 :2023年08月17日 10:05:14

    80 第23.1讲 I2C实验-I2C协议和6U的I2C控制器详解 - 第3节 #硬声创作季

    程序代码I2C协议
    充八万
    发布于 :2023年08月17日 10:04:23

    80 第23.1讲 I2C实验-I2C协议和6U的I2C控制器详解 - 第2

    程序代码I2C协议
    充八万
    发布于 :2023年08月17日 10:03:33