本文将主要介绍C6000系列DSP的外设,分别从硬件接口特点、接口设计和接口设置等方面介绍了主机口HPI、多通道缓冲串口McBSP和直接存取控制器DMA/EDMA等外设。另外,介绍了如何利用DSP/BIOS操作系统提供的芯片支持库(CSL)访问和控制各个外设。
1 集成外设资源概述
C6000系列DSP在内部集成了丰富的外围设备(Peripherals),方便用于控制片外的存储器、主机以及串行通信设备。对于每种型号的外设资源都是不一样的,具体的需要查询该芯片的技术资料。
在C6000系列DSP中集成的外设资源有:
1.DMA与EMDA控制器
DMA、EDMA控制器最人的特点是可以在没有CPU参与的情况下完成映射存储空间中的数据搬移。这些数据搬移可以是在片内存储器、片内外设或是外部器件之间,而且是在CPU后台进行的。
C620x/C670x内部集成了DMA外设,其特点如下:
(1)DMA摔制器独立于CPU 工作,具有单周期的数据吞叶率。
(2)四个通道,外加专用的辅助通道,每一个通道对十CPU的优先级可设置。
(3)32位寻址能力,可以对存储器映射空间的任何一个区域进行访问。
(4)传送数据支持8/16/32位字长。
(5)具有灵活的地址产生方式,有单通道分割(split-channel)操作模式。
(6)每次数据块传输完毕后,可以进行DMA通道的自动初始化。
(7)传输操作可以由选择的同步事件触发。
(8)每个通道都可以触发中断事件。
C621x/C671x内部集成的是EDMA外设,其特点如下:
(1)16个通道,EDMA可以对16个通道进行彼此独立的控制。
(2)连接:EMDA通道可以被连接起来,构成一个传输链。
(3)事件同步:每一个通道都有一个特定的事件来触发。
(4)主机接口HPI。
主机口(HPI)是一个16/32位宽度的并行端口,主机可以通过它直接访问CPU的整个存储空间,包括C6000片内存储映射的外围设备。C62x/C67x HPI与CPU存储空间的互连是通过DMA控制器实现的。借助专门的地址和数据寄存器,通过DMA辅助通道,完成HPI对存储空间的访问。主机和CPU都可以对HPI控制寄存器(HPIC)进行访问,主机还可以访问HPI地址寄存器(HPIA)和HPI数据寄存器(HPID)。对于C64x器件,CPU也可以访问HPIA寄存器。
2.多通道缓冲串口McBSP
C6000的多通道缓冲串口(McBSP)是存C2x和C54x的串口的基础上发展起来的,McBSP的功能包括:
(1)全双工通信。
(2)两级缓冲数据寄存器,允许连续的数据流。
(3)收发独立的帧信号和时钟信号。
(4)可以与工业标准的编/解码器、AICs(模拟接口芯片)以及其他串行A/D,D/A接口。
(5)数据传输可以利用外部时钟,或者是片内的可编程时钟。
(6)当利用DMA、McBSP服务时,串口数据读写具有自动缓冲能力。
3.外设存储接口EMIF
EMIF是实现外设存储器与DSP无缝连接的桥梁,EMIF支持的存储器包括:
(1)同步突发静态RAM(SBSRAM)。
(2)同步动态RAM(SDRAM)。
(3)异步器件(包括异步SRAM,ROM和FIFO等)。
(4)外部共享存储空间的操作。
EMIF整个外部空间最大容量为64MB,分为4个空间(2E0~CE3,每个CE空间彼此独立,可以进行不同的访问控制,但是某些控制信号线是复用的,使用时一定要注意。数据总线宽度32bit,同时也提供8/16位存储器的读写支持。
4.扩展总线XBUS
扩展总线(XBUS)是一个32位宽度的总线,支持多种异步外设、异步或同步FIFOs、PCI接口芯片和其他类型的外部主机。在主机口接口方面,扩展总线的功能较HPI有了很大增强。XBUS提供了曲种模式,即同步和异步主机口模式。异步模式相当于一个32位的HPI,同步模式支持多种协议的接口。
目前在C6202和C6203中具有扩展总线XBUS功能。
5.自举逻辑控制
TI C6000系列DSP芯片使用多种加载方式。根据复位前管脚的状态执行相应的加载方式。目前提供的3种加载方式如下:
(1)没有BOOT处理:CPU直接从地址0处开始运行。
(2)ROM加载模式:通过DMA控制器,把存储在外部存储器里的程序加载到内部首地址0处,在加载过程中,CPU已经脱离复位状态,但是仍处于stall状态。对于C620x/C670x DSP,要求程序代码必须是以Little-Endian模式存储在外部存储器中,尤其是ROM设备。
(3)主机加载模式:在主机加载模式下,外部主机可以通过HPI接口读写访问CPU的存储空间,包括内部配置的寄存器,如EMIF控制寄存器或其他外设。一旦主机完成了所有的初始化工作后,必须置DSPINT为1,表示已经完成加载过程,同时使CPU脱离stall状态,CPU开始从地址0处运行程序。
在C6201/C6701有专门的管脚BOOTMODE[4:O]决定DSP芯片复位后运行的加载方式,而C6211/C6711是利用主机口的HD[4:0]管脚复用,C6202/C6203是利用扩展总线的XD[4:0]管脚复用。
6.定时器
(26000系列集成了32位的通用定时器。定时器的输入时钟可以由内部产生,也可以是外部时钟;可以通过输出口TOUT输出时钟。TINT和。TOUT两个管脚也可以被配置为GPIO口。定时器可以用于
(1)计时。
(2)事件计数。
(3)产生脉冲。
(4)产生CPU中断信号。
(5)产生DMA的同步信号。
2 DSP/BlOS
CCS(Code Composer Studio)是一个完整的DSP集成开发环境,所有的TI DSP都可以使用该软件进行丌发。在CCS中,不仅集成了常规的开发工具如源程序编辑器、代码生成工具(编译、连接器)以及调试环境外,还提供了DSP/BIOS开发工具。DSP/BIOS是一个可裁剪的实时操作系统,方便用户编写多任务应用程序。DSP/BIOS提供了类似于先占式的多线程运行方式、硬件驱动、实时分析和配置工具。DSP/BIOS已经是DSP开发过程中重要的工具。在本节将介绍DSP/BIOS工具的使用。
2.1 DSP/BIOS概述
DSP/BIOS是一个可裁剪的实时操作系统,本身占用很少的CPU资源,被集成在CCS开发环境里。该操作系统由TI公司免费提供。DSP/BIOS提供底层的应用函数接口,可用于支持系统实时分析、线程管理、调度软件中断、周期函数idle函数(后台运行函数)以及外部硬件中断与各种外设的管理。DSP/BIOS主要包括以下几个部分:
1.DSP/BlOS配置工具
CCS提供了DSP/BIOS GUI功能,即DSP/BIOS配置工具。使用该工具,可以静态创建和配置程序中使用的DSP/BIOS对象,也可以配置存储器分配、线程管理和中断句柄。
2.DSP/BIOS实时分析工具
DSP/BIOS提供的一个强大的实时分析工具。使用该工具可以实时观测程序的运行状况,如各个线程占用CPU运行时间、代码执行时间统计、显示输出信息等。
3.DSP/BIOS应用程序接口(API)
DSP/BIOS提供了超过150个API函数,其中有与C语言、C++语言和汇编语言接口的函数。这些API函数是为在硬件目标的嵌入式程序工作的,包括实时统计、I/O模块、软件中断管理和时钟管理等模块。由于应用程序的不同,DSP/BIOS API函数的代码长度从200~2000B不等。程序通过调用API函数米使用DSP/BIOS的资源。目前DSP/BIOS中主要的API模块有CLK模块、HST模块、HWI模块、IDL模块、LOG模块、MEM模块、PIP模块、PRD模块、RTDX模块、STS模块、SWI模块、DEC模块、SIO模块、MXB模块、QUE模块和SEM模块。
2.2 DSP/BIOS GUI配置
在DSP/BIOS的程序里,有一个DSP/BIOS的配置文什,该配置文件的后缀名为.cdb。这是一个图形界面的参数设置窗口,如图4-1所示。主要有两种功能:
(1)确定DSP/BIOS使用的各种参数。
(2)可以静态说明需要调用的DSP/BIOS模块,包括中断、任务和内部集成的外设等。
1.系统设置项
系统设置项包括全局设置、存储器段管理器、系统设置和模块钩子管理器,如图4-2所示。
在全局设置的属性窗口中可以设置正使用的DSP型号、选择使用的片级支持库CSL、Endian模式和Cache模式等多种参数。在存储器段管理器的属性窗口中可以进行系统程序存储段的管理。通过该项设置,系统将自动生成系统程序连接时使用的.cmd文件。
2.实时分析工具
实时分析工具包括LOG管理器和统计类管理器,如图4-3所示。
用户可以利用LOG模块中的事件日志来记录实时的事件。系统口志记录系统所有运行事件包括系统出错等事件。用户可以用LOG_printf或LOG_event函数在用户日志中添加消息。用户可以利用STS模块仝面了解中断、任务以及用户自己定义的代码段或函数的运行时间。
3.线程管理
DSP/BIOS是一个类似于先占式的多任务操作系统。BIOS把任务称之为线程,一个线程是一个单独的控制点,可能包含一个子程序、一个宏或者足一个函数调用。DSP/BIOS内核支持具有不同优先级的多种类型线程运行,高优先级的线程可以中断低优先级的线程,因此具有类似的先.占式特点。
DSP/BIOS提供了以下几种线程类型,优先级从高到低。
(1)硬件中断HWI(含CLK模块)。
(2)软件中断SWI(含PRD模块)。
(3)任务TSK。
(4)后台线程IDL。
线程管理的界面如图4-4所示,使用GUI可以很方便地增加/删除线程。
4.同步
同步主要的任务就是负责线程之间的协调,如同步通信、数据交换等。其中包括旗语、邮箱、队列管理和资源锁定管理等部分,如图4-5所示。
5.输入输出
DSP/BIOS内核提供了丰富的数据交换途径。利用BIOS可以方便地实现主机和DSP之间的实时数据交换(RTDX和HST)以及各种线程之间的数据交换。DSP/BIOS的PIP模块
和SIO模块将主要用于I/O数据流的缓冲,这些数据流称为线程、DSP芯片和实时外围设备提供了牢固的数据软件结构。输入输出界面如图4-6所示。
6.片级支持库
片级支持库(CSL)提供了一个C语言接口的配置和控制片内外设1具。CSL集成在BIOS里,系统程序可以使用该功能,也可以不使用。使用片级支持库(CSL)简化了DSP片上外设开发时间,可以加快项目开发进度。片剂支持库(CSL)可以预先静态设置,也可以在程序运行时动态设置。
2.3 DSP/BIOS编程实例
DSP/BIOS是一个嵌入式实时操作系统。在BIOS基础上编程与普通的编写程序不同,下面将以TI的例了来介绍BIOS的编程特点。
(1)首先新建一个BIOS配置文件。建市两个软件中断SWl0和SWll,SWl0的优先级设为1,SWll优先级设为2,如图4-7所示。
保存例子,名称为switest.cdb。
(2)新建一个工程,工程名switest.pit。把配置文件switest.cdb加入到工程文件中去,同时把switestcfg.cmd文件也加入到工程文件中。
(4)编译连接工程,打开execution graph、statistics view和message log窗口,然后运行程序。在实时分析工具中可以观察到线程SWIO和SWll运行一次,部分时间是其他线程和KNL-swi运行,如图4-8~图4-10所示。
3 TMS320C6000的HPl接口设计
本节主要介绍主机接口外设HPI,其中介绍了主机如何通过主机接口(Host-port interface,HPI)读写访问C6000的存储器资源,包括HPI的控制寄存器设置,有关信号的作用与接口等。
3.1 HPI硬件介绍
主机口(HPI)是一个16/32位宽度的并行端口,主机可以通过它直接访问CPU的整个存储空间,包括C6000片内的存储映射的外围设备。HPI与CPU存储空间的互连是通过DMA/EDMA控制器实现的。借助专门的地址和数据寄存器,通过DMA辅助通道,完成HPI对存储空间的访问。主机和CPU都呵以对HPI控制寄存器(HPlC)进行访问,另外主机可以访问HPI地址寄存器(HPIA)和HPI数据寄存器(HPID)。对于C64x器件,CPU也可以访问HPIA寄存器。
图4-11中的阴影部分是HPI在C620x/C670x整个芯片中的位置。图4-12是HPI在C621x/C671X/C64x整个芯片中的位置(阴影部分)。表4-1列出了在C6000系列芯片中HPI外设的区别。
3.2 HPI接口及其应用
在这里将仔细介绍HPI接口的特点,分析HPI接口信号和总线时序的特点,硬件接口设计和软件设计特点。
1.HPI接口与信号
主机可以通过HPI接口与CPU连接,HPI管脚信号功能如表4-2所示,详细的信号描述可以参照TI相关文档。
C6000 DSP不同芯片的HPI外设与主机接口有所不同,下面简要介绍其区别。
对于C620x/C670x芯片的HPI外设,HPI是16位宽度的并行接口,CPU可以自动地把主机连续写入的两个16位数据组合成一个32位数据。丰机把数据写入HPID寄存器,DMA辅助通道可以访问所有的CPU地址,把写入的数据存储到指定地址的存储空间中去。C620x/C670x芯片的HPI外设与主机连接框图如图4-13所示。
C621x/C671x的HPI管脚接口与C620x/C670x类似,但是不支持字节使能信号线/HBE[1:0]。C621x/C671x没有提供特殊的EDMA通道来专门进行HPI存取,而是直接将HPI与片内的地址产生单元相连,完全由硬件来处理硬件请求,如图4-14所示。
C64x芯片的HPI外设与主机连接框图如图4-15所示。C64x HPI外没有32根外部数据引脚,支持16/32位数据传输。C64x器件根据自举加载配置和器件配置决定是16位还是32位数据通道。C64x HPll6是C621x/C67lx的HPI外设增强版本。除了C621x/C67lx的HPI外设功能外,HPll6允许DSP访问HPI地址寄存器HPIA。如图4-15所示,地址寄存器HPIA分成两个寄存器,即HPIA写寄存器(HPIAW)和HPIA读寄存器(HPIAR)。HPI 32和HPI16功能类似,区别在于数据总线宽度不一样,而且HPI 32不使用 HHWIL信号线。
2.HPI总线时序
图4-16~图4-19分别给出了HPI读和写操作的时序。/HSTROBE是内部选通信号,由/HDSl、/HDS2和,HCS信号逻辑组合产生。控制信号:HCNTL[1:0]、HR/W、HHWIL和/HBE[1:0]是输入信号,由主机驱动。HCNTL[1:0]和HR/W控制对两个半字的访问。HRDY低电平表示HPI已经准备好收发数据。
/HAS信号为高电平或者没有使用,那么/HSTROBE的下降沿锁存控制信号。如果使用了/HAS信号,在/HAS的下降沿锁存控制信号。可以根据具体的情况来决定是否在接口中应用选通信号HAS,因此下面的读写时序中部各自给出了有/HAS和没有/HAS信号时的情况。
3.HPI控制寄存器
HPI外设利用3个寄存器完成主机和DSP之间的数据交换。3个寄存器分别是HPI数据寄存器(HPID)、HPI地址寄存器(HPIA)和HPI控制寄存器(HPIC)。对于C64x器件,HPI地址寄存器分为地址读寄存器(HPIAR)和地址写寄存器(HPIAW)。
HPIA中存放主机访问DSP存储空间的地址,这是一个30位值,最低2位固定为0。对于C62x/C67x,只有主机才能访问HPIA,DSP不可以访问。对于C64x,主机和DSP都可以访问HPIA寄存器,主机可以对DSP的不同存储空问进行读写操作。
HPID中存放的是主机从存储空问读取的数据,或者是主机要向DSP的存储空间写入的数据。HPIC是32位寄存器,高16位和低16位对应的是同一个物理存储区,因此高16位和低16位的内容是一样的。在写HPIC时,必须保证写入数据的高16位和低16位的内容一致。HPIC寄存器如图4-20所示,其中各位意义如表4-3所示。
4.主机访问操作顺序
主机按照以下的顺序完成对HPI的访问:
(1)初始化HPIC寄存器。
(2)初始化HPIA寄存器。
(3)从HPID寄存器读取/写入数据。
对HPI任何一个寄存器的访问,主机都需要在HPI总线上进行两次half-word的存取(第1个16位HHWIL为0,第2个HHWIL为1)。一般主机不会打断这样的两次存取,一旦打断可能会引起整个数据的丢失或者数据被破坏。如果前一次HPI的访问尚未完成,那么当前的第一个half-word的存取需要等待,此时HPI会置/HRDY信号为高。但是在第2个半字存取访问时,HRDY可以为有效状态。C64x}fPl32把两个半字组合成一个字传输。
在访问任何数据之前,必须对HPI进行初始化,包括设置HPIC和HPIA寄存器。对C62x/C67x和C64x是有所不同的。
HPI的数据传输模式有4种:
(1)不带地址白增的读操作。
(2)带地址自增的读操作。
(3)不带地址自增的写操作。
(4)带地址自增的写操作。
这些模式由HPI的HCNTL[1:O]信号以及HHWIL进行控制,具体如表4-4所示。其中的地址自增功能使主机可以很便捷地访问一个线性存储区域,而无需反复地向HPIA中写入需要的地址。
5.HP的自举加载操作
通过HPI接口也提供了相应的HPI加载方式。当CPU复位时,根据相应的加载配置,CPU进入HPI加载处理方式。在HPI加载处理方式中,DSP处在复位状念,而其他部分脱离复位状态。通过HPI接口,主机可以访问DSP的全部存储空间,包括片内外设寄存器、片内存储器和片外存储器。主机完成初始化DSP后,需要向HPI控制寄存器HPIC的DSPHlNT位写1,这样才可以使DSP脱离复位状态开始从地址0处执行程序。HPI加载处理过程如图4-21所示。
3.3 BlOS中HPI设置实例
HPI模块提供了访问HPI寄存器的API函数,其中用于访问HPI状态位和设置中断事件。对于C64x,还包括读写HPlA寄存器。在CCS中没有提供HPI设置图形用户接口。
HPI模块提供的API函数如表4-5所示。
4 TMS320C6000的McBSP接口设计
本节对多通道缓冲串口McBSP(Multi-channel Buffered Serial Port)的硬件及其操作进行介绍,包括有关的控制寄存器设置和时序图。此外,还介绍在BIOS中McBSP模块的特点和应用。
4.1 McBSP硬件介绍
C6000的多通道缓冲串口(McBSP)是在TMS320C2x/C3x/C5x和TMS320C54x串口的基础上发展起来的,McBSP的功能包括:
(1)全双工通信。
(2)双缓冲数据寄存器,允许连续的数据流。
(3)收发独立的帧信号和时钟信号。
(4)可以与工业标准的编/解码器、AICs(模拟接口芯片)以及其他串行A/D,D/A接口。
(5)数据传输可以利用外部时钟,或者是片内的可编程时钟。
(6)通过5通道的DMA控制器,串口数据读写具有自动缓冲能力。
另外,McBSP有以下特点:
(1)支持以下方式的传输接口:
■TI/E1帧协议
■MVIP兼容的交换方式以及ST—BUS兼容设备,包括:MVIP帧方式、H.100帧方 式和SCSA帧方式
■IOM-2兼容设备
■AC97兼容设备
■IIS兼容设备
■SPI设备
(2)可与多达128个通道进行收发。
(3)传输的数据字长可以是8位、12位、16位、20位、24位和32位。
(4)μ-律/A-律压扩硬件。
(5)对8位数据的传输,可选择LSB先传还是MSB先传。
(6)可设置帧同步信号和数据时钟信号的极性。
(7)内部传输时钟和帧同步信号可编程程度高。
所有的C6000器件有着同样的McBSP接口,但是C621x/C671x和C64x器件的McBSP接口却有所不同,增加了新的特色和增强功能。
4.2 McBSP接口及应用
McBSP外设具有很多强大功能,在这里将要介绍外设的信号接口、控制寄存器、时序特点以及初始化工作;同时介绍了作为SPI接口和通用IO口使用的原理和方法。对于McBSP的多通道工作模式和μ-律/A-律压扩硬件功能没有介绍,有兴趣的读者可以参照TI相关文档。
1.信号接口和寄存器
McBSP包括一个数据通道和一个控制通道,连接到外部器件。数据通过发送(DX)和接收(DR)引脚与外部器件通信,而其他的4个引脚起时钟和帧同步信号作用。C6000通过片内的外设总线访问串口的32位控制寄存器,进而实现与McBSP间的通信与控制。McBSP结构如图4-23所示。外部引脚含义如表4-6所示。
数据通道完成数据的发送和接收。CPU或DMA控制器将待发送的数据写入发送寄仔器(DXR)中,从接收寄存器(DRR)读取接收到的数据。写入DXR的数据通过发送移化寄存器(XSR)移位,从DX管脚输出。同样,DR管脚上接收到的数据先移位到接收移位寄存器(RSR)中,然后被复制到接收缓冲寄存器(RBR)中,RBR再将数据复制到DRR中,最后等候CPU或DMA控制器将数据读走。这种多级缓冲方式使得片内的数据搬移和外部数据的通信可以同时进行。
McBSP可以触发多种中断事件,中断事件可以中断CPU执行中断服务子程序:也可以产生同步事件告知DMA控制器,见表4-7。
2.数据的收发
如图4-23所示,McBSP的接收操作采用三级缓冲方式,发送操作采用两级缓冲方式。接收数据到达DR管脚后移位进入RSR,一旦整个数据单元(8位,12位,16位,20位,24位或32位)接收完毕,如果RBR寄存器末满,则RSR将数据复制到RBR中。如果DRR中旧的数据已经被CPU或DMA/EDMA控制器读走,则RBR将新的数据复制到DRR中。发送数据被CPU或DMA/EDMA控制器写到DXR。如果XSR寄存器没有数据,则DXR中的值被复制到XSR中:否则,DXR会等待XSR中旧数据完全发送完,才将数据复制到XSR中。
McBSP的复位有两种方式:
(1)一种是芯片复位,那么McBSP中发送、接收和采样时钟都同时被复位。
(2)另一种是通过设置串口控制寄存器SPCR中的相应位,单独使McBSP复位。设置/XRST使得发送复位。/RRST=0将分别使接收复位,/GRST=0将使采样速率发生器复位。
复位后,整个串口初始化为默认状态。所有计数器及状态标志均被复位,这包括接受状态标志RFULL、RRDY及RSYNCERR,发送状态标志/XEMPTFY、XRDY及XSYNCERR。器件复位和McBSP控制器复位对寄存器标志位和管脚将产生不同的影响。
RRDY和XRDY分别是McBSP接收和发送状态准备标志位。读山DRR数据和写入DXR数据都将分别对RRDY和XRDY状态位产生影响。读写串口数据有多种方式进行同步:
·轮询RRDY和XRDY状态位;
·DMA/EDMA控制器产生的同步事件(REVT和XEVT);
·CPU事件(RINT和XINT)产生的中断。
McBSP的控制信号,如时钟、帧同步和时钟源都是可以设置的。图4-24是McBSP时钟和帧同步信号的一个典型时序。时钟CLKR和CLKX对数据的接收/发送进行同步,而帧同步信号17SR和FSX则与一个数据单元传输同步。
McBSP允许对数据时钟以及帧同步信号设置参数,如下:
·FSR、FSX、CLKX、CLKR的极性
·选择单相帧或二相帧
·定义每相中数据单元的个数
·定义每相中,一个数据单元的位数
·是选择帧同步信号触发新的串行数据发送流,还是被忽略
·选择帧同步与第一个数据位之间的延迟时间,可以是0位,l位,2位延迟
·接收数据的左右调整,进行符号扩展或是填充0
对McBSP的收发部分可以各自独立地选择时钟以及帧同步配置。接收和发送的帧同步信号和时钟可以由内部或是外部产生,根据寄存器PCR、SRGR中相应位的设置而定。
3.SPl协议下的接口
McBSP中的传输时钟具有停止模式,与SPI协议的兼容。McBSP支持两种SPI传输格式,在SPCR寄存器的CLKSTP位中设置。表4-9列出了CLKSTP与CLKXP相配合,对串口时钟工作模式的控制。图4-25和图4-26分别给出了在两种SPI格式下,时钟传输接口的时序情况。
McBSP既可以作为SPI主设备又可以作为SPI从设备。作为SPI主设备时,由McBSP内部的采样率发生器产生时钟CLKX和从设备使能信号FSX.CLKX定义为输出口(CLKXM=1),FSX定义为输出口,与从设备的使能端(/SS)连接。SPI协议要求:McBSP在移位输出数据之前,FSX信号就必须有效,所以XCR寄存器中XDATDLY位必须设置为1。XDATDLY=0或2时将导致非法操作。
用户需要设置SRGR寄存器中的CLKSM位来选择采样率发生器的时钟源,以及利用CLKGDV位设置需要的SPI数据传输速率。在McBSP内部会产生一个连续的CLKX时钟,在完成传输后时钟禁止输出,从而实现传输接口所需要的时钟停止模式。因此在McBSP-端,对于发送和接收的内部操作而言,时钟信号实际上是连续的。选择时钟停止模式时,SRGR寄存器中的帧设置位(FPER和FWID)无意义。McBSP作为主设备时的接口框图如图4-27所示。
当McBSP作为SPI从设备时,由外部的主设备产生所需的时钟信号和从设备使能信号。串口按照时钟进行数据同步传输。输入的CLKX和FSX信号同时也分别作为McBSP内部接收端的CLKR信号和FSR信号。McBSP的FSX引脚信号同从设备SPI的使能信号SS要求一样,在进行数据传输之前,外部主设备必须先将FSX信号置为有效(低电平)。
图4-28是McBSP作为SPI从设备的接口框图。作为SPI从设备时,McBSP的CLKX管脚和FSX管脚配置为输入管脚(CLKXM=FSXM=0)。McBSP的RCR/XCR寄存器中的(R/X)DATDLY位必须置为0,以保证发送的第一个数据能够出现在DX管脚上,一旦检测到串行时钟CLKX有效,就可以立刻接收数据。
虽然CLKX信号是由外部主设备产牛,但是McBSP内部的采样率发生器仍必须被使能,并被设置为相应的SPI模式。内部采样时钟对输入的CLKX和FSX:信号进行同步化处理。寄存器SRGR中的CLKSM=I,指定内部采样时钟由内部CPU时钟产生。必须保证内部的CLKG信号频率至少是SPI数据传输率的8倍,比如,可以令CLKGDV=l,将采样率发生器设置为最大的速率。
设定McBSP工作在SPI模式下,需要按照以下步骤初始化寄存器:
(1)复位收发端口,将SPCR寄存器中/XRST和/RRST置为0;
(2)McBSP保持复位的状态下,设置有关的寄存器为需要的值,先设置CLKSTP=1xb;
(3)置SPCR寄存器中GRST=l,采样率发生器退出复位态,开始工作:
(4)等待两个时钟周期,以确保McBSP重新初始化;
(5)根据由CPU还是由DMA来访问McBSP,分别进行下面的设置:
·如果是由CPU进行访问,置/XRST=/RRST=1,使能串口,注意SPCR寄存器中其他 的设置值不变。
·如果是由DMA进行访问,先对DMA进行初始化,启动DMA,使之等候同步事件, 然后再将/XRST=/RRST=1,使串口退出复位态。
(6)两个数据时钟周期后,发送端和接收端进入有效状态。
4.通用I/O口
在两种情况下,串口的管脚(CLKX,FSX,DX,CLKR,FSR,DR以及CLKS)可以作为通用IO口使用:
·接收或发送处于复位状态,SPCR寄存器中(R/X) RST=0。
·串口使能为通用I/O状态,PCR寄存器中(R/X)IOEN=1。
在表4-10中详细描述了这些管脚作为通用IO口的用法,其中有几个引脚只能定义为单向IO口,这一点一定要注意。
4.3 BIOS中McBSP设置实例
在TMS320C6x系列器件里都集成了McBSP外设。不同类型的DSP芯片集成的McBSP外设个数不一样。BIOS为McBSP提供了对应的API模块。
1.BlOS中McBSP控制器API函数
同样McBSP模块基于句枘模式,完成对DSP器件McBSP外设的控制,进行串行收发数据操作。API模块包括结构定义、函数和宏。
McBSP只有一个结构,定义如下:
McBSP配置管理器创建配置对象,通过设置属性页的内容可以设置McBSP的工作方式。属性页的设置界面如图4-30所示,属性页主要包括以下几个部分:
·发送模式:中断方式、帧同步方式和时钟控制;
·发送帧和数据单元格式:相位、数据单元个数;
·接收模式:中断模式、帧同步、时钟摔制;
·接收帧和数据单元格式:相位、数据单元个数;
·采样频率发生器:采样频率发生器;
·多通道操作:数据单元和块分割:
·通用IO口:使能GPIO功能;
McBSP资源管理器中显示器件内部集成的McBSP外设个数,并对每个外设定义一个初始化的句柄名。C6202和C6203芯片支持第3个外设MCBSP_Prot2,端口和句柄对应方式如下:
·McBSP_Prot0:句柄名hMcbspO;
·McBSP_Protl: 句柄名 hMcbspl:
·McBSP_Prot2: 句柄名hMcbsp2;
通过属性页可以使能打开串口操作和用配置对象初始化串口。属性页如图4-31所示:
通过CSL GUI设置好McBSP端口后,将会分别在头文件和源文件中生成相应代码,详细可以参照附带光盘里的例子。
在csl_mcbsp.h头文件中有如下代代码