DSP2833XC语言知识学习程序烧写.ppt
《DSP2833XC语言知识学习程序烧写.ppt》由会员分享,可在线阅读,更多相关《DSP2833XC语言知识学习程序烧写.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、DSP原理与应用The Technology File name: 280 x.h IMR.set 0004h ; Interrupt Mask Register IFR.set 0006h ; Interrupt Flag Register ; System configuration and interrupt registers SCSR1.set 7018h ; System Control Peripheral Interrupt Acknowledge register 2,; File name: vector.h .sectvectors RSVECTB START ; Res
2、et Vector INT1B GISR1 ; Interrupt Level 1 INT2B GISR2 ; Interrupt Level 2 INT3B GISR3 ; Interrupt Level 3 INT4B GISR4 ; Interrupt Level 4 INT5B GISR5 ; Interrupt Level 5 INT6B GISR6 ; Interrupt Level 6 RESERVED B PHANTOM ; Reserved SW_INT8 B PHANTOM ; Software Interrupt SW_INT9 B PHANTOM ; Software
3、Interrupt SW_INT10 B PHANTOM ; Software Interrupt SW_INT11 B PHANTOM ; Software Interrupt SW_INT12 B PHANTOM ; Software Interrupt SW_INT13 B PHANTOM ; Software Interrupt SW_INT14 B PHANTOM ; Software Interrupt SW_INT15 B PHANTOM ; Software Interrupt SW_INT16 B PHANTOM ; Software Interrupt TRAP B PHA
4、NTOM ; Trap vector NMI B NMI ; Nonmaskable Interrupt EMU_TRAP B PHANTOM ; Emulator Trap SW_INT20 B PHANTOM ; Software Interrupt SW_INT21 B PHANTOM ; Software Interrupt SW_INT22 B PHANTOM ; Software Interrupt SW_INT23 B PHANTOM ; Software Interrupt SW_INT24 B PHANTOM ; Software Interrupt,第2.2.9 汇编程序设
5、计-示例文件,.asm文件: 程序文件,* File Name: SPI.asm .include 280 xA.h .include vector.h .bss GPR0,1 ;General purpose registers. .bss GPR3,1 KICK_DOG .macro ;Watchdog reset macro LDP #00E0h SPLK #05555h, WDKEY SPLK #0AAAAh, WDKEY LDP #0h .endm ; M A I N C O D E starts here .text START: LDP #0 SETC INTM SPLK #0h
6、,GPR3 OUT GPR3,WSGR CLRC SXM CLRC OVM CLRC CNF LDP #WDCR7 SPLK #006Fh,WDCR KICK_DOG LDP #SCSR17 SPLK #0020h,SCSR1,第二章:DSP程序设计,第2.1节 概述 第2.2节 DSP汇编语言概述及汇编程序设计 第2.3节 DSP C语言程序设计 第2.4节 DSP C与汇编混合编程 第2.5节 DSP程序烧写 习题,第2.3节 DSP C语言程序设计,支持ANSI C: 提供相应的编译器和优化工具 对ANSI C进行了限定和扩展 运行库: 字符串操作 动态地址分配 数据转换 ,第2.3节
7、DSP C语言程序设计,变量和标识: 变量和标识符长度100个字符,区分大小写 变量和标识符的符号集为ASCII,不支持多字节符号(如汉字)。 字符或字符串常量中的16进制ESC码(特殊字符,如0X07)可能会有32位的值。 多字符的字符变量最后一个有效,如abc是c 数据类型: Size_t(sizeof的结果)定义为unsigned int Ptrdiff_t(指针加减结果)定义为int 所有的整数类型(char, short, int, 以及这些类型的无符号型)都是相同类型,并代表16位的二进制值. Long和unsigned long代表32位二进制值.,第2.3节 DSP C语言程序
8、设计,数据类型: 有符号数是用二进制补码表示. 数据单元的基础是字(16位),BYTE和WORD一样 char是有符号类型,等同于int 枚举型(enum)用16位值表示,等同于int 浮点类型(float,double)是相同的,遵循TMS320C2x/C2xx/C5x的32位浮点类型. Long 和float的数据存储格式为低有效字存储在低地址的方式. Long long 和long double是64位的.,第2.3节 DSP C语言程序设计,数据类型:,第2.3节 DSP C语言程序设计,类型转换: 浮点数转为整数为取整截断 指针类型(pointer)和int可以自由转换 far po
9、inter 为22位有效位 表达式: 有符号整数相除,商符号由两个数共同决定,余数符号同被除数 10/-3=-3,余1; -10/3=-3余-1 有符号数右移为算术右移,符号位不变,第2.3节 DSP C语言程序设计,C访问16位乘法结果的高16位: int m1,m2; int result; result=(long)m1*(long)m2) 16; 浮点数:32bits FPU +,-, 比较(,=,=,=,!=) 同int,long的相互转换 以上操作均通过相应的汇编指令(即内部硬件机制)实现。(无FPU时处理浮点运算需要通过浮点数运算库,运算效率低),第2.3节 DSP C语言程序设
10、计,直接访问寄存器 通过cregister语句实现: extern cregister volatile unsigned int IFR; IFR = 0;,第2.3节 DSP C语言程序设计,预处理: 预处理忽略所有不支持的#pragma指令 支持如下#pragma: . CODE_ALIGN CODE_SECTION DATA_ALIGN DATA_SECTION FAST_FUNC_CALL FUNC_EXT_CALLED INTERRUPT MUST_INTERATE UNROLL 预处理必须在函数外,在所有声明之前,第2.3节 DSP C语言程序设计,CODE_ALIGN: 为某一
11、段程序指定特定的代码存储边界,以保证某函数代码存于特定位置。 #pragma CODE_ALIGN(func, constant) #pragma CODE_ALIGN(constant) Constant必须是2的幂次,以保证内存边界问题,第2.3节 DSP C语言程序设计,CODE_SECTION: 为某一段程序指定特定的代码存储段,以便单独分配存储空间 #pragma CODE_SECTION(symbol, “section_name”) #pragma CODE_SECTION(“section_name”) 例:#pragma CODE_SECTION(fn, “my_sect”)
12、 int fn(int x) return 0; 汇编结果: .file “CODEN.c” .sect ”my_sect” .global _fn .sym _fn,_fn,36,2,0 .func 3,第2.3节 DSP C语言程序设计,DATA_ALIGN: 为某一段数据指定特定的代码存储边界,以保证特定数据存于特定位置。 #pragma DATA_ALIGN(symbol,constant) #pragma DATA_ALIGN(constant) Constant必须是2的幂次,以保证内存边界问题,第2.3节 DSP C语言程序设计,DATA_SECTION: 为某一段数据指定特定的
13、数据存储段,以便单独分配存储空间,例如同.bss内存分开,或单独分配连续的存储空间 #pragma DATA_SECTION(symbol, “section_name”) 例:#pragma DATA_SECTION(bufferB, “BufferB_sect”) char bufferA512; char bufferB512; 汇编结果: .global _bufferA .bss _bufferA, 512, 4 .global _bufferB _bufferB:.usect “BufferB_sect”,512,4,第2.3节 DSP C语言程序设计,SECTIONS VECTO
14、RS: PMPAGE 0 .TEXT : PMPAGE 0 .BSS : BLK_B2PAGE 1 .DATA : BLK_B1PAGE 1 BufferB_sect : SARAM_D PAGE 1 ,第2.3节 DSP C语言程序设计,FAST_FUNC_CALL: 指明某一函数调用时采用快速函数调用(FFC)机制,而不是使用普通函数调用流程: FFC进栈出栈及函数返回有所不同,调用更快速。 #pragma FAST_FUNC_CALL (func) 这类函数返回时的asm代码必须是: LB *XAR7,第2.3节 DSP C语言程序设计,FUNC_EXT_CALLED: 指明某一未使用的
15、函数,使其不会在C优化时被删除。 #pragma FUNC_EXT_CALLED (func),第2.3节 DSP C语言程序设计,INTERRUPT: 指明函数为中断处理函数(函数返回机制使用IRP) #pragma INTERRUPT ( func ); #pragma INTERRUPT; #pragma INTERRUPT (func, HPI|LPI); #pragma INTERRUPT ( HPI|LPI);) FPU有高优先级中断(HPI)和低优先级中断(LPI)处理机制,通过此预编译实现。,第2.3节 DSP C语言程序设计,MUST_ITERATE: 指明循环必须被执行的次
16、数,以防止循环被优化掉 #pragma MUST_ITERATE (min,max,mult); 有时通过空循环建立必须的延时,单在程序优化时会被自动优化掉。 例如: For( i=0; i100; i+) 编译器在优化时会去掉此循环,使用MUST_ITERATE可以保证此循环执行。,第2.3节 DSP C语言程序设计,嵌入汇编代码: asm(“assembler text”); 例如: asm(“clrc intm”); 编译器不会进行语法检查,直接生成汇编代码 嵌入的汇编指令应不破坏C语言的环境,例如堆栈结构、当前AR等,或不可控的跳转等。 带asm语句的代码,使用优化器时须小心,因为优化
17、器可能会改变asm语句附近的代码顺序,而引起不期望的结果.,第2.3节 DSP C语言程序设计,访问IO:先定义io端口号,然后使用 ioport type porthex_num type用16位数据表示 例:ioport int portd0ff;/*IO端口d0ff*/ portd0ff=a; /*输出a值到portd0ff*/ b=portd0ff; /*读输入portd0ff值到b*/ IN *+FP7,*(0d0ffH) ioport变量定义必须在文件头位置定义,不能在函数中定义.ioport变量的使用跟普通变量一样。 call(portd0ff); a=portd0ff+b; p
18、ortd0ff+=a;,第2.3节 DSP C语言程序设计,中断处理:查询式和回调(中断服务程序)两种方式。 查询式: 程序中查询中断标志及相应的寄存器,判断中断的发生并进行相应处理。 优点:流程易于控制,不会发生中断嵌套问题,一般不会丢失中断。 缺点:中断实时性差。,第2.3节 DSP C语言程序设计,回调式: 为中断指定回调处理函数(中断服务程序),由CPU中断处理机制自动调用。 优点:中断实时性好,程序结构简洁,类似于windows的消息驱动机制。 缺点:处理不好容易造成中断嵌套或丢失中断,造成逻辑混乱。,第2.3节 DSP C语言程序设计,中断服务函数:两种方式定义中断服务函数。 a)
19、c_intd方式定义的函数,c_int00作系统复位函数 b)Interrupt关键词定义的函数。 例: void c_int01() interrupt void timer2_isr() ,第2.3节 DSP C语言程序设计,中断服务函数与相应的中断对应: 通过vectors字段对应: * cvectors.asm .ref _c_int00, _timer2_isr .sect ”vectors” rset: B _c_int00 ;00h reset int1: B int1 ;02h INT1 int2: B int2 ;04h INT2 int3: B _timer2_isr ;0
20、6h INT3 int4: B int4 ;08h INT4,第2.3节 DSP C语言程序设计,cmd文件: MEMORY PAGE 0: /* Program Memory */ VECS: org=00000h, len=00040h /* internal FLASH */ SECTIONS /* Sections generated by the Ccompiler */ .text: FLASH PAGE 0 /* initialized */ /* Sections declared by the user */ vectors: VECS PAGE 0 /* initializ
21、ed */ ,第2.3节 DSP C语言程序设计,中断服务函数: 中断服务函数类型必须是void。 中断服务函数要尽量短小,减少中断服务占用时间,以避免发生中断嵌套或丢中断。 多个中断可以共用一个中断服务函数,除了int00。 注意IMR、INTM等中断控制量的设置。 中断服务函数可能和某些编译选项和优化冲突,需注意协调。,第2.3节 DSP C语言程序设计,中断服务函数: 中断服务函数可以像其他函数一样访问全局变量、分配局部变量和调用其它函数。 进入中断服务函数,编译器自动保护与运行上下文相关的寄存器,并在中断服务函数结束时恢复运行环境。但并不保存所有寄存器 中断服务程序可以任意修改不被保护
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp2833xc 语言 知识 学习 程序
限制150内