《DSP控制器原理及应用技术》第3章软件开发基础_第1页
《DSP控制器原理及应用技术》第3章软件开发基础_第2页
《DSP控制器原理及应用技术》第3章软件开发基础_第3页
《DSP控制器原理及应用技术》第3章软件开发基础_第4页
《DSP控制器原理及应用技术》第3章软件开发基础_第5页
已阅读5页,还剩54页未读, 继续免费阅读

下载本文档

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

文档简介

1、第三章第三章 软件开发基础软件开发基础工信部十二五规划教材工信部十二五规划教材DSP控制器原理与应用技术控制器原理与应用技术编写组编写组第第3章章 软件开发基础软件开发基础3.1 软件开发流程软件开发流程3.2 汇编程序开发基础汇编程序开发基础3.3 C/C+程序开发基础程序开发基础3.4 C/C+和汇编混合编程和汇编混合编程3.5 集成开发环境及其应用集成开发环境及其应用3.6 基于示例模版的驱动程序开发基于示例模版的驱动程序开发一、软件开发流程图一、软件开发流程图 3.1 软件开发流程软件开发流程二、软件开发步骤二、软件开发步骤 3.1 软件开发流程软件开发流程1. 编制源程序编制源程序

2、(1)汇编语言)汇编语言:速度快,效率高,直接控制硬件底层资源。:速度快,效率高,直接控制硬件底层资源。 (2)C语言:语言:通用性、可移植性好通用性、可移植性好 (3)混合编程)混合编程2. 产生可执行代码产生可执行代码 C工具工具:C编译器编译器(C 汇编)汇编) 汇编工具:汇编工具: 汇编器汇编器(Assembler):汇编文件):汇编文件 COFF目标文件目标文件 连接器连接器(Linker):):COFF文件文件可执行模块;可执行模块; 3. 调试代码调试代码 4. 固化代码固化代码3.2.1 寻址方式与指令系统寻址方式与指令系统一、寻址方式一、寻址方式(1)直接寻址)直接寻址访问数

3、据空间的低访问数据空间的低4M字字C28x模式:模式: 16位位DP+ 6位偏移量位偏移量=22位有效物理地址位有效物理地址C2xLP模式:模式: 9位位DP+ 7位偏移量位偏移量=16位有效物理地址。位有效物理地址。(a)AMODE=0(C28x寻址模式)寻址模式) MOVW DP, #VarA ;VarA所在页面装载所在页面装载DP ADD AL, VarA ;将将VarA的值加至的值加至AL3.2 汇编程序开发基础汇编程序开发基础(2)堆栈寻址)堆栈寻址可访问数据空间的低可访问数据空间的低64K 低低64K字作为软件堆栈,由堆栈指针字作为软件堆栈,由堆栈指针SP给出。给出。 三种方式:三

4、种方式:*-SP6bit、*SP+和和*SP-ADD AL, *-SP5 ;将(将(SP-5)堆栈单元的)堆栈单元的16位内容位内容加到加到AL中中MOV *SP+, AL ;将将16位位AL的内容压入堆栈,且的内容压入堆栈,且SP=SP+1ADD AL, *SP- ;将将16位内容弹出并加至位内容弹出并加至AL中,且中,且SP=SP-1一、寻址方式一、寻址方式(3)间接寻址)间接寻址可访问可访问4G字的数据空间字的数据空间操作数地址指定:操作数地址指定: 32位辅助寄存器位辅助寄存器XAR0XAR7工作寄存器指定:工作寄存器指定: C28x:直接在指令中给出;:直接在指令中给出; C2xLP

