1 / 83

TMS320C55X 的片内集成外设开发及测试

TMS320C55X 的片内集成外设开发及测试. C55x 片内外设与芯片支持库简介 时钟发生器 通用定时器 外部存储器接口 主机接口( EHPI ) 多通道缓冲串口 McBSP 通用输入 / 输出端口 GPIO DMA 控制器 I 2 C 总线 多媒体卡控制器 通用串行总线( USB ) 模 / 数转换器( ADC ) 实时时钟( RTC ) 看门狗定时器( Watchdog ) 异步串口( UART ). C55x 的片内外设分类. 时钟与定时器 时钟产生器 产生 CPU 的工作时钟,并提供 CLKOUT 时钟输出;

shayla
Download Presentation

TMS320C55X 的片内集成外设开发及测试

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TMS320C55X的片内集成外设开发及测试 C55x片内外设与芯片支持库简介 时钟发生器 通用定时器 外部存储器接口 主机接口(EHPI) 多通道缓冲串口McBSP 通用输入/输出端口GPIO DMA控制器 I2C总线 多媒体卡控制器 通用串行总线(USB) 模/数转换器(ADC) 实时时钟(RTC) 看门狗定时器(Watchdog) 异步串口(UART)

  2. C55x的片内外设分类 • 时钟与定时器 • 时钟产生器 • 产生CPU的工作时钟,并提供CLKOUT时钟输出; • 通用定时器、时时钟以及看门狗定时器 • 通过计数器为系统提供定时时钟和年、月、日、时、分、秒等时钟信号,以及监控系统正常运行的看门狗时钟,并能发出相应中断 • 外部设备连接接口 • 外部存储器连接接口 • 用来同并行存储器连接、同外部并行设备进行连接 • 主机接口 • 用来对DSP进行控制、程序加载、数据传输等工作

  3. 信号采集 • 采集模拟信号的模/数转换器 • 提供数字信号输入、输出功能的通用输入/输出接口 • 通信接口 • 多通道缓冲串口、I2C接口、异步串口、USB接口以及多媒体卡/SD卡接口 • 其他外设 • DMA控制器、指令流水线等 • 辅助CPU工作,提高DSP的工作效率

  4. 片上外设支持库特点: • 采用标准协议对外设进行编程 • 数据类型 • 定义外设配置的宏定义 • 实现各种外设操作的函数 • 基本资源管理 • 设备的符号描述

  5. 时钟发生器 时钟输出 时钟模式寄存器CLKMD 时钟模式寄存器

  6. 工作模式 • 旁路模式(BYPASS) • BYPASS DIV=00,输出时钟信号的频率与输入信号的频率相同,即一分频 • BYPASS DIV=01,输出时钟信号的频率是输入信号频率一半,即二分频 • BYPASS DIV=1x,输出时钟信号的频率是输入信号频率1/4,即四分频 • 锁定模式(LOCK)

  7. CLKOUT输出 • 频率由系统寄存器(SYSR)中的CLKDIV确定: • CLKDIV=000b,CLKOUT的频率等于CPU时钟的频率 • CLKDIV=001b,CLKOUT的频率等于时钟的频率的1/2 • CLKDIV=010b,CLKOUT的频率等于时钟的频率的1/3 • CLKDIV=011b,CLKOUT的频率等于时钟的频率的1/4 • CLKDIV=100b,CLKOUT的频率等于时钟的频率的1/5 • CLKDIV=101b,CLKOUT的频率等于时钟的频率的1/6 • CLKDIV=110b,CLKOUT的频率等于时钟的频率的1/7 • CLKDIV=111b,CLKOUT的频率等于时钟的频率的1/8

  8. 使用方法 • 省电(IDLE) • 与省电有关的位是IAI • DSP复位 • CLKMD引脚为低电平,输出频率等于输入频率; • CLKMD引脚为高电平,输出频率等于输入频率的一半 • 失锁 • 锁相环对输入时钟跟踪锁定之后,由于其他原因使其输出时钟发生偏移

  9. 使用方法及实例 • 利用库函数配置时钟发生器的方法 • 首先要声明PLL配置结构,具体声明如下: PLL_Config Config_PLL = { 1, /*iai 休眠后重新锁相 */ 1, /*iob 失锁后进入旁路模式并重新锁相 */ 6, /*pllmult CLKIN * pllmult = DSP主时钟*/ 0 /*div CLKOUT= DSP主时钟/(div+1) */ }; • 之后运行配置函数: PLL_config(&Config_PLL); 也可以通过函数设置PLL频率: PLL_setFreq (6, 1); 通过PLL_setFreq函数可以复位PLL锁相环,并改变倍频和分频数从而得到所需的频率

  10. 时钟发生器的调试 • 检查DSP的时钟输入引脚CLKIN、时钟输出引脚CLKOUT和时钟模式引脚CLKMD连接是否正确,正常情况下CLKIN应接时钟源,而CLKMD应拉高或拉低,CLKOUT应是信号输出引脚 • 系统加电后测量CLKIN引脚时钟输入是否正常,信号的高低电平及占空比是否满足需要 • 在没有进行软件设置的情况下,DSP在复位后CLKOUT的输出直接受CLKMD控制,当CLKMD为高,CLKOUT的输出频率将等于CLKIN的频率,CLKMD为低,则CLKOUT输出将等于CLKIN的频率的1/2 • 如果以上步骤运行正常,则利用软件设置CLKMD寄存器,使时钟产生器工作于PLL锁相环模式下,此时再检测CLKOUT信号,查看锁相环是否正常工作

  11. 通用定时器 结构框图—20位的定时器

  12. 定时器的工作模式 • 当FUNC=00b时,TIN/TOUT为高阻态,时钟源是内部时钟(CPU时钟)。 • 当FUNC=01b时,TIN/TOUT为定时器输出,时钟源是内部时钟(CPU时钟)。 • 当FUNC=10b时,TIN/TOUT为通用输出,时钟源是内部时钟(CPU时钟)。 • 当FUNC=11b时,TIN/TOUT为定时器输入,时钟源是外部时钟

  13. 使用方法 • 初始化定时器 • 停止计时(TSS=1),定时器装载使能(TLB=1),并将周期寄存器(TIM,PSC)的内容复制到计数寄存器(PRD,TDDR); • 将预定标计数周期数写入TDDR; • 将主计数器周期数装入PRD; • 关闭定时器装载(TLB=0),启动计时(TSS=0) • 停止/启动定时器 • TSS=1,停止计时 • TSS=0,启动计时 • DSP复位

  14. 通用定时器的应用 • 首先定义通用定时器句柄和配置结构: TIMER_Handle hTimer; TIMER_Config Config_TIMER = { 0X0310, /*; 载入TCR0t:; IDLE_EN = 0 (不允许空闲状态); FUNC = 00b (引脚为高阻态) ; TLB = 0 (TLB 被清除); FREE = 1 (遇到断点时时钟不停止) ; PWID = 00b (脉冲延迟一个CPU 时钟周期) ; ARB = 1 (当TIM计数到0时重新载入TIM和PSC) ; TSS = 1 (停止计数器); C/P = 0 (引脚输出为脉冲模式) ; POLAR = 0 (引脚信号开始为低); 其他为0 */ 0X197, /* prd = 407 */ 0X0007 /* prsc = 7 TDDR=7 */ //; 计数器每3264(408*8) 个时钟周期输出: };

  15. 接下来打开句柄: hTimer = TIMER_open(TIMER_DEV0,0); //设置计数器0,中断20K/s 调用定时器配置函数对计数器初始化: TIMER_config(hTimer,&Config_TIMER); 调用定时器开始函数使定时器开始工作: TIMER_start(hTimer); 如果在程序中需要暂时停止定时器计数可以调用定时器停止函数: TIMER_stop(hTimer); 当使能定时器中断时,则当定时中断发生时将运行定时中断服务程序: interrupt void Timer0_Isr() { …… }

  16. 通用定时器的调试 • 设定通用定时器的时钟源,通用定时器的时钟源可以是CPU时钟,也可由外部信号提供,如果选择外部时钟,则需要将这个信号从TIN/TOUT引脚引入,应当注意此时TIN/TOUT引脚将不能够作为定时器输出使用。 • 正确设置定时器寄存器值,使定时器开始工作。 • 在定时器中断服务程序中设置断点,看能否进入定时中断,如果定时器的时钟源是CPU时钟,这时也可以将定时器信号从TIN/TOUT引脚输出,通过示波器检测定时器输出是否正常。

  17. 外部存储器接口 功能与作用

  18. 外部寄存器接口硬件连接与配置 • 异步存储器接口 • 同步突发静态存储器(SBSRAM) • 同步突发动态存储器(SDRAM) C55x与一片64Mbit(16位宽)SDRAM的连接

  19. C55x与一片64Mbit(32位宽)SDRAM的连接 C55x与一片128M位(x32)SDRAM的连接

  20. 外部寄存器接口的软件设置 主机接口(EHPI)

  21. EHPI接口的非复用连接方式

  22. EHPI接口的复用连接方式

  23. EHPI口的寄存器 • 数据寄存器(HPID) • 16位寄存器,用来存放输入/输出的数据 • 地址寄存器(HPIA) • 16位或20位寄存器 • 控制寄存器(HPIC) • 控制数据的传输

  24. 多通道缓冲串口McBSP • 功能和特点 • 全双工通信; • 双缓冲数据寄存器,允许传送连续的数据流; • 独立的收发时钟信号和帧信号; • 可用128个通道进行收发; • 可与工业标准的编解码器、模拟接口芯片(AICs)以及其他串行A/D、D/A芯片直接接口连接; • 能够向CPU发送中断,向DMA控制器发送DMA事件 • 具有可编程的采样率发生器; • 可设置帧同步脉冲和时钟信号的极性; • 传输的字长可以是8位、12位、16位、20位、24位或32位 • 具有µ律和A律压缩扩展功能; • 可将McBSP引脚配置为通用输入/输出引脚

  25. McBSP的结构框图

  26. 采样率发生器 • 产生内部数据时钟CLKG和内部帧同步信号FSG

  27. 多通道选择 • 接收多通道选择 • 由MCR1中的RMCM位确定 • 通道可以独立地被使能或禁止,使能通道的选择由接收通道使能寄存器RCER确定 • 如果某个接收通道被禁止,在这个通道上接收的数据只传输到接收缓冲寄存器RBR中,并不复制到DRR,因此不会产生DMA同步事件 • 发送多通道选择 • 由MCR2中的XMCM字段确定 • 当XMCM=00b时,所有128发送通道使能且不能被屏蔽 • 当XMCM=01b时,由发送使能寄存器XCER选择通道,如该通道没有被选择则该通道被禁止 • 当XMCM=10b时,由XCER寄存器禁止通道,如果该通道没有被禁止则通道使能 • 当XMCM=11b时,所有通道被禁止用,而只有当对应的接收通道使能寄存器RCER使能时发送通道才被使能,当该发送通道使能时,由XCER寄存器决定该通道是否被屏蔽

  28. 异常处理 • 接收数据溢出 • SPCR1中的RFULL=1 • 同步帧同步信号错误 • SPCR1中的RSYNCERR=1 • 发送数据重写 • 发送寄存器空 • SPCR2中的XEMPTY=0 • 发送帧同步脉冲错误 • SPCR2中的XSYNCERR=1

  29. McBSP寄存器 • 收发通道寄存器 • 时钟和帧同步寄存器 • 主要用于控制时钟和帧同步信号的产生、收发数据帧格式和串口状态的检测等 • 多通道选择寄存器 • 多通道控制寄存器 • 两个多通道控制寄存器MCR1和MCR2 • 收发通道使能寄存器 • 有8个接收通道使能寄存器RCERA到RCERH和8个发送通道使能寄存器XCERA到XCERH

  30. 多通道缓冲串口的应用 • McBSP串口的测试 • DSP内部连接测试 • 外部设备连接测试

  31. 通用输入/输出端口GPIO • GPIO口概述 • 8个专门的通用输入/输出引脚IO0~IO7 • 引脚的方向可以由I/O方向寄存器IODIR独立地配置 • 输入/输出逻辑状态由I/O数据寄存器IODATA反映

  32. 上电模式设定

  33. 驱动程序开发 • 读取GPIO数据寄存器的例子: • int iodata; iodata = GPIO_RGET(IODATA); • 设置GPIO寄存器 • GPIO_RSET(IODIR, iodata);

  34. 通用输入/输出GPIO的测试 • 输入口测试 • 通过I/O方向寄存器IODIR设置某一个引脚为输入方向 • 在已设置为输入方向的引脚上外加LVTTL信号 • DSP访问I/O数据寄存器IODATA查,看引脚上的逻辑电平,与外加LVTTL电平进行比较,来检测输入口是否工作正常 • 输出口测试 • 通过I/O方向寄存器IODIR设置某一个引脚为输出方向 • 在I/O数据寄存器IODATA上设置这个引脚的逻辑电平 • 测量引脚的电平,与设置的逻辑电平相比较来检测输出口是否正常工作

  35. DMA控制器 • 概述 • DMA可以独立于CPU工作; • 有4个标准端口(port)与DARAM、SARAM、外部存储器和外设相连; • 一个辅助端口用于HPI和存储器之间的数据传送 • 具有6个通道; • 可以设置每个通道的优先级; • 每个通道的传输可以由选定事件触发; • 当操作完成之后,DMA控制器可向CPU发出中断

  36. 通道和端口 • DMA控制器有6个通道,用于4个标准端口之间的数据传送,每个通道可以从某个端口读取数据,也可以将数据写入某个端口 • DMA控制器的寄存器有两套: • 配置寄存器,供CPU写入所需的配置值 • 工作寄存器,供DMA工作时使用

  37. HPI的配置 • HPI和DMA通道的关系由DMAGCR寄存器中的EHPIEXCL位确定 • 当EHPIEXCL=0,HPI和DMA通道共享DARAM、SARAM和EMIF • 当EHPIEXCL=1,HPI独占DARAM和SARAM,DMA通道只能访问EMIF和外设 • DMA通道和HPI具有可编程的优先级

  38. DMA传输配置 • 数据传输单位 • 字节(Byte):一个字节是DMA通道最小的数据传输单位 • 单元(Element):若干个字节构成的数据传输单位称为一个单元 • 帧(Frame):若干个单元构成的数据传输单位称为一帧 • 块(Block):若干个帧构成的数据传输单位称为一个块 • 数据打包 • 当DST(SRC)PACK=0时,不打包; • 当DST(SRC)PACK=1时,对数据打包后再传输

  39. 端口 • 当DST(SRC)= xx00时,目的(源)端口为SARAM; • 当DST(SRC)= xx01时,目的(源)端口为DARAM; • 当DST(SRC)= xx10时,目的(源)端口为EMIF • 当DST(SRC)= xx11时,目的(源)端口为Peripheral • 数据源和目的地址 • 当DST(SRC)AMODE=00时,目的(源)地址为固定地址,用于单元的传输; • 当DST(SRC)AMODE=01时,目的(源)地址在每个单元传输完后自动增加 • 当DST(SRC)AMODE=10时,目的(源)地址在每个单元传输完后自动增加一个索引值 • 当DST(SRC)AMODE=11时,目的(源)地址在每个单元传输完后按单元索引和帧索引自动增加

  40. DMA控制器的寄存器 • DMA全局控制寄存器DMAGCR • DMA通道控制寄存器DMACCR • 源和目的参数寄存器DMACSDP • 起始地址寄存器 • 单元数量和帧数量寄存器 • 单元索引寄存器和帧索引寄存器 • 使用方法及实例

  41. I2C总线 I2C总线简介

  42. I2C寄存器

  43. I2C模块的使用(K=1024,k=1000) • 给出I2C初始化结构: • I2C_Init Init = { 0, /* 7位寻址模式 */ 0x0000, /* 自身地址(主模式下可忽略 */ 144, /* 时钟输出数(MHz) */ 400, /* 信息传递速率(10~400kbps)*/ 0, /* 接收或发送的位或字节数(8)*/ 0, /* 数字回环模式*/ 1 /* 自由操作模式*/ }; • 调用初始化函数初始化I2C模块: • I2C_init(&Init);

  44. 设置中断服务程序结构: • I2C_IsrAddr addr = { myALIsr, myNACKIsr, myARDYIsr, myRRDYIsr, myXRDYIsr }; • 调用中断向量表定位函数并将I2C中断函数指针指向中断服务程序: • IRQ_setVecs(0x10000); //将中断向量指针设置为0x10000 I2C_setCallback(&addr); //将I2C中断函数指针指向中断服务程序结构 • 使能接收就绪中断: • I2C_eventEnable(I2C_EVT_RRDY); • 打开全局中断: • IRQ_globalEnable();

  45. 多媒体卡控制器 MMC控制器与MMC/SD卡信号连接关系图 • 简介 • 支持MMC/SD协议和SPI协议; • 软件支持未来的扩展升级; • MMC控制器的运行频率可以通过程序设置; • MMC控制器与存储卡之间控制传输速率的时钟可以通过编程设置

  46. MMC/SD模式 • MMC/SD模式写 • WR CMD:批量写命令,6字节长,由DSP发给存储卡 • CMD RSP:写命令回复。是存储卡发给DSP批量写回执,通知DSP已经收到批量写命令; • DAT BLK:数据块。是DSP向存储卡写的数据,该数据块包括在开始有起始位,结束时则有两个字节的CRC校验和一个结束位; • CRC STAT:CRC状态。存储卡发给DSP的一个字节的错误校验状态信息,如果校验正确则数据被存储卡接受,错误则数据被丢弃,CRC状态的内容也需要添加起始位和结束位; • BSY:忙。CRC状态信息之后将跟随一串为低的数据流,标志着存储卡处在繁忙状态,直到数据被存到存储卡的闪存存储器中

  47. MMC/SD模式读 • RD CMD:批量读命令,6字节长,由DSP发给存储卡 • CMD RSP:读命令回复。是存储卡发给DSP批量读回执,通知DSP已经收到批量读命令; • DAT BLK:数据块。是DSP从存储卡读的数据,该数据块包括在开始有起始位,结束时则有两个字节的CRC校验和一个结束位 • 卡识别操作 • 通过命令寄存器(MMCCMD)发出GO_IDLE_STATE广播命令,使所有卡进入静止状态; • 发出ALL_SEND_CID广播命令,通知所有卡进行识别操作 • 等待卡回应,如果有卡进行回应则进行第4步,否则停止 • 从回应寄存器(MMCRSP7~ MMCRSP70)中读取CID,并通过SET_RELATIVE_ADDR命令为存储卡分配一个相应的地址; • 返回第(3)步

  48. 单块写操作 • 向参数寄存器MMCARG写入要进行写的卡的相关地址,地址的高位写入MMCARGH,低位写入MMCARGL; • 通过命令寄存器发出SELECT/DESELECT_CARD广播命令,该命令用来选择/不选某块卡; • 向参数寄存器写入目标地址; • 向数据传送寄存器写入所传送的数据块中的第一个字节; • 向存储卡发出WRITE_BLOCK命令; • 用状态寄存器0检测错误,在判断字节发送成功后,如果数据没有全部写完则进入第(7)步,如果写完了则停止; • 写入数据块的下一个字节,并返回第(6)步。

  49. 单块读操作 • 向参数寄存器写入卡的相应地址; • 通过命令寄存器发出SELECT/DESELECT_CARD广播命令,该命令用来选择/不选某块卡; • 向参数寄存器写入目标地址; • 如果块的长度同先前操作中块的长度不同,则发出SET_BLOCKLEN命令改变块的长度; • 发出READ_SINGLE_BLOCK命令; • 用状态寄存器0检测错误,在判断字节被成功的接收后,如果数据没有全部接收完则进入第(7)步,如果接收完了则停止; • 从数据接收寄存器中读取新的数据字节,并返回第(6)步

  50. 多块读操作 • 向参数寄存器写入卡的相应地址; • 如果块的长度同先前操作中块的长度不同,则发出SET_BLOCKLEN命令改变块的长度,数据块的长度必须是512字节; • 发出READ_MULT_BLOCKS命令; • 用状态寄存器0检测错误,在判断字节被成功的接收后,如果数据没有全部接收则进入第5步,如果数据接收完了则进入第(6)步; • 从数据接收寄存器中读取新的数据字节,并返回第(4)步; • 发出STOP_TRANSMISSION命令

More Related