TIDSP学习纪要精Word格式文档下载.docx
- 文档编号:18800052
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:17
- 大小:137.06KB
TIDSP学习纪要精Word格式文档下载.docx
《TIDSP学习纪要精Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《TIDSP学习纪要精Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
定点、低功耗),
C54X,C54XX,C55X相比其它系列的主要特点是低功耗,所以最适合个人与
便携式上网以及无线通信应用,如手机、PDA、GPS等应用。
处理速度在80MIPS--400MIPS之间。
C54XX和C55XX一般只具有McBSP同步串口、HPI并行接口、定时器、DMA等外设。
值得注意的是C55XX提供了EMIF外部存储器扩展接口,可以直接使用SDRAM,而C54XX则不能直接使用。
两个系列的数字IO都只有两条。
3、DSP6000
XDAIS->
RF5
DSP6000的开发难度明显增大,不论是硬件还是软件。
C62XX,C67XX,C64X该系列以高性能著称,最适合宽带网络和数字影像应用。
32bit,
其中:
C62XX和C64X是定点系列,C67XX是浮点系列。
C62XX学习中,硬件上会初步遇到信号完整性问题,软件方面来说,DSP/BIOS是必需的,复杂的程序还需要XDAIS和RF3、RF5的知识。
DSP64XX系列的学习中,硬件方面需要重点考虑系统合理架构问题,信号完整性问题;
软件方面,需要综合运用各种比较先进、专业的知识,例如用DSP/BIOS作为RTOS,用RF5作为程序架构,尽量采用MiniDriver来编写底层驱动程序等。
如果深入编程,还会遇到令人困惑的Cache冲突问题(虽然TI最近专门针对这个难题升级了CCS),等等。
别外对于以上TI的各系列产品还需要补充的知识:
GEL,RTDX,CSL,DSP库函数
对于以上综合考虑,先从C2000做为学习入门型号,后期再扩展到C5000/C6000或OMAP系列的学习中;
结合自已的学习能力和现有的知识体系:
因为前期主要从事MCU相关的系统与应用开发,对于C和C++有一定的熟悉程序;
从C/C++在MCU中应用过渡到DSP开发需要考虑以下一些问题(使用MCU熟悉的思绪,从存储空间,中断机制,函数库与程序库的使用,数据操作(包括数据类型,和运算)):
1.存储空间:
通过了解与高性能MCU类似dsp也有两种名称的存储空间,一种是物理空间,另一种是映射空间,物理空间是dsp上可以存放数据和程序的实际空间(包括外部存储器),数据和程序最终要被存放到物理空间上,但是在使用过程中并不能直接访问它们,而是需要助于映射空间来访问!
同样与MCU类似映射空间远远大于实际的物理空间,而IO、外部设备等会被映射到存储空间中,通过这个访问过程来实现对IO和外部设备的访问。
2.中断机制:
主要考虑中断向量表的定义和使用,在DSP中同样需要中断向量表的重定位,所以要处理好中断发生后的地址跳转问题;
3.函数库与程序库的使用:
很明显函数库与程序库的使用是为了便于开发和提高开发效率,但是前提是要不影响系统执行效率,在一些成熟算法库的使用上需要有一个综合的评定和使用方式;
4.数据操作:
需要了解各种数据类型在DSP中的存储方式,运算符的使用要多参考资料(特别是除法运算(再详细了解));
DSP开发流程:
整个开发周期流程:
1.建立工程、添加文件(.c,.lib,.cmd,.sa,.asm);
2.代码编辑;
3.配置IDE编译选项;
4.Build(c/cpp->
汇编.ASM->
链接.OBJ->
.OUT->
.HEX);
5.Debug(断点、Profile等方式);
整体用下图表示(包括工具部分):
TI的DSP开发软件包括集成开发系统(CCS),实时操作系统(DSP/BIOS),第三方算法库标准(eXpressDSP)。
DSP/BIOS是一个用户可剪裁的实时操作系统,主要由三部分组成:
多线程实时内核(抢占式多线程);
实时分析工具;
芯片支持库。
利用实时操作系统开发程序,可以方便快速的开发复杂的DSP程序。
操作系统维护调度多线程的运行,只需将定制的数字信号算法作为一个线程嵌入系统即可;
芯片支持库帮助管理外设资源,复杂的外设寄存器初始化可以利用直接图形工具配置;
实时分析工具可以帮助分析算法实时运行情况。
DSP/BIOS以模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要剪裁。
实际应用中需要的定制算法作为一个线程插入DSP/BIOS的调度队列,由DSP/BIOS进行调度。
使用前需阅读了解DSP/BIOS用户手册和DSP/BIOS设备驱动的开发与使用,具体内容包括DSP/BIOS概述、程序生成、监测、线程调度、存储器和低级函数、I/O概述和管道、流I/O和设备驱动;
设备驱动开发工具包(DDK)简介、DSP/BIOS设备驱动的结构和使用、使用DSP/BIOS设备驱动、GIO类驱动、微型驱动的开发步骤、IOM接口、PIO适配器、LIO模型到IOM模型的移植和GIOAPI的ASYNC扩展。
DSP/BIOS开发模型及各组件在系统中的位置:
DSP/BIOS启动流程:
当DSP/BIOS的应用程序启动时,一般遵循下面的步骤:
1.初始化DSP:
DSP/BIOS程序从C/C++环境入口c_int00开始运行。
对于C6000平台,在c_int00开始处,系统栈指针(B15)和全局页指针(B14)被分别设置在堆栈断的末尾和.bss断的开始。
控制寄存器AMR、IER、CSR等被初始化;
2.初始化.bss
段:
当堆栈被设置完成后,初始化任务被调用,利用.cinit的记录对.bss断的变量进行初始化;
3.调用BIOS_init初始化用到的各个模块:
BIOS_init调用MOD_init对配置用到的各个模块进行初始化,包括HWI_init、HST_init、IDL_init等;
4.处理.pinit表:
.pinit表包含一些指向初始化函数的指针,对C++程序,全局对象类的创建也在此时完成;
5.调用用户程序的main函数:
用户main函数可以是C/C++函数或者汇编语言函数,对于汇编函数,使用_main的函数名。
由于此时的硬件、软件中断还没有被使能,所以在用户主函数的初始化中需要注意,可以使能单独的中断屏蔽位,但是不能调用类似HWI_enable的接口来使能全局中断;
6.调用BIOS_start启动DSP/BIOS:
BIOS_start在用户main函数退出后被调用,它负责使能使用的各个模块并调用MOD_startup启动每个模块。
包括CLK_startup、PIP_startup、SWI_startup、HWI_startup等。
当TSK管理模块在配置中被使用时,TSK_startup被执行,并且BIOS_start将不会结束返回;
7.执行idle循环:
有两种方式进入idle循环。
当TSK管理模块使能时,任务调度器运行的TSK_idle任务调用IDL_loop在其它任务空闲时进入idle循环;
当TSK模块未被使用时,BIOS_start调用将返回,并执行IDL_loop进入永久的idle循环,此时硬件和软件中断可以抢占idle循环得到执行。
由于idle循环中管理和主机的通信,因此主机和目标机之间的数据交互可以进行了。
使用CCS完成软件的编辑、编译和在线调试,
CCS特性:
除了类似于VS的工具功能(编译、链接)外,CCS还包调试工具中的步进、查看变量、寄存器、存存器、调用堆栈和反汇编窗口;
CCS可以可视化的实现对配置文件的生成,并生成相应的代码,所以说CCS不仅仅是一个代码生成工具,它对开发过程中的各个阶段都有很好的支持;
DSP关键技术:
流水操作(取指,解确(包括指令派遣,指令译码),执行)
DSP中断使用与处理流程总结:
1.中断向量表定义;
2.向中断向量表中设置中断函数入口地址;
3.初始化中断定时器;
4.编写中断服务函数;
中断实现:
1.首先在.cmd中定位系统中断表:
MEMORY
{
PAGE0:
......................................
PAGE1:
PIE_VECT:
origin=0x000D00,length=0x000100
}
SECTIONS
...................................
PieVectTable:
>
PIE_VECT,PAGE=1
.....................................
2.在C中制定该中断的结构体:
#pragmaDATA_SECTION(PieVectTable,"
PieVectTable"
);
structPIE_VECT_TABLEPieVectTable;
(在DSP28_GlobalVariableDefs.C中初始化)
3.用一组常数(按照中断向量的顺序)初始化该名字为PIE_VECT_TABLE的表:
typedefinterruptvoid(*PINT)(void);
//DefineVectorTable:
structPIE_VECT_TABLE{
//Resetisneverfetchedfromthistable.
//Itwillalwaysbefetchedfrom0x3FFFC0ineither
//bootROMorXINTFZone7dependingonthestateof
//theXMP/MCinputsignal.OntheF2810itisalways
//fetchedfrombootROM.
PINTPIE1_RESERVED;
PINTPIE2_RESERVED;
PINTPIE3_RESERVED;
PINTPIE4_RESERVED;
PINTPIE5_RESERVED;
PINTPIE6_RESERVED;
PINTPIE7_RESERVED;
PINTPIE8_RESERVED;
PINTPIE9_RESERVED;
PINTPIE10_RESERVED;
PINTPIE11_RESERVED;
PINTPIE12_RESERVED;
PINTPIE13_RESERVED;
//Non-PeripheralInterrupts:
PINTXINT13;
//XINT13
PINTTINT2;
//CPU-Timer2
PINTDATALOG;
//Datalogginginterrupt
PINTRTOSINT;
//RTOSinterrupt
PINTEMUINT;
//Emulationinterrupt
PINTXNMI;
//Non-maskableinterrupt
PINTILLEGAL;
//IllegaloperationTRAP
PINTUSER0;
//UserDefinedtrap0
PINTUSER1;
//UserDefinedtrap1
PINTUSER2;
//UserDefinedtrap2
PINTUSER3;
//UserDefinedtrap3
PINTUSER4;
//UserDefinedtrap4
PINTUSER5;
//UserDefinedtrap5
PINTUSER6;
//UserDefinedtrap6PINTUSER7;
//UserDefinedtrap7PINTUSER8;
//UserDefinedtrap8PINTUSER9;
//UserDefinedtrap9PINTUSER10;
//UserDefinedtrap10PINTUSER11;
//UserDefinedtrap11
//Group1PIEPeripheralVectors:
PINTPDPINTA;
//EV-A
PINTPDPINTB;
//EV-B
PINTrsvd1_3;
PINTXINT1;
PINTXINT2;
PINTADCINT;
//ADC
PINTTINT0;
//Timer0
PINTWAKEINT;
//WD
//Group2PIEPeripheralVectors:
PINTCMP1INT;
PINTCMP2INT;
PINTCMP3INT;
PINTT1PINT;
PINTT1CINT;
PINTT1UFINT;
PINTT1OFINT;
PINTrsvd2_8;
//Group3PIEPeripheralVectors:
PINTT2PINT;
PINTT2CINT;
PINTT2UFINT;
PINTT2OFINT;
PINTCAPINT1;
PINTCAPINT2;
PINTCAPINT3;
PINTrsvd3_8;
//Group4PIEPeripheralVectors:
PINTCMP4INT;
PINTCMP5INT;
PINTCMP6INT;
PINTT3PINT;
PINTT3CINT;
PINTT3UFINT;
PINTT3OFINT;
//EV-BPINTrsvd4_8;
//Group5PIEPeripheralVectors:
PINTT4PINT;
//EV-BPINTT4CINT;
//EV-BPINTT4UFINT;
//EV-BPINTT4OFINT;
//EV-BPINTCAPINT4;
//EV-BPINTCAPINT5;
//EV-BPINTCAPINT6;
//EV-BPINTrsvd5_8;
//Group6PIEPeripheralVectors:
PINTSPIRXINTA;
//SPI-APINTSPITXINTA;
//SPI-APINTrsvd6_3;
PINTrsvd6_4;
PINTMRINTA;
//McBSP-APINTMXINTA;
//McBSP-APINTrsvd6_7;
PINTrsvd6_8;
//Group7PIEPeripheralVectors:
PINTrsvd7_1;
PINTrsvd7_2;
PINTrsvd7_3;
PINTrsvd7_4;
PINTrsvd7_5;
PINTrsvd7_6;
PINTrsvd7_7;
PINTrsvd7_8;
//Group8PIEPeripheralVectors:
PINTrsvd8_1;
PINTrsvd8_2;
PINTrsvd8_3;
PINTrsvd8_4;
PINTrsvd8_5;
PINTrsvd8_6;
PINTrsvd8_7;
PINTrsvd8_8;
//Group9PIEPeripheralVectors:
PINTRXAINT;
//SCI-APINTTXAINT;
//SCI-APINTRXBINT;
//SCI-B
PINTTXBINT;
PINTECAN0INTA;
//eCAN
PINTECAN1INTA;
PINTrsvd9_7;
PINTrsvd9_8;
//Group10PIEPeripheralVectors:
PINTrsvd10_1;
PINTrsvd10_2;
PINTrsvd10_3;
PINTrsvd10_4;
PINTrsvd10_5;
PINTrsvd10_6;
PINTrsvd10_7;
PINTrsvd10_8;
//Group11PIEPeripheralVectors:
PINTrsvd11_1;
PINTrsvd11_2;
PINTrsvd11_3;
PINTrsvd11_4;
PINTrsvd11_5;
PINTrsvd11_6;
PINTrsvd11_7;
PINTrsvd11_8;
//Group12PIEPeripheralVectors:
PINTrsvd12_1;
PINTrsvd12_2;
PINTrsvd12_3;
PINTrsvd12_4;
PINTrsvd12_5;
PINTrsvd12_6;
PINTrsvd12_7;
PINTrsvd12_8;
};
然后在使我们在.cmd文件中定义的表有以上属性:
externstructPIE_VECT_TABLEPieVectTable;
(在.h文件中)
4.初始化该表(在.c文件中)使之能够为主程序所使用:
conststructPIE_VECT_TABLEPieVectTableInit={PIE_RESERVED,//Reservedspace
PIE_RESERVED,
//Non-PeripheralInterrupts
INT13_ISR,//XINT13orCPU-Timer1INT14_ISR,//CPU-Timer2
DATALOG_ISR,//DatalogginginterruptRTOSINT_ISR,//RTOSinterruptEMUINT_ISR,//EmulationinterruptNMI_ISR,//Non-maskableinterruptILLEGAL_ISR,//IllegaloperationTRAPUSER0_ISR,//UserDefinedtrap0USER1_ISR,//UserDefinedtrap1USER2_ISR,//UserDefinedtrap2USER3_ISR,//UserDefinedtrap3USER4_ISR,//UserDefinedtrap4USER5_ISR,//UserDefinedtrap5USER6_ISR,//UserDefinedtrap6USER7_ISR,//UserDefinedtrap7USER8_ISR,//UserDefinedtrap8USER9_ISR,//UserDefinedtrap9USER10_ISR,//UserDefinedtrap10USER11_ISR,//UserDefinedtrap11//Group1PIEVectors
PDPINTA_ISR,//EV-A
PDPINTB_ISR,//EV-B
rsvd_ISR,
XINT1_ISR,
XINT2_ISR,
ADCINT_ISR,//ADC
TINT0_ISR,//Timer0
WAKEINT_ISR,//WD
//Group2PIEVectors
CMP1INT_ISR,//EV-A
CMP2INT_ISR,//EV-A
CMP3INT_ISR,//EV-A
T1PINT_ISR,//EV-A
T1CINT_ISR,//EV-A
T1UFINT_ISR,//EV-A
T1OFINT_ISR,//EV-Arsvd_ISR,
//Group3PIEVectors
T2PINT_ISR,//EV-AT2CINT_ISR,//EV-AT2UFINT_IS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TIDSP 学习 纪要