5、:由辅助寄存器指针:由辅助寄存器指针ARP指定。指定。五种方式:五种方式:*XARn+、*-XARn、*+XARnAR0、*+XARnAR1和和*+XARn3bit。一、寻址方式一、寻址方式(3)间接寻址)间接寻址可以访问整个可以访问整个4G字的数据空间字的数据空间MOVL ACC, *XAR2+ ;将将XAR2所指向存所指向存储单元的内容装入储单元的内容装入ACC,之后,之后XAR2+2MOVL ACC, *-XAR2 ;将将XAR2-2,然后将,然后将XAR2所指向存储单元的内容装入所指向存储单元的内容装入ACCMOVL ACC, *+XAR2AR0 ;将(将(XAR2+AR0)所指向存储

6、单元的内容装入所指向存储单元的内容装入ACCMOVL ACC, *+XAR2AR1 ;将(将(XAR2+AR1)所指向存储单元的内容装入所指向存储单元的内容装入ACCMOVL ACC, *+XAR25 ;将(将(XAR2+5)所)所指向存储单元的内容装入指向存储单元的内容装入ACC一、寻址方式一、寻址方式(4)寄存器寻址)寄存器寻址:直接访问寄存器的内容:直接访问寄存器的内容32位寻址:位寻址:ACC、P、XT、XARn等等16位寻址:位寻址:AL、AH、PL、PH、TH、T和和ARn等等 MOVL ACC, XT ;32位寄存器寻址,将位寄存器寻址,将XT寄存器的寄存器的内容装入内容装入AC

7、CADD AH, AL ;16位寄存器寻址,位寄存器寻址,AH=AH+AL(5)数据)数据/地址地址/IO空间立即寻址方式空间立即寻址方式(6)程序空间间接寻址方式。)程序空间间接寻址方式。一、寻址方式一、寻址方式3.2.1 寻址方式与指令系统寻址方式与指令系统语法:语法: 操作码操作码 目的操作数目的操作数, 源操作数源操作数操作码:操作码:指示处理器所要执行的操作;指示处理器所要执行的操作;操作数:操作数:指示指令执行过程中所需数据(或其地址)。指示指令执行过程中所需数据(或其地址)。例如:例如:ADD ACC, #16位常数位常数 allocation加载的位置。语法:加载的位置。语法:

8、 load = allocation或或 load allocation或或 allocation3. 连接器命令文件连接器命令文件 连接时可编写一个通用的连接器命令文件模板:连接时可编写一个通用的连接器命令文件模板: MEMORY:定义存储器及其地址:定义存储器及其地址; SECTIONS:将各输出段定位到相应存储区。将各输出段定位到相应存储区。 MEMEORYPAGE 0: /* 程序空间程序空间*/ ZONE0: origin = 0 x004000, length = 0 x001000 /* XINTF zone 0 */ RAML0: origin = 0 x008000, len

9、gth = 0 x001000 /* on-chip RAM block L0 */SECTIONS /* 分配程序区域分配程序区域: */ .cinit : FLASHA PAGE = 0 .pinit : FLASHA, PAGE = 0 .text : FLASHA PAGE = 03.2.4 汇编程序设计汇编程序设计一、一、 汇编伪指令汇编伪指令1. 定义段的伪指令定义段的伪指令伪指令伪指令语法语法功能描述功能描述.text.text将其后的源语句汇编至将其后的源语句汇编至.text(代码)段(代码)段.data.data将其后的源语句汇编至将其后的源语句汇编至.data(数据)段(数

10、据)段.sect.sect “段名段名”将其后源语句汇编至将其后源语句汇编至“段名段名”规定的段内规定的段内.bss.bss 符号符号,字长字长在在.bss段内保留字长(字数)段内保留字长(字数).usect符号符号 .usect “段名段名”,字长,字长在未初始化自定义段在未初始化自定义段“段名段名”中保留字长中保留字长2. 初始化常数的伪指令初始化常数的伪指令 .space 位长(在当前段内保留位长,并填位长(在当前段内保留位长,并填0) .word数值列表(将一个或者多个数值列表(将一个或者多个16位初始化数值存位初始化数值存放在当前段内连续个存储单元中。)放在当前段内连续个存储单元中。

11、)(1)语法:语法: .include“文件名文件名” 功能:通知汇编器从指定文件读取源语句。功能:通知汇编器从指定文件读取源语句。(2)语法:语法:.def/.ref/.global 符号名列表符号名列表.def(定义):在当前模块定义而在其它模块中引用(定义):在当前模块定义而在其它模块中引用.ref(引用):在当前模块引用而在其它模块中定义(引用):在当前模块引用而在其它模块中定义.global(全局):可以是以上(全局):可以是以上2种情况种情况3. 引用其它文件的伪指令引用其它文件的伪指令二、示例文件二、示例文件l 例例3.2(10+2)的汇编语言程序代码)的汇编语言程序代码* .g

