1.TI DSP系列中文手册:TMS320C55x系列DSP指令系统、源码开发工具与编程指南目录
2.TIOVX 源码学习: openvx理解
3.TLV320AIC23çåºç¨
4.2.1软件架构分析-新建工程
5.长文分享丨TI AM5718的源码PRU开发详解
TI DSP系列中文手册:TMS320C55x系列DSP指令系统、开发工具与编程指南目录
TI DSP系列的源码TMSCx系列DSP指令系统、开发工具与编程指南提供了一个详细的源码入门指南。以下是源码文章的主要部分概述: 第1章,Cx编程基础,源码仿懒人图库 源码首先介绍了TMSCx的源码结构和优化代码开发流程。本章包括:1.1.1 TMSCx的源码硬件架构
1.1.2 优化代码开发的关键步骤
1.2 基础教程,从编写汇编代码开始,源码涵盖链接过程、源码程序建立、源码测试和代码计时等
1.3 定点算术运算,源码涉及不同运算的源码指南和处理溢出的方法
1.4 TICx DSPLIB,讲解了库的源码功能、数据类型和调用方法,源码以及示例程序的获取途径
第2章详细阐述了Cx汇编语言指令系统,包括术语、寻址方式和开发工具的介绍,如不可重复指令、并行特性和资源管理等。通讯源码论坛 第3章专注于开发工具,如COFF格式、汇编器和链接器的工作原理,以及如何使用Cx汇编器进行源代码处理。 第4章和第5章则介绍了Cx/C++语言的使用以及代码优化技术,帮助开发者在性能和编程效率之间找到平衡。TIOVX 源码学习: openvx理解
学习TIOVX源码的关键在于理解其原理和实际应用。首先,需要参考专业资源了解OpenVX和TIOVX的基本概念。OpenVX是一种基于硬件抽象层的图像处理框架,其目的在于在不同硬件平台上提供统一的API接口,而TIOVX则是对OpenVX标准的实现,特别强调在DSP上的自定义开发。
在TIOVX中,用户可以利用User Kernel扩展OpenVX的功能,但仅限于CPU环境。为了弥补这一限制,TIOVX引入了Target Kernel概念,允许用户在DSP上进行自定义开发,敬业果源码从而提升特定任务的性能。
理解TIOVX源码时,可以从官网教程出发,通过官方提供的示例来掌握Target Kernel和User Kernel的编写、调度及生命周期管理。这包括在AddUserKernel中指定运行前、运行时和运行结束后执行的函数。
在实际应用中,TIOVX与OpenCV类似,都专注于图像处理,涉及上下文(Context)、图(Graph)和节点(Node)等概念。了解AppObj结构体,有助于更深入地理解TIOVX的内部运作。AppObj包含运行各阶段所需的变量,如TIDLObj用于管理网络参数、ImgMosaicObj用于图像参数、DisplayObj用于显示参数、ScalerObj用于图像列表相关变量。尊宝源码
为了更高效地学习和应用TIOVX,建议从TI官方提供的例子出发,详细阅读文档,理解结构体嵌套关系,以便在具体项目中调用API时更加得心应手。通过这些步骤,可以逐步掌握TIOVX源码的核心内容及其在实际项目中的应用。
TLVAICçåºç¨
TLVAICçåºç¨:åºäºDDKçTLVAICåç¼è§£ç å¨ç驱å¨è®¾è®¡
DSP/BIOS Driver Developerâs Kit(DDK)æ¯TI为ç®å驱å¨ç¨åºå¼å为TMSç³»åDSPåå ¶EVMæ¿çæä¾ç驱å¨ç¨åºå¼åå¥ä»¶ã该å¥ä»¶ä¸ºTMSç³»ååç§å¤å´å¨ä»¶æä¾å®æ´çæ åå驱å¨ç¨åºæ¨¡åï¼ä½¿å¾é©±å¨ç¨åºå¯ä»¥å¾æ¹ä¾¿å°ç§»æ¤å°å ¶ä»åºç¨ä¸ï¼å¤§å¤§æé«é©±å¨ç¨åºå¼åçæçãDDKæ¯å¯¹æ¯ç§TMSç³»åDSPé½æä¾çè¯çæ¯æåº(Chip Support LibraryâCSL)çè¡¥å ï¼CSLæä¾å¯¹å¤å´å¨ä»¶å¯åå¨é ç½®ååå§åççä½çº§æ§å¶ï¼DDKå®å ¨éè¿CSLæ¥å¯¹å¤å´å¨ä»¶è¿è¡æ§å¶ãç®åå°è¯´ãDDK建ç«å¨CSLä¸å±ï¼æ以ç¨DDKæ¥å¼å驱å¨ç¨åºå°æ´ä¸ºå¿«æ·ä¸å¯ç§»æ¤æ§æ´å¥½ã
DDK为å¼å驱å¨ç¨åºå®ä¹äºæ å模ååä¸ç³»åçAPIã为ç®åç¨åºè®¾è®¡ãæ å模åå被å为äºä¸ªå±æ¬¡ï¼å ¶ä¸é«å±ç§°ä¸ºClass driverï¼ä½å±ç§°ä¸ºMiniâdriverãClass driveiä¸å¨ä»¶ç¸å¯¹ç¬ç«ï¼å®æ诸å¦ç¼å²åºç®¡çå请æ±åæ¥çåè½ï¼åæ¶æ®æ¼çä¸APIåMiniâdriveräºè æ¥å£çè§è²ãMiniâdriverå®æç¹å®çå¨ä»¶åå§ååæ§å¶åè½ï¼å®ç¬¦åIOM(I/O Miniâdriver)çæ¥å£æ åãDDKçè¿ç§åå±ç»æ使å¾é©±å¨å¼å人åä» éäºè§£åä¸çMiniâdriver APIå°±å¯ä»¥å®ææ´ä½å¤å´å¨ä»¶ç驱å¨è®¾è®¡ï¼èä¸è¿ä¸è¿ç¨æ¯è®¾è®¡æ´ä¸ªé©±å¨ç¨åºè¦ç®åå¾å¤ï¼å 为Class driveræ§å¶äºç¼å²åºç®¡çååæ¥çãDDKæä¾3ç§Class driverï¼åå«ä¸ºSIO/DIOãPIP/PIOåGIOï¼å®ä»¬é½å¯ä»¥åä»»ä½Miniâdriverç»å使ç¨ã
2 TLVAICç驱å¨è®¾è®¡åºç¡
DDKçæ å模åç»æå¦å¾1æ示ãé«å±çåºç¨ååºå±é©±å¨ç¸äºæ²¡æç´æ¥çå ³èï¼å¼åä¸åªééè¿Class driveræ§å¶Miniâdriverã
ä¸é¢ä»¥DM EVMæ¿ä¸ºä¾ï¼è¯´æåºäºDDKçTLVAICç驱å¨ç¨åºè®¾è®¡æ¹æ³ã
é¦å ï¼éè¦ä½¿ç¨é ç½®å·¥å ·å»ºç«é©±å¨ç¨åºçå ¥å£ãå¨DSP/BIOS con_figä¸çcdbæ件ä¸ï¼ä¾æ¬¡éæ©In-puffOutplut---Deviee DriversâUserâdefined Driversï¼å¨è¿äºä¾ç¨ä¸ä¸è¬å·²ç»æ·»å äºudevCodecï¼å¦æéè¦çè¯ï¼ç¨æ·å¯ä»¥èªè¡æ·»å æç¼è¾ãå³é®åå»éæ©Propertiesé项æ¥ç¼è¾å ¶å±æ§ï¼å ¶å±æ§åºè®¾ç½®å¦ä¸ï¼
Commentï¼å¯ä»¥å å ¥èªå·±ç注é
lnit functionï¼é®å ¥EVMDM_EDMA_AICä¸init
Function table ptrï¼é®å ¥ EVMDM_EDMA_A-ICä¸Fxn8
Function table typeï¼éæ©IOM_Fxns
Deviceidï¼è¯¥é¡¹ä¼è¢«èªå¨å¿½ç¥ï¼å 为DM EVMæ¿ä¸åªæä¸åTLVAIC
Device params ptrï¼TLVAICåæ°ç»æçå ¥å£æéï¼ä½¿ç¨ç¼ºçåæ°æ¶è®¾ä¸º0x0
Device global data ptrï¼å¿ 须设置为OxO
æ£ç¡®é 置驱å¨ç¨åºå ¥å£åï¼å°±è¦æç §éè¦è®¾ç½®ç¸å ³çåæ°ãä¸é¢å ·ä½è®¨è®ºTLVAICåæ°ç设置ã
TLVAICçåæ°ç»æä½ååå¦ä¸ï¼
typedef struct
å¨ä¸è¬åºç¨ä¸ãä¸è¿°ç»æä½ç大å¤æ°åæ°æ éæ´æ¹ï¼éè¦ä¿®æ¹ç主è¦æ¯aieConfigï¼å®æ¯TLVAICæ§å¶å¯åå¨å¼ï¼éè¦éè¿å®æ¥æ§å¶TLVAICçå·¥ä½æ¨¡å¼ãè¾å ¥/è¾åºéæ©ãéæ ·ççéè¦åæ°ã
é¤äºå¤ä½å¯åå¨å¤ï¼TLVAICå ±æ9个æ§å¶å¯åå¨ï¼æ¯ä¸ªå¯åå¨æ§å¶åé¿ä¸º9bitï¼å°åä½ä¸º7bitï¼å ±æbitãå°åä½ä¸ºé«7ä½èæ§å¶åå¨ä½9ä½ãå ·ä½å¦ä¸ï¼
Register0:左声éè¾å ¥é³éæ§å¶ï¼ç¼ºçå¼ä¸º 0x
Register1:å³å£°éè¾å ¥é³éæ§å¶ï¼ç¼ºçå¼ä¸º 0x
Register 2ï¼å·¦å£°éè¾åºé³éæ§å¶ã缺çå¼ä¸ºOxF9
Register 3ï¼å³å£°éè¾åºé³éæ§å¶ï¼ç¼ºçå¼ä¸ºOxF9
Register 4ï¼æ¨¡æé³é¢éé设置ï¼ç¼ºçå¼ä¸ºOx
Register 5ï¼æ°åé³é¢éé设置ã缺çå¼ä¸º0x
Register 6ï¼èçµæ¨¡å¼æ§å¶ï¼ç¼ºçå¼ä¸º0x
Register 7ï¼æ°åé³é¢æ¥å£æ ¼å¼æ§å¶ï¼ç¼ºçå¼ä¸º0x
Register 8ï¼éæ ·çæ§å¶ï¼ç¼ºç为kHzï¼å¯¹DMEVMæ¿ï¼ç¼ºçå¼ä¸ºOx
Register 9ï¼æ°åé³é¢æ¥å£æ¿æ´»å¼å ³ï¼ç¼ºçå¼ä¸º0x
é常æ åµä¸éè¦ä¿®æ¹çå¯åå¨å æ¬4å·å8å·å¯åå¨ï¼å³éæ©æ¯ç±micè¾å ¥è¿æ¯ç±line inè¾å ¥åæ ¹æ®éè¦éæ©éæ ·çãè¿2个å¯åå¨ç详ç»é ç½®å¦ä¸ï¼
4å·å¯åå¨é ç½®è§è¡¨1ï¼å ¶ä¸ï¼D2ä½ãINSEL(In-put select for ADC)æ¯è¾å ¥éæ©ï¼âOâ为line inï¼âlâ为mic.D1ä½MICM(Microphone mute)æ¯micéé³å¼å ³ï¼ä¸ºâlâ表示éé³ãDOä½MICB(Microphone boost)å¦è®¾ç½®ä¸ºâ1âå°ä¸ºmicè¾å ¥æä¾dBçå¢çã8å·å¯åå¨é ç½®è§è¡¨2ï¼å ¶ä¸ï¼éæ ·çæ§å¶ä½ä¸ºD5~D2çSR[3ï¼O]ã对äºDM EVMæ¿ï¼è®¾ç½®æ¹å¼è§è¡¨3ã
å¯è§ï¼éè¦éè¿4å·å¯åå¨çD2æ¥éæ©è¾å ¥ï¼åæ¶èèDlåDO对micçæ§å¶ï¼éæ ·ççæ§å¶éè¿è®¾ç½®8å·å¯åå¨çSR[3ï¼0]æ¥å®ç°ã
3 TLVAICç驱å¨é ç½®æ¹æ³
å¾å¤åå¦è å¨è¿è¡DM EVMçechoæå ¶ä»é³é¢ä¾ç¨æ¶ï¼æ容æ碰å°çé®é¢æ¯éè¿line inè¾å ¥æ¶æè¾åºï¼èéè¿micè¾å ¥æ¶æ²¡æè¾åºï¼æ´ä¸è¦è¯´æ¹åéæ ·çäºãå³ä½¿åèèµæç¼è¾aic-håemvdm_edma_aicï¼hä¿®æ¹Dcfauhåæ°ä»ç¶æ æ³è§£å³ã
åºç°è¿æ ·çé®é¢æ¶ãé¦å è¦äºè§£TLVAICç模æé³é¢è¾å ¥ä¸ºmicåline inäºéä¸çï¼å ¶æ¬¡è¦ç¥éå¦ä½è½å¤æ£ç¡®é ç½®TLVAICçåæ°ä½¿ä¹æ»¡è¶³ç¹å®åºç¨çéè¦ãå¦æä»ç»åæechoä¾ç¨åå ¶ä»é³é¢ä¾ç¨çè¯ï¼å¯ä»¥åç°åªæå¨echoä¾ç¨ä¸å å«äºaie.håemvdm_edma_aieï¼h 2个头æ件ãå ¶å®å¨echoä¾ç¨ä¸ï¼æå å«çè¿2个头æ件åTLVAICçåå§åè¯å¥å®é 并æªä½¿ç¨ãå¦æå±è½æ对è¿2个头æ件çå å«ä»¥åTLVAICçåå§åè¯å¥ï¼ä¼åç°ç¼è¯åä»ç¶è½å¤æ£å¸¸è¿è¡ãå®é ä¸echoä¾ç¨ä¸çTLVAICåå§åè¯å¥åªæ¯æä¾äºå¯¹â ¡,VAICè¿è¡é ç½®çä¸ç§æ¹æ³è并æªç´æ¥ä½¿ç¨ã该æ¹æ³å¨DDKå çemvdmé¨å说ææ件ä¸ä¹å·²æåã
ç±äºå¨echoä¾ç¨ä¸åå§å驱å¨ç¨åºäººå£åå ¶ä»çé³é¢ä¾ç¨ä¸æ ·ä½¿ç¨äºé»è®¤åæ°ï¼èé»è®¤åæ°æ¯éè¿è°ç¨DDKå ä¸çevmdm_edma_aicï¼åºè·å¾çï¼è¯¥åºä¸ååé ç½®ä¹ä¸åï¼äºæ¯å°±ä¼åºç°ä¸è¿°é®é¢ã
å¨æç¡®äºä»¥ä¸åçåï¼éè¿å®è·µè¯æï¼æ¬ææä¾ç以ä¸ä¸ç§é ç½®æ¹æ³å¯ä»¥éåºåç§åºç¨ã
æ¹æ³ä¸
æ¢ç¶é»è®¤åæ°æ¯éè¿è°ç¨evmdm_edlna_a-icï¼åºè·å¾çï¼é£ä¹èªç¶å¯ä»¥éè¿ä¿®æ¹è¯¥åºæ¥è¾¾å°ä¿®æ¹åæ°çç®çãTIæä¾çDDKå ä¸å å«äºåç§åºçæºä»£ç ï¼è¿ä½¿å¾ä¿®æ¹åºæ件æ为å¯è½ãæ¬æç¨å°çåºçæå·¥ç¨æ¯tiddksrc\audio\evmdmç®å½ä¸çevmdm_edma_mc_ï¼pjtï¼åªéè¦æå¼è¯¥å·¥ç¨ï¼ä¿®æ¹å ¶ä¸aicï¼hä¸çé»è®¤åæ°ï¼éæ°ç¼è¯å°±è½çææ°çåºæ件ãè¿æ ·ï¼ææçé³é¢ä¾ç¨é½ä¼é»è®¤æä¿®æ¹è¿çåæ°è¿è¡ã
è¿ç§æ¹æ³éåTLVAICåæ°é ç½®ç¸å¯¹åºå®çåºç¨åºåãé ç½®å®å ¨éè¿è°ç¨evmdm_ed_ma_aicï¼åºåå§åæ¶è¿è¡ï¼ä¸ç¨å¨åºç¨å·¥ç¨æ件ä¸æ·»å ä»»ä½éå 代ç ï¼ä½¿å¾å·¥ç¨æ件æ´ç®æ´ï¼å¯ç§»æ¤æ§æ´é«ã
æ¹æ³äº
èªå®ä¹ç¬¦åæ åç»æEVMDM_EDMA_Aï¼ICä¸DevParamsçç»æä½ï¼ä¾å¦ï¼
ç¶åå°â_myParmsâä½ä¸ºDevice params ptrå¨æå®äººå£æéæ¶æ¿ä»£é»è®¤ç0x0ãè¿å°±ç¬¦åTIæ¨èçæ¹æ³ï¼å¨echoä¾ç¨ä¸çç¸å ³ä»£ç ä¹è¯´æäºè¿ç§æ¹æ³ã
è¿ç§æ¹æ³è½å¤éåºå ä¹ä»»ä½ä½¿ç¨æ åµï¼åå§ååæ°èªå®ä¹é常æç¡®ï¼ä»£ç æ读æ§è¾é«ãä½æ¯ä¸å»ºè®®åechoä¾ç¨ä¸é£æ ·ç´æ¥å å«é»è®¤åæ°ç头æ件ï¼æ好åç §è¯¥å¤´æ件å®ä¹èªå·±çç»æä½ã
æ¹æ³ä¸
éè¿ä»ç»åæçæevmdm_edma_aicï¼åºçæºä»£ç ï¼å¯ä»¥åç°å¯¹TLVAICå¯åå¨ç设置æ¯éè¿AIC_setParams()å½æ°æ¥å®æçãå¨å¤§å¤æ°æ åµä¸ï¼åªè¦ä¿®æ¹å¯åå¨å¼èä¸å¿ ä¿®æ¹æ åç»æEVMDM_EDMA_AIC_DevParamsç»æä½ä¸çå ¶ä»åéãæ以å¯ä»¥è°ç¨AIC_setParams()å½æ°æ¥å®æ对TLVAICåæ°çé ç½®ãè¿æ ·å°±åªéè¦å®ä¹1个符åæ åçå¯åå¨æ°ç»ï¼å°æ°ç»åä½ä¸ºåæ°æ¥è°ç¨AIC_setParamsf()å½æ°å°±å¯ä»¥è¾¾å°ç®çã
è¿ç§æ¹æ³ä½¿ç¨çµæ´»ï¼ä»£ç é¿åº¦å¾çï¼å«ä¹é常æç¡®ï¼å¯ä»¥ç¨ä¸ååæ°å¤æ¬¡è°ç¨ï¼å°¤å ¶éç¨äºTLVAICåæ°å¯åçç¹æ®åºåã
å¨å®é å·¥ä½åºç¡ä¸å¯¹TLVAICåæ°é ç½®æåºäº3ç§æ¹æ³ï¼åæç¹ç¹ä¸é½ååå®ç¨ãå¨è¿è¡åºäºDDKçTLVAIC驱å¨ç¨åºè®¾è®¡æ¶ï¼å¯ä»¥æ ¹æ®éè¦æ¹ä¾¿å°éç¨ã
2.1软件架构分析-新建工程
为了深入理解BUCK电路的软件架构,本章节将专注于软件部分,同时穿插一些可能影响软件设计的硬件知识点。本小节将介绍所需的软件平台、新建工程,并对工程文件进行分析。
首先,你需要下载并安装两个软件,分别是TI官方提供的CCS软件和controlSUITE软件。我已经将CCS6.1版本上传至网盘,链接如下:pan.baidu.com/s/1v-T9Fr... 提取码:tc9b。请注意,邯郸ios源码遇到安装问题时,可以参考百度。TI官网也提供较新版本的CCS软件,供你下载。
接着,获取TI开源BUCK demo板中的FM软件。你可以通过TI官网下载最新安装包,或者从网盘下载controlSUITE软件安装包。控制SUITE软件安装包链接如下:pan.baidu.com/s/1mWNNj7... 提取码:1nhi。之后,在安装目录找到BOOSTXL_BUCKCONV目录,最新的版本路径为:ti\controlSUITE\development_kits\BOOSTXL_BUCKCONV\v1___\Buck_VMC_FM。建议不要在该目录下直接打开工程,而是复制到个人工作文件夹进行编辑和修改。
接下来,在安装完软件平台后,使用CCS软件新建工程,探索神秘的源代码。首先,双击CCS软件图标,创建一个workspace目录,用于存放软件工程。然后,导入TI提供的代码工程,选择Project->Import CCS Projects,确保勾选“Copy projects into workspace”,完成导入,查看弹出的工程。
在工程文件中,首先双击CCS软件图标,创建一个workspace目录,以存放软件工程。在导入TI提供的代码工程时,通过点击Project->Import CCS Projects,注意确保“Copy projects into workspace”选项被选中,点击Finish即可查看工程。此时,可以显示工程文件,后续章节将详细介绍文件内容。
完成工程文件导入后,点击Project->Build All,开始编译,确保生成OUT文件。对于CCS软件中的文件夹和文件,本小节将进行简要说明。在下一节,我们将深入分析整体软件框图和相关实验验证过程。
长文分享丨TI AM的PRU开发详解
揭示TI AM PRU开发的深度解析 在TI AM这款强大的SoC中,PRU-ICSS单元发挥着关键作用,通过实时定制实现产品差异化。PRUSS是一个独特的位RISC处理器,配备专属内存,直接连接到L3_MAIN总线,ARM和DSP等其他模块也可通过它进行高效通信。每一块PRU拥有位互连,KB指令RAM,8KB数据RAM和B共享内存,数据RAM通过映射地址供其他模块访问。 PRU-ICSS的基石组件 PRU-ICSS包括两个部分,icss1和icss2,它们分别具备电源域实例化、主控和配置端口,中断控制器,以及本地时钟管理等实用功能。其中,内存映射如下:1.1 独立指令空间(0x-0xFFF)
1.2 8KB数据RAM(0x-0xFF,其他模块可访问)
1.3 全局地址空间:PRU_ICSS1位于0x4B2A,PRU_ICSS2位于0x4BE
外部模块通过L3_MAIN总线的全局地址访问PRU资源,实现无缝交互。 关键寄存器详解 PRU寄存器世界中,控制和状态至关重要。例如:PRU_CONTROL:掌控PRU的运行模式和状态。
PRU_STATUS:程序指针寄存器,实时反映PRU运行进度。
WAKEUP_EN:通过设置R位和相应的唤醒信号,唤醒沉睡的PRU。
CYCLECNT:以PRU时钟周期计数,COUNTENABLE和CONTROL指令起决定作用。
STALLCNT:记录PRU执行指令时的暂停计数。
PRUSS_DBG_GPREG:调试通用寄存器,对应R0-R,用于深入了解PRU工作。
R事件/状态寄存器:读写操作各异,用于触发中断输出,执行特定功能。
R通用输出寄存器:连接到PRU的外部接口,输出数据。
PRU中断控制器:支持个系统事件和个中断通道,高效管理中断流程。
中断映射:通过PRUSS_INTC_CMR和PRUSS_INTC_HMR进行通道和事件的配置。
深入探索,飞凌嵌入式OK开发板提供了丰富的实例源码,如7.4和7.5节的官方文档和飞凌示例程序,助您快速上手。 软件调试实战 想要驾驭PRU,你需要强大的调试工具。使用XDSV2 USBJTAG仿真器,通过飞凌调试适配板连接JTAG接口,为你的PRU代码保驾护航。在CCS仿真器中,你可以进行如下操作:全速运行或暂停程序
单步执行,选择进入或跳过函数
汇编级别单步跟踪
监控变量和寄存器值,通过Watch Expression进行实时查看
当进入调试模式,你可以观察到GPIO值变化,以及R寄存器的实时更新。这样,每一次调试步骤都将揭示PRU运行的奥秘。 深入了解更多详情,请参考[1],探索PRU在AM中的无限可能。AMx Technical Reference Manual