CSL学习笔记--第二章 怎么应用CSL.doc_第1页
CSL学习笔记--第二章 怎么应用CSL.doc_第2页
CSL学习笔记--第二章 怎么应用CSL.doc_第3页
CSL学习笔记--第二章 怎么应用CSL.doc_第4页
CSL学习笔记--第二章 怎么应用CSL.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 怎么应用CSL2.1 概述外设可以通过CSL声明/初始化目标来进行配置,同时在你的C源代码中调用CSL函数。2.2 应用CSL此部分提供了一个实例来应用CSL的API,利用CSL可以有两种方式对外设编程:1.基于寄存器配置(PER_config):通过设置存储器映像寄存器中的全部变量来配置外设,相对于功能参数配置,基于寄存器配置需要很少的周期和代码长度,但不会抽象。2.功能参数配置(PER_setup):通过参数的设置配置外设。相比于基于寄存器的配置,功能参数配置需要更多的周期和代码的长度,但是更加抽象。下面这个例子是基于寄存器配置说明了用CSL初始化DMA通道0并把0x3000地址上的数据复制到0x2000。源地址:2000h目的地址:3000h传送长度: 16个16位单字节2.2.1 应用DMA_config() 函数 以下的实例和步骤是应用DMA_config()函数来初始化寄存器,本例用于C5509器件。1.加载csl.h 和含有dma外设的.不同的头文件在表1.1列出。#include #include / Example-specific initialization#define N 16 / block size to transfer#pragma DATA_SECTION(src,”table1”) /* scr data table address */Uint16 srcN = 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu, 0xBEEFu ;#pragma DATA_SECTION(dst, ”table2”)/* dst data table address */Uint16 dstN;2. 定义和初始化DMA通道配置结构体。DMA_Config myconfig = /* DMA configuration structure*/ DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST , /* Destination burst : DMA_DMACSDP_DSTBEN_NOBURST DMA_DMACSDP_DSTBEN_BURST4 */ DMA_DMACSDP_DSTPACK_OFF, /* Destination packing : DMA_DMACSDP_DSTPACK_ON DMA_DMACSDP_DSTPACK_OFF */ DMA_DMACSDP_DST_SARAM , /* Destination selection : DMA_DMACSDP_DST_SARAM DMA_DMACSDP_DST_DARAM DMA_DMACSDP_DST_EMIF DMA_DMACSDP_DST_PERIPH */ DMA_DMACSDP_SRCBEN_NOBURST , /* Source burst : DMA_DMACSDP_SRCBEN_NOBURST DMA_DMACSDP_SRCBEN_BURST4 */ DMA_DMACSDP_SRCPACK_OFF, /* Source packing : DMA_DMACSDP_SRCPACK_ON DMA_DMACSDP_SRCPACK_OFF */ DMA_DMACSDP_SRC_SARAM , /* Source selection : DMA_DMACSDP_SRC_SARAM DMA_DMACSDP_SRC_DARAM DMA_DMACSDP_SRC_EMIF DMA_DMACSDP_SRC_PERIPH */ DMA_DMACSDP_DATATYPE_16BIT /* Data type : DMA_DMACSDP_DATATYPE_8BIT DMA_DMACSDP_DATATYPE_16BIT DMA_DMACSDP_DATATYPE_32BIT */ ) /* DMACSDP */DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_POSTINC, /* Destination address mode : DMA_DMACCR_DSTAMODE_CONST DMA_DMACCR_DSTAMODE_POSTINC DMA_DMACCR_DSTAMODE_SGLINDX DMA_DMACCR_DSTAMODE_DBLINDX */ DMA_DMACCR_SRCAMODE_POSTINC, /* Source address mode : DMA_DMACCR_SRCAMODE_CONST DMA_DMACCR_SRCAMODE_POSTINC DMA_DMACCR_SRCAMODE_SGLINDX DMA_DMACCR_SRCAMODE_DBLINDX */ DMA_DMACCR_ENDPROG_OFF, /* End of programmation bit : DMA_DMACCR_ENDPROG_ON DMA_DMACCR_ENDPROG_OFF */ DMA_DMACCR_REPEAT_OFF,/* Repeat condition : DMA_DMACCR_REPEAT_ON DMA_DMACCR_REPEAT_ALWAYS DMA_DMACCR_REPEAT_ENDPROG1 DMA_DMACCR_REPEAT_OFF */ DMA_DMACCR_AUTOINIT_OFF,/* Auto initialization bit : DMA_DMACCR_AUTOINIT_ON DMA_DMACCR_AUTOINIT_OFF */ DMA_DMACCR_EN_STOP,/* Channel enable : DMA_DMACCR_EN_START DMA_DMACCR_EN_STOP */ DMA_DMACCR_PRIO_LOW, /* Channel priority : DMA_DMACCR_PRIO_HI DMA_DMACCR_PRIO_LOW */ DMA_DMACCR_FS_ELEMENT, /* FrameElement Sync : DMA_DMACCR_FS_ENABLE DMA_DMACCR_FS_DISABLE DMA_DMACCR_FS_ELEMENT DMA_DMACCR_FS_FRAME */ DMA_DMACCR_SYNC_NONE /* Synchronization control : DMA_DMACCR_SYNC_NONE DMA_DMACCR_SYNC_REVT0 DMA_DMACCR_SYNC_XEVT0 DMA_DMACCR_SYNC_REVTA0 DMA_DMACCR_SYNC_XEVTA0 DMA_DMACCR_SYNC_REVT1 DMA_DMACCR_SYNC_XEVT1 DMA_DMACCR_SYNC_REVTA1 DMA_DMACCR_SYNC_XEVTA1 DMA_DMACCR_SYNC_REVT2 DMA_DMACCR_SYNC_XEVT2 DMA_DMACCR_SYNC_REVTA2 DMA_DMACCR_SYNC_XEVTA2 DMA_DMACCR_SYNC_TIM1INT DMA_DMACCR_SYNC_TIM2INT DMA_DMACCR_SYNC_EXTINT0 DMA_DMACCR_SYNC_EXTINT1 DMA_DMACCR_SYNC_EXTINT2 DMA_DMACCR_SYNC_EXTINT3 DMA_DMACCR_SYNC_EXTINT4 DMA_DMACCR_SYNC_EXTINT5 */ ) /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_BLOCKIE_ON , /* Whole block interrupt enable : DMA_DMACICR_BLOCKIE_ON DMA_DMACICR_BLOCKIE_OFF */ DMA_DMACICR_LASTIE_ON, /* Last frame Interrupt enable : DMA_DMACICR_LASTIE_ON DMA_DMACICR_LASTIE_OFF */ DMA_DMACICR_FRAMEIE_ON, /* Whole frame interrupt enable : DMA_DMACICR_FRAMEIE_ON DMA_DMACICR_FRAMEIE_OFF */ DMA_DMACICR_FIRSTHALFIE_ON, /* HAlf frame interrupt enable : DMA_DMACICR_FIRSTHALFIE_ON DMA_DMACICR_FIRSTHALFIE_OFF */ DMA_DMACICR_DROPIE_ON, /* Sync. event drop interrupt enable : DMA_DMACICR_DROPIE_ON DMA_DMACICR_DROPIE_OFF */ DMA_DMACICR_TIMEOUTIE_ON /* Time out inetrrupt enable : DMA_DMACICR_TIMEOUTIE_ON DMA_DMACICR_TIMEOUTIE_OFF */ ), /* DMACICR */ (DMA_AdrPtr) &src, /* DMACSSAL */ 0, /* DMACSSAU */ (DMA_AdrPtr)&dst, /* DMACDSAL */ 0, /* DMACDSAU */ N, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ 0 /* DMACEI */3. 定义DMA_Handle 指针。当DMA通道打开时会调用DMA_open 初始化该句柄。DMA_Handle myhDma;void main(void) / .4. 初始化CSL库。在调用CSL模块API前必须一次性初始化CSL库。CSL_init(); /* Init CSL */5. 对于多资源外设,比如:McBSP和DMA,调用PER_open来预留资源(McBSP_open(), DMA_open().)。myhDma = DMA_open(DMA_CHA0, 0);/* Open DMA Channel 0 */默认情况下,TMS320C55xx编译器会分配说有的数据符号字地址。但对于DMA来说,期望所有的地址为字节地址,所以,你必须偏移两个地址以期实现字地址和字节地址的匹配。6. 调用DMA_config()函数配置DMA通道。myconfig.dmacssal = (DMA_AdrPtr)(Uint16)(myconfig.dmacssal)1)&0xFFFF); myconfig.dmacdsal = (DMA_AdrPtr)(Uint16)(myconfig.dmacdsal) 15) & 0xFFFF;myconfig.dmacdsau = (Uint32) &dst) 15) & 0xFFFF;DMA_config(myhDma, &myConfig); /* Configure Channel */7. 调用DMA_start()开始DMA传输。DMA_start(myhDma); /* Begin Transfer */8. 等待DMA寄存器中的FRAME状态位,传输完成。while (!DMA_FGETH(myhDma, DMACSR, FRAME) ;9. 关闭DMA通道。DMA_close(myhDma); /* Close channel (Optional) */ 2.3 利用CCS编译连接CSL为了编译连接CSL,必须配置CCS IDE工程环境。按照如下步骤完成此过程:1. 指定目标器件。(参考2.3.1部分)2. 决定是用小存储器还是大存储器同时指定你所需要的CSL和RTS库。(参考2.3.1.1)3. 创建连接命令文件(含有特定的.csldata部分),添加文件到工程中。(参考2.3.1.2)4. 确定是否使用内联(参考2.3.1.3)。本章剩余部分将会提供更多关于以上各步骤的细节和解释。注意:对于被定义包含的文件和库,CCS将会自动按照表2-1的路径进行搜索,不需要设置选项。表2-1 CSL目录结构CSL构成组件. 位于目录 Libraries c5500csllibSource Library c5500csllibInclude files c5500cslincludeExamples examplescslDocumentation docs 2.3.1 指定目标器件 按照以下的步骤指定目标器件的配置:1. 在CCS中,选择Project Options. 2. 在Build Options对话框中,选择Compiler标签(参见图2-1)3. 在Category 列表中选中Preprocessor.4. 在Define Symbols处,输入一个支持的器件代号。器件代号见第一章1-5中的表1-2。5. 点击OK 图2-1 定义目标器件2.3.1.1 大/小存储器模型选择 应用CSL要求所有的数据驻留在存储器的64K(Page0)基地址中,这是为了实现小数据存储模型的实现。在编译器中通过设置所有的XAR寄存器来初始指向在内存中.bss段所在处区域可以实现小存储模型页面的独立性。当C环境引导入口_c_int00被执行后,以上过程才会完成。 编译器接着会利用ARx寻址所有的数据存取,保持没有被影响的XARx的上部分。由于CSL是由C语言编写的,它要依赖于编译器来执行数据/外设存储器的存取来读写外设和CPU寄存器。所以在小存储器数据存储模型下,所有的外设/CPU寄存器都可以通过ARx的寻址来存取。因为外设控制寄存器和CPU状态寄存器分别驻留在I/O和数据空间基本的64K空间内,这在利用CSL的小模型编译时会迫使所有的数据进入存储器的Page0。注意这个问题只是在小模式下才会有,在用到大模式时没有此限制。如果你利用任何大模式库时,按照下面步骤定义编译器的-ml项和连接大存储器模式实时库(rts55x.lib):1. 在CCS中,选择 Project Options.2. 在Build Options对话框中,选择Compiler标签(表2-2) 3. 在Category 列表中选中advanced.4. 选择 Use Large memory model (-ml).5. 点击OK表2-2 定义大存储器模式之后还必须指定在工程中连接到的CSL和RTS库。1. 在CCS中选择 Project Options.2. 在Build Options对话框中选择Linker标签 (见表23).3. 在Category列表中选择Basic.4. 在Library search Path field (-l)填入c5500csllib (由CCS自动分配)5. 在Include Libraries (-l) field, 填入页1-5中表1-2中列出的正确的库6. 例如,如果你

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论