12、lobal _main .text_main: MOV ACC,#10 MOV T,#2 ADD ACC,T 3.3.1 TMS320 x28xx C/C+优化编译器优化编译器1、C/C+编译器编译器支持支持ANSI C和和ISO/IET14882-1998 C+: 能将标准能将标准ANSI C/C+程序转换成相应的汇编程序。程序转换成相应的汇编程序。3.3 C/C+程序开发基础程序开发基础 C编译器中包含了运行支持库编译器中包含了运行支持库(.lib)。 2、 代码的优化代码的优化 优化目的:优化目的:提高程序执行速度,缩减程序代码。提高程序执行速度,缩减程序代码。 优化操作:优化操作:简化

13、循环、软件流水线操作、重组语句或简化简化循环、软件流水线操作、重组语句或简化表达式,变量重定位等表达式,变量重定位等 优化等级优化等级:0、1、2、3、4 数字越大,优化等级越高。数字越大,优化等级越高。一、一、C语言数据类型语言数据类型1. 变量和标识符变量和标识符: 3.3.2 C/C+编程基础编程基础2. 数据类型数据类型 二二、C语言关键词语言关键词1. interrupt关键字关键字作用:定义中断服务程序(中断函数)。作用:定义中断服务程序(中断函数)。void interrupt 函数名函数名( )2. ioport关键字关键字作用:定义作用:定义C中访问中访问IO端口空间的端口变

14、量。端口空间的端口变量。ioport 类型标示符类型标示符 端口编号端口编号端口编号为端口编号为16进制表示的进制表示的I/O端口的绝对地址。端口的绝对地址。C28xI/O空间与存储空间统一,故不使用该关键字。空间与存储空间统一,故不使用该关键字。3. volatile关键字关键字作用:避免变量被优化。作用:避免变量被优化。通知编译器每次访问被声明变量时均需从其地址读取。通知编译器每次访问被声明变量时均需从其地址读取。4. register关键字关键字作用:定义寄存器变量,以加快访问速度。作用:定义寄存器变量,以加快访问速度。二二、C语言关键词语言关键词5. cregister关键字关键字作用

15、:在作用:在C中直接访问中直接访问IER和和IFR。例如:。例如:extern cregister volatile unsigned int IER; IER|=0 x0100;volume=4.0/3.0*PI*radius*radius*radius6. inline关键字关键字作用:定义可直接插入被调用处的短小函数。作用:定义可直接插入被调用处的短小函数。inline int volume_sphere(float r)retrurn 4.0/3.0*PI*r*r*r;volume=volume_sphere(radius);7. const关键字关键字作用:保护变量或数组的值不被改变

16、。作用:保护变量或数组的值不被改变。8. far关键字关键字作用:指定作用:指定22位长度的指针位长度的指针。int far sym; /*声明声明sym位于远内存,为位于远内存,为far类型的变量类型的变量*/#pragma告诉预处理器怎样对待函数告诉预处理器怎样对待函数三三、#pragma预编译器指令预编译器指令1. CODE_ALIGN作用:为某一段程序指定特定的代码存储边界,以保证某函作用:为某一段程序指定特定的代码存储边界,以保证某函数代码存于特定位置。数代码存于特定位置。#pragma CODE_ALIGN(func, constant)#pragma CODE_ALIGN(con

17、stant)constant必须是必须是2的幂次,以保证内存边界的幂次,以保证内存边界2. CODE_SECTION:作用:为某一段程序指定特定的代码存储段,以便单独分配作用:为某一段程序指定特定的代码存储段,以便单独分配存储空间存储空间作用:为某一段数据指定特定的数据存储段,以便单独分配作用:为某一段数据指定特定的数据存储段,以便单独分配存储空间。存储空间。#pragma DATA_SECTION(symbol, “section_name”) 为变量为变量symbol在在“section_name”段内分配空间,可将段内分配空间,可将其定位至其定位至.bss以外的空间以外的空间例:例:#p

18、ragma DATA_SECTION(bufferB, “BufferB_sect”) char bufferB512;3. DATA_SECTIONSECTIONS BufferB_sect : RAML4 PAGE 14. INTERRUPT作用:指明函数为中断处理函数作用:指明函数为中断处理函数5. FAST_FUNC_CALL作用:允许在作用:允许在C/C+中直接调用汇编编写的函数。中直接调用汇编编写的函数。 调用时采用快速函数调用调用时采用快速函数调用(FFC)机制。调用更快速。机制。调用更快速。 函数返回时的函数返回时的asm代码是:代码是:LB *XAR76. FUNC_EXT_

