DM642学习中的CSL库函数列举 不错.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DM642学习中的CSL库函数列举 不错 DM642 学习 中的 CSL 库函数 列举
- 资源描述:
-
DM642学习中的CSL库函数列举zz 1、 CSL命名规则 类型 命名规则 函数 PER_funcName() 变量 PER_varName 宏 PER_MACRO_NAME Typedef类型 PER_Typename 函数传递参数 funcArg 结构体成员 memberName ² 所有函数、变量、宏及数据类型都是以“PER_“开始,其中PER是模块或外设的名字 ² 外设名后面的函数名,用小写字母表示;只有当函数包括两个单词时才能用大写字母如PER_getConfig() ² 外设名后面的宏名要用大写;如DMA_PRICTL_RMK ² 数据类型用大写字母开头;如DMA_Handle 注意:CSL库中每个寄存器和每个域的宏名和常量名都定义在了CSL文件中,因此,在重新定义时不要重名,由于许多CSL函数都已在CSL库中定义,因此在创建自己的函数时也要当心。 2、 CSL 数据类型 数据类型 描述 Uint8 unsigned char Uint16 unsigned short Uint32 unsigned int Uint40 unsigned long Int8 char Int16 short Int32 int Int40 long 3、 CSL函数 Function Description handle=PER_open( channelNumber [priority] Flags) 打开一个外设通道,根据flag进行操作,在使用通道前必须先调用该函数,返回值将在下面的API调用中唯一的标识设备名称 注:[priority]参数只适用于DAT模块 PER_config( [handle,] *configStructure) 将配置结构体的值写入外设寄存器,可以用整数常量、整数变量、CSL标识常量PER_REG_DEFAULT等初始化配置结构体 PER_configArgs( [handle,] regval_1 . . regval_n) 将一系列值(regval_n)写入外设寄存器中 参数可以是整数常量、整数变量、CSL标识常量PER_REG_DEFAULT等 PER_reset ( [handle]) 将一个外设复位成上电初的默认值 PER_close ( handle ) 关闭由PER_open()函数打开的通道,此时,通道寄存器的值复位成上电默认值,并且所有未被处理的中断会被清除。 ü []表示可选项 ü [handle]只有那些基于描述符的外设使用(如DAT、DMA、EDMA、GPIO、McBSP和TIMER) ü [priority]只有在DAT模块中才有用 4、 CSL宏 注: PER代表一个外设(如DMA) REG代表一个寄存器名(如PRICTL0) FIELD代表寄存器中的一段域(如ESIZE) regval代表一个整型常量、整型变量、一个符号常量(PER_REG_DEFAULT) x代表一个整型常量、整型变量 sym代表一个符号常量 一般的CSL宏 Macro Description PER_REG_RMK( Fieldval_n……fieldval_0) 将值存储到外设寄存器中,基于域构造值时,_RMK宏更加简化 有以下规则: 1、 只能包括那些可写的域 2、 首先指明的域参数做为最重要的位 3、 无论是否可用,所有可写域的值都必须被包括 PER_RGET ( REG ) 返回外设寄存器中的值 PER_RSET(REG, regval) 将值写入外设寄存器 PER_FMK(REG,FIELD,fieldval) PER_FGET(REG,FIFELD) 返回外设寄存器中指定域中的值 PER_FSET(REG,FIELD,fieldval) 将值写入寄存器指定域中 PER_REG_ADDR(REG) 如果可用,将得到寄存器REG的存储地址 PER_FSETS(REG,FIELD,sym) 将符号值写入寄存器指定域 PER_FMKS(REG,FIELD,sym) 类似于PER_FMK 一般基于handle的宏 Macro 描述 PER_ADDRH(h,REG) 返回handle代表的寄存器地址 PER_RGETH(h,REG) 返回handle代表的寄存器中的值 PER_SGETH(h,REG,x) 将值写入handle代表的寄存器中 PER_FGETH(h,REG,FIELD) 返回handle代表的域中的值 PER_FSETH(h,REG,FIELD,x) 将值x写入到handle代表的域中 PER_FSETSH(h,REG,FIELD,SYM) 将符号值写入handle代表的域中 DSP总结-C语言环境(转帖) 1.C语言软件开发过程 软件开发过程涉及编译器(compiler),汇编器(assembler),连接器(linker),归档器(archiver),建库器(library-build utility),运行支持库(run time support library),HEX转换器(hex conversion utility),交叉引用列表器(cross reference lister),绝对列表器(absolute lister)等。其大都设置既可通过命令,也可通过ccs的project\build options设置。 1>.编译器:对C语言源代码进行编译,产生汇编语言源代码。 一步编译:cl2000 –v28 [-options] filenames [object files] [-z [link_options]] 分布编译:文法分析: 生成file.if的中间文件 ac2000 file.c 代码优化: 生成file.opt的文件 opt2000 file.if 代码生成: 生成file.asm的汇编文件 cg2000 file.opt 汇编: 生成file.obj目标文件 asm2000 file.asm 2>.汇编器:把汇编语言源文件翻译成机器语言目标文件,机器语言格式为公用目标格式(COFF)。具体命令格式如下: asm2000 Version [input file [object file [listing file]]] [options] 3>.连接器:把多个目标文件组合成单个可执行目标模块。它一边创建可执行模块,一边完成重定位以及决定外部参考。连接器的输入是可重定位的目标文件和目标库文件.具体命令格式如下: 汇编语言:lnk2000 [options] filename1,filename2……[filenamen] C语言:lnk2000 {-c|-cr} filenames [options] [-o name.out] [lnk.cmd] [-l libname,lib] 注: -c 运行时自动初始化变量 -cr 载入程序时自动初始化变量 options: 详见手册。 -o name.out 生成的输出文件名 lnk.cmd 连接的cmd文件名 -l libname.lib 连接的运行支持库名 例:lnk2000 –c prog1 prog2 prog3 –o prog.out rts2800.lib 4>.归档器(Archiver) 归档器Archiver可以用来对文档(Archive)或者库(library)中的文件进行分离和合并。这些文档或库可以是源文件库,也可以时目标文件库。归档器可以对库进行新建,添加,删除,替换,提取等操作,具体命令格式如下: ar2000 [-]command [options] libname [filename0,filename1,……filenamen] 1> 此命令针对TMS320F2812而言,其他类DSP命令以及格式略有不同,可详查TI的文档。此命令所在目录在\CCS_v3.1\C2000\cgtools\bin 2> command: @ 使用CMD文件 a (add) 向指定文档中添加指定文件 d (delete) 删除指定文档中的指定文件 r (replace) 替换指定文档中的指定文件 t (table) 列出指定文档中的文件 x (extract) 提取指定文档中的指定文件 3> options: q(quiet) 屏蔽状态信息 s(symbol) 列出库中定义的全局符号(对命令a,r,d无效) u 替换文件时同步更新修改日期 v(verbose) 提供详细的描叙 4> libname 指定的文档名 5> filename 文档中指定的文件名 5>.建库器(library-build utility): 建立满足你自己要求的运行支持库.CCS中提供有rts库文件(\CCS_v3.1\C2000\cgtools\lib),并提供了对应的源程序文件rts.src(\CCS_v3.1\C2000\cgtools\lib)。如:rts2800.lib:C/C++运行支持库;rts2800_ml.lib C/C++大内存模式运行支持库;用户可以利用归档器和建库器对rts.src中的文件进行提取,修改等操作,并重新生成自己需要的库文件。 命令的具体格式如下: mk2000 –v28 [options] src_arch1 [-l objlib1] src_arch1 [-l objlib1]…… 6>.运行支持库(run time support library): 它包括C编译器所支持的ANSI标准运行支持函数、编译器公用程序函数、浮点运算函数和C编译器支持的I/O函数. CCS中提供有rts库文件(\CCS_v3.1\C2000\cgtools\lib),并提供了对应的源程序文件rts.src(\CCS_v3.1\C2000\cgtools\lib)。如:rts2800.lib:C/C++运行支持库;rts2800_ml.lib C/C++大内存模式运行支持库.库文件包括标准的C/C++运行支持库函数,浮点运算程序,系统启动程序_c_int00. 7>.HEX转换器(hex conversion utility): 它把COFF目标文件转换成TI-Tagged、ASCII-hex、 Intel、 Motorola-S、或 Tektronix 等目标格式,可以把转换好的文件下载到EPROM编程器中. hex2000 [-options] filename -a ASCII-HEX -i Intel -t Ti-Tagged -m Motorola-S -x Tektronix 8>.交叉引用列表器(cross reference lister): 它用连接的目标文件产生参照列表文件,可显示符号及其定义,以及符号所在的源文件. xref2000 [options] [input filename [output filename]] options: -lxx 每页显示xx行(十进制数) -q(quiet) 不显示提示消息 input filename obj文件 output filename 生成的xrf文件 9>.绝对列表器(absolute lister): 它输入连接后的目标文件,输出.abs文件,通过汇编.abs文件可产生含有绝对地址的列表文件。如果没有绝对列表器,这些操作将需要冗长乏味的手工操作才能完成。 abs2000 [-options] input file options: -e 改变缺省的文件后缀名 -ea[.]asmext asm->asmtxt -ec[.]cext c->ctxt -eh[.]hext h->htxt -ep[.]cppext cpp/cc/cxx ->ptxt -fs 指定输出文件目录。如:–fs C:\ABSDIR -q 不显示提示消息 input file .out文件 例如:abs2000 –ea s –ec csr –eh hsr hello.out生成文件hello.s(hello.asm),hello.csr(hello.c),hello.hsr(hello.h). 李现路:在DSP6000中怎样编写您的第一个程序 一、C语言编写详解 1.工程目录最好放在: CCStudio_v3.3\MyProjects路径下 2.CSS下和DSP6000编程紧密相关的目录结构: a.CCStudio_v3.3\C6000\csl\include ---DSP6000常用头文件 b.CCStudio_v3.3\C6000\csl\lib ---DSP6000常用库文件 c.CCStudio_v3.3\C6000\cgtools\bin --各种编译工具 3.我们要编写的程序结构: a.含有main()函数的.c的源文件,而且这个文件的名字最好以main结尾 b.添加.cmd文件:内存的分配 c.添加.asm文件:中断向量表的文件 d.常用头文件: e.常用库文件: 4. 含有main()函数的.C的主文件的书写规范: .c的源文件完整内容如下: #include <stdio.h> //#include <string.h> #include <stdlib.h> //stdlib 头文件里包含了C语言的一些函数,该文件包含了的C语言标准库函数的定义 #include <csl.h> //调用CSL库函数头文件,CSL作用是用于配置、控制和管理DSP片上外设,C6000 DSP设计了自己的CSL库 #include <std.h> //包含了C语言的一些符号常量 #include <csl_irq.h> //CSL中配置中断请求的头文件 #include <csl_chip.h> //CSL库函数中芯片配置头文件 #include "dm642.h" //dm642常用配置 #include "rtciic.h" //晶振总线配置,rtc即晶振,IIC即总线, #include "eeprom.h" //EEPROM的配置,EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。 #include "io&led.h" //输入输出及led配置 #include "dm642_ide.h" //IDE接口配置,IDE(Integrated Drive Electronics),即电子集成驱动器, #include "dm642_flash.h" //flash存储器配置 #include "dm642_uart.h" //通用异步收发传输器的配置,UART通常用在与其他通讯协定(如RS-232)的连结上 extern far void vectors(); //调用中断向量表 static GPIO_Handle hGpio; //GPIO句柄 void main() { /*-------------------------------------------------------*/ /* perform all initializations,开始初始化 */ /*-------------------------------------------------------*/ DM642_init(); /*----------------------------------------------------------*/ /*中断向量表的初始化*/ IRQ_globalDisable(); //Point to the IRQ vector table,指向中断向量表 IRQ_setVecs(vectors); /*----------------------------------------------------------*/ hGpio = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET); GPIO_reset(hGpio);////GPIO复位 //GPIO_config(hGpio,&MyGPIOCfg),GPIO的配置; GPIO_pinEnable(hGpio,GPIO_PIN15); //GPIO_PIN15管脚使能 GPIO_pinEnable(hGpio,GPIO_PIN4); GPIO_pinEnable(hGpio,GPIO_PIN5); GPIO_pinEnable(hGpio,GPIO_PIN6); GPIO_pinEnable(hGpio,GPIO_PIN7); GPIO_pinDirection(hGpio,GPIO_PIN15,GPIO_OUTPUT);//GPIO_PIN15管脚输出信号 GPIO_pinDirection(hGpio,GPIO_PIN4,GPIO_OUTPUT); GPIO_pinDirection(hGpio,GPIO_PIN5,GPIO_OUTPUT); GPIO_pinDirection(hGpio,GPIO_PIN6,GPIO_OUTPUT); GPIO_pinDirection(hGpio,GPIO_PIN7,GPIO_OUTPUT); while(1) { GPIO_pinWrite(hGpio,GPIO_PIN15,0); //输出0低电平,灯亮 DM642_waitusec(0x10000); //等待10000微妙,1秒=1000000微秒 GPIO_pinWrite(hGpio,GPIO_PIN15,1); //输出1高电平,灯灭 DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN4,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN4,1); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN5,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN5,1); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN6,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN6,1); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN7,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN7,1); DM642_waitusec(0x10000); //这个程序是控制了GPIO15,GPIO4-7的高低电平 } } .c的源文件编写规范如下: a.首先引用头文件:头文件含有初始化设备的必要的接口函数,宏定义等 b.调用中断向量表: c.static:不被编译器优化,常用于句柄的修饰 d.自定义的函数可放在main()的前面或后面。 外部函数:自己定义的函数,引用外部的文件定义的函数 内部函数:DSP6000内部定义了的函数就是内部函数 e.DSP6000中的数据格式一般为十六进制。 f.主要while循环---while(1),while(0)的区别 二、.cmd文件要点讲解: 内存分配文件的源代码如下: MEMORY { boot: o = 00000000h l = 000400h /* all SRAM,在片内SRAM中保留一块Boot空间*/ L2 : o = 00000400h l = 0003fb00h /* all SRAM ,L2,为DSP片内存储器,是第2级存储器[第一级存储器包括独立的程序Cach(L1P)和数据Cach(L1D) ],它是一个统一的空间,部分程序和数据,统称为L2,可以作为普通的SRAM映射到存储空间 */ CE01: o = 80000000h l = 00100000h /* external memory */ CE02: o = 80100000h l = 00f000000h /* external memory */ } SECTIONS { .boot_load > boot /*引导程序入口映射到该boot空间*/ .vecs > L2 /*映射ves_dm642.asp中定义的.vecs到L2空间*/ .cinit > L2 /*初始化变量和常数表*/ .text > L2 /*可执行代码段的映射*/ .stack > L2 /*为系统堆栈分配存储器。该段用于将变量传递至函数或者用来分配局部变量。*/ .bss > L2 /*保留全局和静态变量空间。在启动和导入的时候,C/C++编译器会启动程序将.cint段中的数据复制出来,以初始化.bss段中的变量。*/ .const > L2 /*包含由C/C++限定词const定义的字符串常量和数据*/ .data > L2 /* 初始化数据段*/ .far > L2 /*供外部文件调用的变量*/ .switch > L2 /*控制语句段映射*/ .sysmem > L2 /*初始化系统空间*/ .tables > L2 /*初始化数据表*/ .cio > L2 /*io口*/ .external > CE02 /*外部变量的初始化*/ } 1、 cmd文件要点 a.boot:仿真的时候boot可以不配置,在把程序烧写到flash中时要配置,他的作用是 放bootload引导程序 b.怎样划分空间:o-origin 起始地址;l-length;区块的标记可以任意改,长度不可以 超越最终的空间地址 c.划分内存,不一定全部划分 2、.cmd文件之Section分析 C/C++的编译环境包含以下段 已初始化段: (1).cinit段:包含初始化变量和常量表 (2).const段:const定义的字符串常量和数据(他们不能同时被volatile定义) volatile--不能被编译器优化 (3).switch段:包含跳转表和大的switch声明 (4).text段:可执行代码段 未初始化段: (1).bss段:保留全局和静态变量空间 (2).far段:保留远程的全局和静态变量空间 (3).stack段:为系统堆栈分配存储器。用于将变量传递至函数或用来分配 局部变量 (4).system段:为动态存储器函数malloc,calloc,realloc分分配存储器空间。 如果程序没有用到上面的函数,就不会创建.system段 所有我们的内存分配,应该尽量包含上面的初始化段和未初始化段中所定义的段。 三、完整的中断向量表程序如下: .global _vectors ;定义一个能被外部(C语言程序)引用的变量 .global _c_int00 .global _vector1 .global _vector2 .global _vector3 .global _vector1 .global _vector5 .global _vector6 .global _vector7 .global _vector8 .global _vector9 .global _vector10 .global _vector11 ; Hookup the c_int08 ISR(连接这个中断设置寄存器) in main() .global _vector12 ; Hookup the c_int08 ISR in main() .global _vector13 .global _vector14 .global _vector15 *------------------------------------------------------------------------------ * Global symbols referenced in this file but defined somewhere else. * Remember that your interrupt service routines need to be referenced here. *------------------------------------------------------------------------------ .ref _c_int00 ;reset ISR(复位中断设置寄存), .ref表明一个或多个在另一个模块中定义而在前模块中要用到的符号 *------------------------------------------------------------------------------ * This is a macro that instantiates one entry in the interrupt service table. *------------------------------------------------------------------------------ VEC_ENTRY .macro addr ;中断返回函数 STW B0,*--B15 MVKL addr,B0 MVKH addr,B0 B B0 LDW *B15++,B0 NOP 2 NOP NOP .endm *------------------------------------------------------------------------------ * This is a dummy interrupt service routine used to initialize the IST. *------------------------------------------------------------------------------ _vec_dummy: ;初始化IST寄存器(中断向量表起始地址寄存器,用于设置中断服务程序存放的地址) B B3 NOP 5 *------------------------------------------------------------------------------ * This is the actual interrupt service table (IST). It is properly aligned and * is located in the subsection .text:vecs. This means if you don't explicitly * specify this section in your linker command file, it will default and link * into the .text section. Remember to set the ISTP(中断向量表起始地址寄存器) register to point to this * table. *------------------------------------------------------------------------------ .sect ".vecs" ;定义初始化带名称的段 .align 1024 ;分配程序页 _vectors: _vector0: VEC_ENTRY _c_int00 ;RESET(应用程序的入口) _vector1: VEC_ENTRY _vec_dummy ;NMI(非屏蔽中断,用于处理极为关键的任务) _vector2: VEC_ENTRY _vec_dummy ;RSVD _vector3: VEC_ENTRY _vec_dummy _vector4: VEC_ENTRY _vec_dummy _vector5: VEC_ENTRY _vec_dummy _vector6: VEC_ENTRY _vec_dummy _vector7: VEC_ENTRY _vec_dummy _vector8: VEC_ENTRY _vec_dummy _vector9: VEC_ENTRY _vec_dummy _vector10: VEC_ENTRY _vec_dummy _vector11: VEC_ENTRY _vec_dummy ; Hookup the c_int08 ISR in main() _vector12: VEC_ENTRY _vec_dummy ; Hookup the c_int08 ISR in main() _vector13: VEC_ENTRY _vec_dummy _vector14: VEC_ENTRY _vec_dummy _vector15: VEC_ENTRY _vec_dummy 完整版本请见 曙海教育 曙海嵌入式学院3G通展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




DM642学习中的CSL库函数列举 不错.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/6920786.html