19、CALLED作用:保证程序执行期间未调用的函数不被优化掉。作用:保证程序执行期间未调用的函数不被优化掉。 混合编程中,可用于防止汇编调用的函数被优化掉。混合编程中,可用于防止汇编调用的函数被优化掉。7. MUST_ITERATE作用:指明循环必须执行的次数,以防止循环被优化掉。语法:作用:指明循环必须执行的次数,以防止循环被优化掉。语法:四四、中断处理方法、中断处理方法 中断处理方法:中断处理方法:使用中断服务函数。使用中断服务函数。 中断函数定义方法:中断函数定义方法: 以以c_intd(d为数字)为名称定义(为数字)为名称定义(c_int00保留)保留) 利用关键字利用关键字interru

20、pt定义定义 利用利用#pragma指令指令INTERRUPT定义定义中断服务程序使用规则:中断服务程序使用规则:中断服务程序无参数。中断服务程序无参数。调用效率极低。调用效率极低。某中断提供中断服务程序时,必须将其地址赋给相应中断某中断提供中断服务程序时,必须将其地址赋给相应中断向量。向量。3.4.1 C/C+编译器运行环境编译器运行环境一、一、 C系统堆栈系统堆栈 作用:作用:存放局部变量,传递函数参数,保存处理器状存放局部变量,传递函数参数,保存处理器状态、函数返回地址、中间结果和寄存器值。态、函数返回地址、中间结果和寄存器值。 管理:管理: 硬件堆栈指针硬件堆栈指针SP、辅助寄存器、辅

21、助寄存器XAR2 。 SP:堆栈指针,指向当前栈顶:堆栈指针,指向当前栈顶 XAR2:帧指针,指向当前帧的起始地址。:帧指针,指向当前帧的起始地址。 局部帧:局部帧:每调用一次函数,在当前栈顶产生一个新的每调用一次函数,在当前栈顶产生一个新的帧,用来存放局部变量和中间值。帧,用来存放局部变量和中间值。二、二、 寄存器使用规则寄存器使用规则两种寄存器变量:保护调用环境,保护入口环境两种寄存器变量:保护调用环境,保护入口环境。 3.4 C/C+和汇编混合编程和汇编混合编程 三、三、 函数调用规则函数调用规则(1)传递参数;优先通过寄存器传递;剩余参数)传递参数;优先通过寄存器传递;剩余参数进栈进栈

22、(2)返回地址(原)返回地址(原RPC)进栈进栈(3)分配局部帧:)分配局部帧:为被调用函数分配为被调用函数分配存储空间存储空间1. 父函数执行操作父函数执行操作通过通过寄存器寄存器传递传递参数规则。参数规则。(a a)头)头4 4个浮点参数存放于寄存器个浮点参数存放于寄存器R0HR0HR3HR3H;(b b)6464位参数第一个放位参数第一个放ACCACC和和P P;(c c)3232位参数第一个放位参数第一个放ACCACC;(d d)指针型参数存放于指针型参数存放于XAR4XAR4和和XAR5XAR5;(e e)1616位参数的存放顺序为:位参数的存放顺序为:ALAL、AHAH、XAR4X

23、AR4、XAR5XAR5。其它参数以逆序压入堆栈。其它参数以逆序压入堆栈。 32 32位参数在堆栈中从偶地址开始存放。位参数在堆栈中从偶地址开始存放。 结构体变量仅传递地址。结构体变量仅传递地址。 父函数使用父函数使用LCRLCR指令调用子函数。指令调用子函数。2. 子函数的响应子函数的响应返回值的处理:返回值的处理: 16位整型数存放于位整型数存放于AL, 32位整型数存放于位整型数存放于ACC,子函数使用子函数使用LRETR指令返回。指令返回。3. 访问参数和局部变量访问参数和局部变量 局部帧空间小于局部帧空间小于63个字时,采用个字时,采用SP访问访问 “*-SP6位偏移量位偏移量” 最

24、大偏移量为最大偏移量为63, 局部帧空间大于局部帧空间大于63个,使用个,使用FP(XAR2)访问)访问。 “*+FP偏移量偏移量” “*+FPAR0/AR1”3.4.2 C和汇编接口和汇编接口 特别注意:特别注意:(1)汇编模块中被)汇编模块中被C访问的标识符前要加下划线访问的标识符前要加下划线。 如,若变量如,若变量x要被要被C程序访问,必须用程序访问,必须用_x表示。表示。(2)汇编模块中需要被汇编模块中需要被C模块引用的变量或者函数模块引用的变量或者函数要用伪指令要用伪指令.def或或.global声明;声明; C模块中需要被汇编模块引用的变量或者函数模块中需要被汇编模块引用的变量或者

25、函数在汇编模块中也必须用伪指令在汇编模块中也必须用伪指令.global声明。声明。例:汇编接收例:汇编接收C传递的参数并加至传递的参数并加至C全局变量全局变量gvar返回返回。C主程序主程序extern int asmfunc()(); /* 声明全局汇编函数声明全局汇编函数 */int gvar; /* 定义全局变量定义全局变量gvar */void main()int i = 5;i = asmfunc(i); /* 正常调用汇编函数正常调用汇编函数 */南航自动化学院南航自动化学院DSP技术应用实验室技术应用实验室一、一、 独立编写独立编写C和汇编模块和汇编模块汇编子程序汇编子程序 .g

26、lobal _gvar .global _asmfunc_asmfunc: MOVW DP,#_gvar ADD AL, _gvar MOV _gvar, AL LRETR 3.4.3 混合编程方法混合编程方法二、二、 使用使用FAST_FUNC_CALL预编译器指令预编译器指令示例:实现两个示例:实现两个32位数的加法运算位数的加法运算(a)汇编程序)汇编程序_add_long: addl acc, *-SP2 LB *XAR7(b)C程序程序#pragma FAST_FUNC_CALL(add_long);long add_long(long, long);void f()long x=0

27、, y=0; x=67000; y=76000;y=add_long(x, y);while(1)k=0; asm(“ 汇编语句汇编语句”) 三、三、直接在直接在C程序中嵌入汇编语句程序中嵌入汇编语句优点:优点: (1).程序编写方便。程序编写方便。 (2).程序保留程序保留C结构,结构清晰,可读性好。结构,结构清晰,可读性好。(3).程序调试方便。程序调试方便。南航自动化学院南航自动化学院DSP技术应用实验室技术应用实验室注意:注意: (1)小括号中双引号后第一列是标号位置,用空格代替。小括号中双引号后第一列是标号位置,用空格代替。 (2).编译器在编译过程中只是把内嵌指令照搬到编译生编译器

28、在编译过程中只是把内嵌指令照搬到编译生成的汇编代码的相应位置。成的汇编代码的相应位置。(3).不要把跳转指令或者带标号的汇编语句嵌入不要把跳转指令或者带标号的汇编语句嵌入C程序。程序。a).C程序程序 extern int var;/*声明声明var为全局变量为全局变量*/ var=1;/*引用引用var*/ b).汇编程序汇编程序 .bss _var,1;定义变量;定义变量_var .global _var;声明;声明_var为全局变量为全局变量 1.访问访问.bss段中变量段中变量 四、四、 在在C中访问汇编变量中访问汇编变量 (a) C程序程序 extern float sine; /*

29、 说明说明sine 为外部变量为外部变量*/ f = sine2; /*把把sine看作正常数组使用看作正常数组使用*/ (b) 汇编程序汇编程序 .global _sine ; 说明说明sine 为外部变量为外部变量 .sect ”sine_tab” ; 定义一个独立的段定义一个独立的段 _sine: ; 查找表的初始地址查找表的初始地址 .float 0.0 .float 0.015987 .float 0.022145 2. 访问不在访问不在.bss段中的变量段中的变量五、五、使用内部算子访问汇编使用内部算子访问汇编作用作用:内部算子(:内部算子(intrinsics)可将)可将C/C+

30、中无法描述或描述中无法描述或描述比较复杂的任务用特定汇编语句描述。比较复杂的任务用特定汇编语句描述。使用方法使用方法:以函数形式调用,名称前加下划线。:以函数形式调用,名称前加下划线。南航自动化学院南航自动化学院DSP技术应用实验室技术应用实验室 (1)新建一个)新建一个C源文件,为汇编函数声明一个函数原型、源文件,为汇编函数声明一个函数原型、创建创建C函数实体;并在函数实体;并在main()函数中调用。函数中调用。(2)编译)编译C文件。使用编译器选项文件。使用编译器选项“-k(保留汇编)(保留汇编) -ss(交叉列表)(交叉列表) -al(创建汇编列表)(创建汇编列表)” 。(3)观察编译

31、之后生成的同名汇编文件。)观察编译之后生成的同名汇编文件。(4)利用生成的汇编函数代码创建汇编文件。)利用生成的汇编函数代码创建汇编文件。(5)在)在C中将汇编函数原型声明为外部的,并删除为汇编中将汇编函数原型声明为外部的,并删除为汇编函数原型创建的函数。函数原型创建的函数。 六、六、快速产生被快速产生被C调用的汇编函数调用的汇编函数3.5.1 集成开发环境简介集成开发环境简介一、一、 CCS简介简介目前使用最广泛的目前使用最广泛的DSP集成开发环境。集成开发环境。可视化的代码编辑界面可视化的代码编辑界面强大的程序调试、跟踪与分析工具强大的程序调试、跟踪与分析工具完成代码编辑、编译、连接、调试

32、和数据分析。完成代码编辑、编译、连接、调试和数据分析。两种工作模式:两种工作模式: 软件仿真(软件仿真(Simulator):无需):无需DSP硬件,可直接在计硬件,可直接在计算机上对算机上对DSP的指令集和的指令集和CPU进行模拟;进行模拟; 硬件仿真(硬件仿真(Emulator):支持在):支持在DSP芯片上在线实时芯片上在线实时运行和调试程序。运行和调试程序。3.5 CCS集成开发环境集成开发环境3.5.1 集成开发环境简介集成开发环境简介 CCS的安装的安装安装完毕,在桌面创建安装完毕,在桌面创建 快捷图标快捷图标2. Simulator模式配置模式配置单击单击“Setup CCStu

33、dio V3.3” 的图标,进入系统的配置环境的图标,进入系统的配置环境二、二、CCS的安装与配置的安装与配置3. CCS的的Emulator模式配置模式配置3.5.2 DSP应用程序开发调试示例应用程序开发调试示例1 目标代码的生成目标代码的生成(1)新建工程)新建工程1 目标代码的生成目标代码的生成(2)添加文件)添加文件1 目标代码的生成目标代码的生成(3)生成可执行代码)生成可执行代码2 目标代码的调试目标代码的调试(1)装载文件)装载文件2 目标代码的调试目标代码的调试(2)调试文件)调试文件运行菜单运行菜单2 目标代码的调试目标代码的调试(2)调试文件)调试文件观察菜单观察菜单2

34、目标代码的调试目标代码的调试(2)调试文件)调试文件寄存器、存储器和观察窗口寄存器、存储器和观察窗口2 目标代码的调试目标代码的调试(2)调试文件)调试文件设置断点设置断点 动画运行动画运行2 目标代码的调试目标代码的调试(2)调试文件)调试文件设置探测点设置探测点2 目标代码的调试目标代码的调试(2)调试文件)调试文件关联文件关联文件2 目标代码的调试目标代码的调试(2)调试文件)调试文件打开图形观察窗口打开图形观察窗口 程序调试无误后,即可烧写到程序调试无误后,即可烧写到DSPDSP的的FLASHFLASH中,使中,使DSPDSP可以脱离仿真器独立运行可以脱离仿真器独立运行 3.5.3 程

35、序烧写程序烧写3.5.4 通用扩展语言(通用扩展语言(GEL)简介)简介GEL:通用扩展语言,高级脚本语言。:通用扩展语言,高级脚本语言。.gel文件可扩展文件可扩展CCS的功能或者自动运行的功能或者自动运行CCS中中一系列常用命令。一系列常用命令。3.5.5 DSP/BIOS工具简介工具简介BIOS:Built-In Operation System,嵌入式操作系统。,嵌入式操作系统。 DSP/BIOS是是TI公司为其公司为其TMS320C6000、C5000TM和和C28x系列系列DSP平台设计开发的一个尺寸可裁剪的实时平台设计开发的一个尺寸可裁剪的实时多任务操作系统内核。多任务操作系统内

36、核。3.6.1 驱动程序开发包简介驱动程序开发包简介 为使为使DSP的的CPU控制片内各功能模块正常工作,必须控制片内各功能模块正常工作,必须对其进行编程驱动,使系统时钟、片内外设等硬件资源按对其进行编程驱动,使系统时钟、片内外设等硬件资源按照各自功能和系统需求运行照各自功能和系统需求运行应用(驱动)程序开发。应用(驱动)程序开发。 3.6 基于示例模版的驱动程序开发基于示例模版的驱动程序开发 SPRC530:F2833x和和F2823x头文件及片内外设应用示例头文件及片内外设应用示例代码质量高、内容全面代码质量高、内容全面;结构规范结构规范;开发周期短开发周期短基本思路:基本思路: (1)采

37、用)采用寄存器结构体寄存器结构体和和位定义位定义形式定义各片内外形式定义各片内外设的寄存器设的寄存器 (2)在编译时将其)在编译时将其映射到映射到DSP数据空间数据空间对应地址对应地址。3.6.2 外设寄存器访问的硬件抽象层方法外设寄存器访问的硬件抽象层方法名称名称地址地址描述描述PLLSTS0 x7011PLL 状态寄存器状态寄存器Reserved0 x70120 x7019保留保留HISPCP0 x701A高速外设时钟定标器高速外设时钟定标器LOSPCP0 x701B低速外设时钟定标器低速外设时钟定标器PCLKCR00 x701C外设时钟控制器寄存器外设时钟控制器寄存器0PCLKCR10

38、x701D外设时钟控制器寄存器外设时钟控制器寄存器1LPMCR00 x701E低功耗模式控制寄存器低功耗模式控制寄存器0Reserved0 x701F保留保留PCLKCR30 x7020外设时钟控制器寄存器外设时钟控制器寄存器3PLLCR0 x7021PLL 控制寄存器控制寄存器SCSR0 x7022系统控制和状态寄存器系统控制和状态寄存器WDCNTR0 x7023看门狗计数器寄存器看门狗计数器寄存器Reserved0 x7024保留保留WDKEY0 x7025看门狗复位密钥寄存器看门狗复位密钥寄存器Reserved0 x70260 x7028保留保留WDCR0 x0000-7029看门狗控制

39、寄存器看门狗控制寄存器1 寄存器结构体及其位定义寄存器结构体及其位定义第一步,为各寄存器定义一个位定义结构体变量第一步,为各寄存器定义一个位定义结构体变量struct PLLCR_BITS / 位定义位定义 Uint16 DIV:4; / 3:0 为为PLL模块设置时钟速率模块设置时钟速率 Uint16 rsvd1:12; / 15:4 保留保留;struct PCLKCR0_BITS / 位描述位描述 Uint16 rsvd1:2; / 1:0 保留保留 Uint16 TBCLKSYNC:1; / 2 EPWM模块模块TBCLK同步允许同步允许 Uint16 ECANBENCLK:1; /

40、15 允许到允许到 eCAN-B的系统时钟的系统时钟第二步,为每个寄存器定义一个共同体第二步,为每个寄存器定义一个共同体union PLLCR_REG Uint16 all; struct PLLCR_BITS bit;union PCLKCR0_REG Uint16 all; struct PCLKCR0_BITS bit;第三步,将某外设同类寄存器定义为一个结构体变量第三步,将某外设同类寄存器定义为一个结构体变量struct SYS_CTRL_REGS Uint16 rsvd1; /0为从偶地址开始,保留一个单元为从偶地址开始,保留一个单元 union PLLSTS_REG PLLSTS; / 1 Uint16 rsvd28; / 2-9保留保留 union HISPCP_REG HISPCP; / 10: 高速外设时钟定标器高速外设时钟定标器 union LOSPCP_REG LOSPCP; / 11: 低速外设时钟定标器低速外设时钟定标器 ;第四步,对该外设的寄存器结构体变量进行实例化。第四步,对该外设的寄存器结构体变量进行实例化。extern volatile struct SYS_CTRL_REGS SysCtrlRegs寄存器文件的使用寄存器文件的使用 采用成员操作对结构体每个成员

温馨提示

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

评论

0/150

提交评论