ti dspbios 4:线程调度( part 1 )
DSP入门教程(非常经典)
5、如何高效开始 TI DSP 的软件开发 如果你不是纯做算法,而是在一个目标版上进行开发, 需要使用 DSP 的片上外设,需要控 制片外接口电路,那么建议在写程序前先好好将这个目标 版的电路设计搞清楚。最重要的是 程序、数据、I/O 空间的译码。不管是否纯做算法还是软硬结合, DSP 的 CPU,memory,program memory addressing, data mem.ory addressing 的资料都需要看.
DSP 的内部指令周期较高,外部晶振的主频不够,因此 DSP 大多Байду номын сангаас片内均有 PLL。但每个 系列不尽相同。
1)TMS320C2000 系列: TMS320C20x:PLL 可以÷2,×1,×2 和×4,因此外部时钟可以为 5MHz-40MHz。 TMS320F240:PLL 可以÷2,×1,×1.5,×2,×2.5,×3,×4,×4.5,×5 和×9,因此外部时钟 可 以为 2.22MHz-40MHz。 TMS320F241/C242/F243:PLL 可以×4,因此外部时钟为 5MHz。 TMS320LF24xx:PLL 可 以由 RC 调节,因此外部时钟为 4MHz-20MHz。 TMS320LF24xxA:PLL 可以由 RC 调节,因此外部时钟为 4MHz-20MHz。
3)C6000 系列:C62XX,C67XX,C64X 该系列以高性能著称,最适合宽带网络和数字 影 像应用。32bit,其中:C62XX 和 C64X 是定点系列,C67XX 是浮点系列。该系列提供 EMIF 扩展 存储 器接口。该系 列只提供 BGA 封 装,只能制作 多层 PCB。且功耗较 大。同为浮点 系列的 C3X 中的 VC33 现在虽非主流产品,但也仍在广泛使用,但 其速度较低,最高在 150MIPS。
内容3--德州仪器(TI)的系列DSP
通过PB总线完成数据传递
PB总线能把存储在程序空间的数据操作 数(如系数表)传送到乘法器和加法器 中进行乘/累加运算,或者在数据移动指 令(MVPD和READA)中传送到数据空 间。这种能力再加上双操作数读的特 性,支持单周期3操作数指令的执行,如 FIRS指令。
21:51:26
21:51:26
15
第二部分 DSP硬件结构
在这一部分中,我们介绍:
TMS320LF240X的 硬件结构 TMS320VC3X的硬 件结构 TMS320C6201的 硬件结构 重点介绍: TMS320C54XX硬 件结构特点 ★
21:51:26 17
§2-1 TMS320LF240X的硬件 结构
各大公司定点DSP性能比较
21:51:26
13
浮点DSP的性能比较
21:51:26
14
DSP主要供应商的网站
德州仪器(TI):http:\\, http:\\ 模拟器件(ADI): http:\\ 郎讯科技:http:\\ 莫托罗拉:http:\\
21:51:26 11
定点DSP与浮点DSP
在DSP运用中的数据保真性很重 要,因此在定点DSP中必须要特别 考虑运算过程中可能出现的溢出等 情况。在定点DSP中,累加器一般 比存储器字长大,并特别设置了溢 出模式位,可以选择在溢出情况下 的处理方法,从而尽量降低数据失 真。
21:51:26 12
57
ALU框图:
21:51:26
58
累加器:
累加器ACCA和ACCB存放从ALU或乘 法器/加法器单元输出的数据,累加器也 能输出到ALU或乘法器/加法器中。
21:51:26
59
DSP-BIOS的应用v2.1.1
DSP/BIOS 的 API模块
电子科技大学
◆STS模块:用于状态统计管理,可以在CCS下查看这 些统计参数。 ◆SWI模块:用于管理软件中断。CCS将运行队列中 的软件中断,并可以设置15个优先级,但都比硬件中 断低。 ◆SIO模块:流式I/O管理模块,可用于设备驱动模块 与任务或软件中断之间的数据交换。 ◆MXB模块:管理邮箱,实现任务间同步或通讯。 ◆QUE模块:用于任务或线程的队列管理。 ◆SEM模块:旗语管理,用于任务或线程间的同步。
后台线程(IDL线程) • 任务(TSK模块) • 软件中断(SWI模块) • 硬件中断(HWI模块)
•
DSP/BIOS 的线程类型
HWI
硬件中断
电子科技大学
HWI 的优先级由硬件中断决定 每个硬件中断提供一个ISR SWI 有14个优先级 同一优先级可以有多个SWI线程. TSK 有15个优先级 同一优先级可以有多个TSK线程. IDL 线程包括多个IDL函数 这些函数会连续反复调用.
SWI
Priority
软件中断
TSK
线程
IDL
后台线程
HWI 线程由硬件中断触发 ! IDL 为后台运行的线程.
线程选择的一般原则
电子科技大学
严格的实时性 :如果线程的执行需要
严格的实时性,而线程执行需要的时间 又很少时,你可以使用硬件中断或时钟 函数来完成。CLK时钟函数也是在硬件中 断中执行的。
部分实时性:执行时间较长,使用 SWI软件中断或TSK任务线程来完成 一些非实时性的处理任务。这样可 以减少中断的潜伏期,提高响应实 时性请求的能力。
线程选择的一般原则
电子科技大学
周期性的服务:需要周期性或在固定的
DSP/BIoS在数字监测接收机中的应用
机 通 过周 期 地 扫 描 给 定 频 段 , 利用 频 谱 分 析 测 量 频 谱 占用
度 、 率 发 射 类 型 、 宽 和 载 干 比 等 参 数 , 实 现 自 动 频 带 并
测量。
2 数 字 监 测接 收 机 系统
2 1 数 字 监 测 接 收机 系统 分 析 .
数 字 监 测 接 收 机 工 作 原 理 如 图 1所 示 。数 字 监 测 接
l l
_
_
DS / I P B oS在 数 字 监 测 接 收 机 中 的 应 用
杨 磊 , 会 勇 李
( 电子 科 技 大学 电子 工 程 学 院 , 都 6 1 3 ) 成 1 7 1
助 。实 时 分 析 工 具 主要 包 含 两 方 面 的 内容 : 时 数 据 交 换 实
引 言
} 过口 l fl ! 通I制 l II P 三 园 鹭躯 接 } s控 计 远 算 堡 程 机 塑
控制与 数据分析
中频 数 字 信 号 处 理 器 是 系统 的核 心 部 件 , 责 对 宽 带 负
1 1 多线 程 实 时 内核 .
DS / 1 P B 0S设 计 的 主 要 目的 是 降 低 存 储 器 需 求 的 空 间和 CP 响应 时 间 。 这 种 设 计 有 利 于 缩 减 程 序 代 码 量 , U 提 高 系 统 模 块化 程 度 , 降低 指 令 的执 行 周 期 以 及实 现后 台
I 测 试 等 工作 。 TU DS P需 要 利 用 D P B OS操作 系 统实 现 以下 功 能 : S /I 接
库 。多 线 程 实 时 内核 维 护 调度 多线 程 的运 行 , 责 任 务 负 的调 度 及 时 问 轮 询算 法 的实 现 ; 时 分 析 工 具 提 供 线 程 算 实 法 实 时 运 行 的情 况 , 便 用 户 验 证 系 统 设 计 的 正确 性 和 可 方 靠 性 ; 片 支 持 库 负 责 管 理 外 设 资 源 , 用 图形 工 具 便 可 芯 利 完 成 复 杂 的 外设 寄存 器 初 始 化 配置 。
嵌入式实时操作系统-BIOS
RTOS是针对不同处理器优化设计的高效率实 时多任务内核。据专家预测,在优秀RTOS上 跨处理器平台的程序移植只需要修改1%~ 5 %的内容。它的引入解决了嵌入式软件开发标
准化的难题。基于RTOS开发出来的程序具有 较高的可移植性,引入RTOS相当于引入了一 个新的管理模式,可减少重复劳动,提高知识
空闲循环是DSP/BP和主机分析工具间的通信通常在空闲 状态循环中执行。这保证了分析工具不会影响 应用程序的处理。
DSP/BIOS运行优先级最高的线程
当下面情况发生时, 不一定运行优先级最高的 线程: (1) HWI_disable, SWI_disable或TSK_disable 被调用 (2) 高优先级的任务处于阻塞时,即调用了 TSK_sleep, LCK_pend, MBX_pend, or SEM_pend.
DSP/BIOS的SWI模块提供了软件中断的能力。通过 在程序中调用一个API函数,即可触发中断。优先级 介于硬件中断与任务之间。适用于处理频率较低或 者实时性没有硬件中断严格的程序作业。
当软件中断被触发时,它会在等待中的硬件中断都 执行完后才开始执行。正在运行的SWI线程在任何时 刻都可以被高优先级抢断。另一方面,SWI线程总能 抢占任务的执行。
3.1.2 时钟管理模块CLK
CLK模块为用户周期性调用提供方法,同时对 一些代码评估工具提供了时间参考。实际上 CLK模块完全依赖于DSP的定时器中断。CLK 管理器还允许随意建立各种时钟函数,当定时 器中断发生时,CLK管理器就执行这些时钟函 数。
当定时器减至0时,便产生定时器中断。内核 进入中断服务子程序CLK_F_isr函数。
所有的DSP/BIOS对象都可以在配置工具中静态建立; 实时监测数据在主机端做格式化处理; API函数是模块化的,只有应用程序用到的API模块才
4、集成环境Code Composer Studio、DSPBIOS及实时调试
Classic Code Debugging
.out Executable Classic Debugger • • • • • Breakpoints Single step Registers Memory Disassembly
Emulator Interface Logic Analyzer Target System
DSP/BIOS II + CSL
TMS320 Algorithm Standard v2.2 Enhanced IDE Advanced Emulation
c55x Simulation Support
c64x Simulation Support Compiler Ease of Use --PBC and VL--
Extended Tektronix Intel MCS86 Motorola Exorciser TI SDSMAC
CCS Project
File Edit View Project Options
C source
Build
Linker
.map .out
ASM source Header and Include files
Simulator
CCS Debugging Workspace
File Edit View Project Debug Profiler Option My_Menu
•Create custom menu items •GEL files
• Monitor CPU consumption • Optimize code
Integrated Development Environment (IDE)
TI公司 DSP驱动模式 划分层次
TI公司 DSP驱动模式划分层次引言TI(Texas Instruments)公司是全球领先的半导体解决方案供应商之一。
他们提供多种型号的数字信号处理器(DSP)芯片,用于应用于多个领域,如通信、音频、图像处理等。
为了更好地利用DSP芯片的性能和功能,TI公司采用了一种划分层次的DSP驱动模式。
本文将详细介绍TI公司DSP驱动模式的划分层次以及每个层次的功能。
划分层次TI公司将DSP驱动模式划分为以下四个层次:1.应用层2.驱动层3.中间层4.硬件层下面将详细介绍每个层次的功能以及相应的驱动模块。
1. 应用层应用层是DSP驱动模式的最高层,通过应用层可以与DSP 芯片进行交互并执行特定的功能。
应用层提供了各种API接口,可以方便地访问DSP的功能和资源。
应用层的主要功能包括:•初始化DSP芯片•加载运行DSP代码•设置DSP芯片的参数•发送和接收数据2. 驱动层驱动层是位于应用层和中间层之间的中间层。
它负责与底层硬件交互,驱动DSP芯片的各个功能模块。
驱动层的主要功能包括:•控制DSP芯片的电源管理•配置DSP芯片的时钟和中断•提供对DSP芯片寄存器的访问接口•控制DSP芯片的数据流和DMA传输3. 中间层中间层是位于驱动层和硬件层之间的层次。
它主要负责对DSP芯片进行抽象和封装,以提供更高层次的接口和功能。
中间层的主要功能包括:•提供对DSP芯片的基本操作函数,如数学运算、滤波等•实现DSP芯片的算法库,提供更高级别的功能•封装底层驱动模块,提供统一的接口给上层应用层4. 硬件层硬件层是DSP驱动模式的最底层,它直接与硬件设备进行交互。
硬件层的主要功能包括:•与DSP芯片进行物理连接•实现DSP芯片的底层寄存器读写操作•控制DSP芯片的外设(如ADC、DAC等)•处理DSP芯片的中断信号驱动模块示例以下是TI公司DSP驱动模式中常见的驱动模块示例:1.UART驱动模块:用于与DSP芯片进行串行通信,实现数据的发送和接收。
开发DSP硬件驱动程序的一种方法
开发DSP硬件驱动程序的一种方法目前,TI公司的应用很广泛,随着DSP的功能越来越强大,片上外设种类及应用日趋复杂。
传统的DSP程序开发包含两方面程序:即配置、控制、中断等管理DSP片内外设、接口的硬件相关程序和基于应用的算法程序。
这样的系统结构,应用程序与硬件相关程序紧密的结合一起,限制了程序的可移植性和通用性,软件开发总要从零开头,存在诸多重复工作。
一旦硬件平台有变幻,往往与硬件程序捆绑一起的应用程序也需改动,代码的维护性和可移植性均不高。
通过建立硬件驱动程序的开发模式,可使上述现象得到充实。
因此,本文介绍一种开发TI公司DSP片内及片外硬件外设驱动程序的办法,并以C5000 DSP的McBSP/DMA及TMS320C5509的驱动程序开发为详细对象,介绍这种办法的应用。
基于DSP/BIOS的IOM硬件驱动在CCS应用环境中集成的实时操作系统DSP/BI-OS[1]中,硬件驱动程序终于以函数库的形式被封装起来,应用程序可不关怀底层硬件外设的详细操作,通过调用DSP/BIOS相关的标准API与不同外设接口。
接口按统一标准定义,即在DSP/BIOS中创建并配置硬件设备驱动模块为IOM(I/O Mini-driver)模式。
IOM[2]是DSP/BIOS的设备驱动模块的一种接口方式,配置硬件设备驱动模块为IOM模式可在DSP/BIOS的图形化界面(GUI)中便利完成。
IOM 模式将设备驱动程序分为两个层次:上一层是"类"驱动程序(class driv-er),这部分程序负责对存储缓冲区管理、由DSP/BIOS各类标准的API函数与应用程序接口,与设备硬件无关。
下一层是"迷你"驱动程序 (mini-driver),这部分程序集成了实际硬件相关的代码。
IOM 接口将"迷你"驱动程序与"类"驱动程序联系一起,包括定义I/O数据包 (IOM_Packet)以提交"迷你"驱动程序读写,定义功能函数包(IOM Fxns)完成相关初始化,打开或关闭通道,提交I/O数据传输与控制等任务,确保"迷你"驱动程序与"类"驱动程序运行协调全都。
DSPBIOS多线程入门级要点
1、多线程的意义,解决多个非相关的程序或函数同时运行的需求,这些程序运行和执行时间都有严格的要求。
这样的程序被称为线程(thread)。
在DSP中任何独立执行的指令流都被称为线程。
2、DSP/BIOS中线程分为HWI、SWI、Tasks、Background thread(IDL)。
HWI就是ISR,优先级最高,适合200kHz触发的任务;SWI适合100ms或者更大周期的触发任务;Task不同SWI之处在于它在执行过程中能被挂起直到必需资源有效,任务之间可以通过queue、semaphore、mailbox;其它不运行时才运行IDL;HWI和SWI不能挂起和等待;3、DSP中的三种函数。
CLK function,片内计数器触发,用HWI_INT14;Periodicfunction(PRD),SWI的一种;Data notification function,用户用pipe或者host channel(HST)传送数据的函数。
4、如何选择哪种类型的函数。
用HWI触发SWI或者Task;互相依赖的函数或者数据共享请求的用SWI;更为复杂的用Task,SWI比Task更节省内存(memory efficient);PRD用片上定时器的倍数触发或者外部周期性中断;5、SWI有14级优先级,加2为PRD;TSK有15级优先级,加1为IDL;6、硬件中断不能动态创建,但是ISR可以动态改变;7、HWI和SWI用专用的系统中断堆栈(application stack),而每个TSK用各自的stack。
没有TSK下,所有线程共用application stack,其可被放在快速存储器中。
8、HWI函数调用PIP APIs函数,这些函数也是中断函数的一部分9、HWI_restore()与HWI_enable的区别。
最外层的HWI_disable()调用禁止了中断,最内层的HWI_disable()调用将不作为,HWI_enable一调用中断即被开启,而HWI_restore()必须由最外层的函数调用才会开启中断,因此HWI_restore()比HWI_enable更好。
TI DSP_BIOS 4:线程调度( part 1 )
4.2.1 硬件中断的配置(图)
4.2.2 允许和禁止硬件中断
在一个软件中断或任务中,可以在一个关键段的处理中暂 时禁止硬件中断。 函数HWI_disable和HWI_enable/HWI_restore需成对使用 来禁止或允许中断。 HWI_disable和HWI_restore成对使用允许硬件中断嵌套。
4.1.2 线程的选择 (1)
SWI、TSK与HWI之间的选择: 硬件中断只处理时间要求苛刻的关键任务。 HWI可以处理发生频率在200KHz左右的事 件。软件中断或任务可以用于执行时间限 制在100us以上的事件。HWI函数应该触发 (post)软件中断或任务来进行低优先级处 理。使用低优先级线程可以减小中断禁止 的时间,允许其它中断的触发。
4.1.4 线程的比较 (1)
4.1.4 线程的比较 (2)
4.1.5 线程让出和抢先 (1)
DSP/BIOS运行优先级最高的线程 当下面情况发生时, 不一定运行优先级最高的线 程: (1) HWI_disable, SWI_disable或TSK_disable被 调用 (2) 高优先级的任务处于阻塞时,即调用了 TSK_sleep, LCK_pend, MBX_pend, or SEM_pend.
4.2.3 中断中的上下文切换和 硬件中断管理 (2)
HWI_enter ‘isr code‘ HWI_exit C62_ABTEMPS, C62_CTEMPS, IEMASK, CCMASK C62_ABTEMPS, C62_CTEMPS, IEMASK, CCMASK
C62_ABTEMPS和C62_CTEMPS ,决定 保存并恢复那些A、B或控制寄存器。 IEMASK,定义那些中断位需要被屏蔽。 CCMASK,定义CSR中的缓存控制位的 设置值。
1 CCSv4概述
1. CCSv4概述Code Composer Studio&™(CCS或CCStudio)是一种针对TI的DSP、微控制器和应用处理器的集成开发环境。
CCStudio包括一套用于开发和调试嵌入式应用程序的工具。
它包括用于各种TI设备系列的编译器、源代码编辑器、项目生成环境、调试程序、探查器、模拟器和其他许多功能。
CCStudio提供一个单一用户界面,指导用户完成应用程序开发流程的每一步骤。
类似的工具和界面使用户能够比以前更快地开始使用,并且能够向他们的应用程序添加功能,这些都归功于成熟的生产能力工具。
CCStudio版本4 (CCSv4)以Eclipse开源软件框架为基础。
CCSv4之所以以Eclipse为基础,是因为Eclipse为开发环境提供了一个优异的软件框架,是众多嵌入式软件供应商所使用的标准框架。
CCSv4 将Eclipse软件框架的优势和来自TI的高级嵌入式调试功能相结合,为嵌入式程序开发人员生成一个功能丰富的吸引人的开发环境。
1.1调试程序CCStudio的集成调试程序具有用于简化开发的众多功能和高级断点。
条件断点或硬件断点以全C表达式、本地变量或寄存器为基础。
高级内存窗口允许您检查内存的每一级别,以便您可以调试复杂的缓存一致性问题。
CCStudio支持复杂的多处理器或多核系统的开发。
全局断点和同步操作提供了对多个处理器和多核的控制。
1.2分析CCStudio的交互式探查器使快速测量代码性能并确保在调试和开发过程中目标资源的高效使用变得更容易。
探查器使开发人员能够轻松分析其应用程序中指令周期内或其他事件内的所有C/C++函数,例如缓存未命中/命中率、管道隔栏和分支。
分析范围可用于在优化期间将精力集中在代码的高使用率方面,帮助开发人员开发出经过优化的代码。
分析可用于任何组合的汇编、C++或C代码范围。
为了提高生产能力,所有分析设备在整个开发周期中都可供使用。
1.3脚本某些任务,例如测试,需要运行数小时或数天而不需要用户交互。
DSPBIOS设计指南详细
DSPBIOS设计指南详细DSP/BIOS是一款实时操作系统(RTOS),被广泛应用于嵌入式系统中。
本文将详细介绍DSP/BIOS的设计指南,帮助读者更好地使用和开发DSP/BIOS。
1.DSP/BIOS概述DSP/BIOS是德州仪器(Texas Instruments)开发的实时操作系统,特别适用于DSP(Digital Signal Processor)芯片应用。
DSP/BIOS提供了任务调度、任务管理、中断处理、资源管理等功能,提供了一种可靠和高效的方式来管理复杂的实时应用程序。
2.DSP/BIOS的优势DSP/BIOS具有以下优势:- 易于使用:DSP/BIOS提供了一套友好的API(Application Programming Interface),使用户可以方便地管理任务和资源。
-高度可配置:DSP/BIOS允许用户根据实际需求进行灵活的配置,以满足不同应用的要求。
-实时性能:DSP/BIOS通过优化的任务调度算法和中断处理机制,提供了快速响应和高效的实时性能。
3.DSP/BIOS的设计指南下面是一些DSP/BIOS的设计指南,供读者参考:3.1任务设计:-按照系统需求,将应用程序划分为多个任务。
每个任务负责独立的功能模块,可以利用DSP/BIOS的任务调度来管理任务的执行顺序。
-考虑任务的优先级和任务间的依赖关系,合理分配任务的优先级,确保高优先级任务能够及时得到处理。
-避免任务之间的竞争条件和资源冲突,可以使用DSP/BIOS的信号量和互斥体机制来保护共享资源。
3.2中断处理:-确保中断处理函数的执行时间尽量短,以避免影响其他任务的响应性能。
-合理设置中断的优先级和中断触发条件,确保关键中断的优先处理。
-对于高频率的中断,可以使用DSP/BIOS的中断优先级层次结构,将高优先级中断划分为多个子中断,以提高系统的可扩展性。
3.3资源管理:-确保所有任务和中断对资源的使用遵循一定的规则,防止死锁和资源冲突的发生。
TI DSP集成化开发环境(CCS)使用手册_彭启琮(2005)
第1章概论TI为其DSP设计的集成化开发环境CCS IDE,将建立DSP应用程序所需要的工具都集成在一起。
其主要成分包括:❑智能化的IDE,包括CodeMaestro技术。
❑C/C++编译器、汇编优化器以及连接器(代码生成工具)。
❑实时操作系统(DSP/BIOS)。
❑主机和目标系统之间的实时数据交换(RTDX)。
❑更新指导。
❑指令集仿真器。
❑高级事件触发。
❑数据可视化。
CCS IDE还简化了DSP系统的配置和应用程序的设计,使设计者能更快地开展工作。
其所支持的操作系统包括:❑Windows 98。
❑Windows 98 第二版。
❑Windows NT(服务包4或更高)。
❑Windows 2000(服务包1或更高)。
1.1 引言无线通信、语音识别、多媒体、因特网等新应用,都有赖于DSP提供强大的实时处理能力。
可编程的DSP使工程师们得以在保持优化的解决方案的同时,缩短将产品推向市场的时间。
但高效率的软件,需要充分利用DSP的功能。
随着新产品所集成的技术越来越多,工作于嵌入式项目开发队伍的规模迅速增大,同一个队伍可能工作于不同的场所,甚至不同的国度。
开发者在为实时系统选择处理器时,总要选择先进的、容易使用的开发工具。
1.2 开发流程TI DSP集成化开发环境(CCS)使用手册2基于DSP的开发流程如图1-1所示。
第1章 概 论3图1-1 开发流程1.3 应 用 设 计1.3.1 CCS 的SetupCCS 的Setup 是一个公用程序,用来定义用户要使用CCS IDE 的目标板或仿真器。
这些信息称为系统的配置,包括处理和目标板通信的器件驱动器、描述用户目标板特性的其他信息和文件,例如默认的存储器分布。
CCS IDE 需要这些信息来建立和用户目标板的通信,决定对于特定的目标板,哪些工具可以使用。
DSK (DSP 初学者套件)是自动配置的。
在默认的情况下,软件仿真器就要求CCS IDE 作配置。
用户可以在装入CCS IED 之前,改变系统的配置来与开发环境相匹配。
DSP -BIOS实时多任务操作系统内核的研究
DSP /BIOS实时多任务操作系统内核的研究摘要本文介绍了ti公司tms320c6713的dsp/bios实时多任务操作系统内核,通过研究分析 dsp/bios的启动顺序,线程指令流在dsp中存在的方式以及调度的优先级,线程间的让出与抢中,总结出多任务的执行状态和调度的规律。
最后将该多任务操作系统应于某伺服控制系统,取得了良好的效果。
关键词 bios;dsp;线程抢占;任务中图分类号tp39 文献标识码a 文章编号 1674-6708(2010)33-0220-020 引言dsp/bios是ti公司特别为其tms320c6000tm、tms320 c28xtm系统dsp平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核,是ti公司的code composer studiotm开发工具的组成部分之一。
1 dsp/bios启动序列当一个应用程序启动时,boot.s54(c54x 平台)或autoinit.c和boot.snn(c600g 平台)文件中的代码决定了其启动序列,这些文件的编译版本由 biosi.ann 库提供。
一般bios启动顺序如下:1)初始化dsp:dsp/bios程序从c或c++环境入口点c_int00开始运行,而复位中断向量被设置为复位后跳转到c_int00,对c600来说,系统堆栈指针(b15)和全局页指针(b14)被初始化分别指向.stack段的末尾和.bss段的开始。
2)当堆栈建立好后,初始化程序用.cinit段中的记录初始化全局变量。
3)调用bios_init初始化程序中用到的dsp/bios 模块,bios_init由配置生成并位于programcfg.snn文件中。
主要完成三个子模块的初始化。
hwi_init:硬件中断,设置istp和中断选择寄存器。
hst_init:初始化主机i/o通道接口,该程序决定主机与目标dsp 的连接方式;idl_init:空闲循环的指令计数。
《DSP器件及应用》4-1-TiDSP指令系统
寻址方式考虑
在对数据块、流的处理中,基于间接寻址的操作, 一般效率更高,因其地址的变更是不额外耗时的。 另外,间接寻址中的位反转(反向进位)特性特 别适合于FFT算法。
4.3 TMS320C2xx指令系统
C2xx DSP中共有汇编语言指令88条,分成6 类:
累加器、算术和逻辑指令26条 辅助寄存器和数据页面指针指令7条 TREG、PREG和乘法指令20条
间接寻址方式是通过当前辅助寄存器间接访问数据
存储器单元
4.1.1 立即寻址方式
立即寻址方式操作数就包括在指令中,立即寻 址的操作数有两种:短立即数和长立即数 短立即数寻址方式时,指令字为单字长,8、9
或13位常数操作数就在指令字中
长立即数寻址方式时,指令字为双字长,16位
常数位于第2个指令字中
4.1.3 间接寻址方式
数据存储器地址由辅助寄存器ARn间接给出。因 为辅助寄存器Arn为16位,因此这种方式中,数 据存储器的16位地址是ARn全部给出的,即间接 寻址方式可进行全部数据存储器范围的寻址。 这种寻址方式中,使用的辅助寄存器是当前辅助 寄存器,由辅助寄存器指针ARP指定,ARn=AR (ARP)。如ARP=2,则使用的地址寄存器就是 AR2,如图示。
43tms320c2xxc2xxdsp中共有汇编语言指令88条分成6累加器算术和逻辑指令26条辅助寄存器和数据页面指针指令7条tregpreg和乘法指令20条分支调用指令12条控制指令15条存储器和io操作指令8条指令助记符指令操作数指令助记符就是88条汇编语言指令助记符而指令操作数的表示法则比较复杂对应于三种寻址方式有三种操作数格式
分支、调用指令12条
TI的实时操作系统DSP BIOS介绍
v
v
一旦ISR1 或 2被调用, 算法1 或 2就要执行并直至完成. 但这样会有什么问题呢?
PDF 文件使用 "pdfFactory Pro" 试用版本创建 ÿ
远见品质
Real-time scheduling
v 不同的应用可能有不同的答案。 v 如果我们希望两个算法都要被实时执行
PDF 文件使用 "pdfFactory Pro" 试用版本创建
远见品质
为什么要使用RTOS
v 实时调度(Real-time scheduling) v 享用操作系统的服务
信号量,邮箱
v 算法标准化和可移植
ExpressDSP
v 创建的应用程序稳定性好(Robust)
字,数据存储空间575字。 C6201: PM-16KW, DM-16KW 占:0.9%和3.5% v 最多需要6500字,占C6201存储空间的20% (7% @ C6202)。所以多数应用是可接受 的。 v DSP/BIOS的可裁减性:只把直接或间接调 用的模块和API连接到目标文件中
PDF 文件使用 "pdfFactory Pro" 试用版本创建
远见品质
况情行运的后来到断中
PDF 文件使用 "pdfFactory Pro" 试用版本创建 ÿ
远见品质
summary
v DSPs软件开发的层次
(1)汇编程序:à处理器结构 (2)C程序:àC编译器 (3)RTOS:DSP/BIOS,VDK (4)顶层软件开发工具:Matlab, Rhapsody
Ø 当CPU不处理算法1时,CPU可由于执行算法2的子函数,直到 子函数执行完成。如下所示: Algorithm 1 Algorithm 2
DSP_BIOS:线程调度
7.3.4.1 任务的创建 (1)
动态创建和删除任务
注意:一般情况下, 应该先释放任务占 有的资源(信号灯、 邮箱等)再删除掉 该任务。
7.3.4.1 任务的创建 (2)
配置工具创建任务
创建时挂起
7.3.4.2 任务执行的状态和调度(1)
4种执行状态: 运行态(Running),代表任务是处理器当前正在执
断抢占,而不论其优先级. 一个硬件中断在响应前触发多次, 则仅响应一次.
所以硬件中断的响应尽量快.
7.3.2.1 硬件中断的配置
在DSP/BIOS配置工具中为每一个硬件中断建立 了HWI对象。
使用HWI管理器,可以配置每个硬件中断的 ISR(中断服务函数)。在HWI对象的属性页中输 入ISR的函数名即可。
7.3.1.1 线程的类型(续)
在DSP/BIOS中还有另外几种函数可以执行,它们是在 某一种类型的线程上下文中被执行的:
时钟(CLK)函数:在每个定时器中断的末尾执行。 缺省情况下,这些函数是按HWI函数执行的。
周期(PRD)函数:在片上定时器中断或其它事件多 次计数后执行周期函数,周期函数是一种特殊类型的 软件中断。
当建立第一个PRD对象时,会自动建立一个新的SWI 对象(称作PRD_swi)和系统时钟。如果没有其它的 SWI对象,那么PRD_swi对象使用最低优先级,同时 增加系统栈的大小。
7.3.4 任务调度
任务对象是那些被TSK模块管理的线程。任务的优先 级高于空闲循环,低于硬件和软件中断。
TSK模块根据任务的优先级和当前的执行状态动态地 调度和抢占任务。Ready中最高优先级的任务运行。 15+1(idle loop)
再运行,以TSK_TERMINATED表示。
刘鑫茂的DSP_BIOS讲座
•TI 实时操作系统 DSP/BIOS
刘鑫茂 2009.72009.7 @
@宁波QQ :273200351
QQ 群:
47138806
概述
•DSP/BIOS是TI DSP的嵌入式实时操作系统,性能很好,方便实用,但是国内用的却很少。
可能有两点原因:
•一、一般的超循环程序也能够满足需求。
•二、操作系统门槛高,不敢涉足。
关于上述两点问题的个人看法
•我也同样认为超循环程序可以解决大部分项目中的软件需求,但是在实时性要求严格的项目中,能否在规定的时间内完成任务的切换?(即超循环软件中的功能函数切
换),没有操作系统支持这点是非常难做到的。
另外由操作系统管理任务,程序更加清晰,层次更加分明。
•关于第二点,我要告诉大家的是DSP/BIOS没有想象中的那么复杂,即使不懂操作系统原理也同样能够掌握。
关于本PPT
本文档仅为BIOS入门篇
•我相信大家只要认真阅读本文档,就能够认识BIOS,踏入实时操作系统开发的门槛(过了这扇门,一切就会海阔天空)。
•并能够一般使用BIOS进行开发(常用的操作系统API,下文中进行了详细介绍,大部分项目中这些API就够用了(没有介绍API建议大家将来深入学习BIOS的时候再去理解)。
静态配置工具如左图所示:系统配置(
分析工具(
任务调度(
任务同步
(
输入输出(
§重点掌握前四个
修改代码段到其他存储器段。
这里可以看到周期大小(ms单位)
HWI对象。
SWI API调用示意:
SWI 箱值的变化过
程。
输入邮箱复位值
BIOS API。
TI DSP软件开发工具CCS的使用
CCS代码生 成工具流图
宏 文 件 库 文 档 管 器 理 十 进 六 制 转 程 换 序 十 进 六 制 转 程 换 序 EPROM 编 器 程 绝 列 对 表 序 程
交 应 叉 用 列 程 表 序
'C54x
8
1.3 CCS软件
TI公司耗资近2亿美元
CCS2.0 For C5000系列 CCS2.0 For C6000系列 CCS2.0 For DSK (Developer Start Kit,初学者开发套件) CCS2.1升级包
20
1.3.6 CCS2.0 RTDX(2)
包括Host方和Target方
Target方编程接口 RTDX target API Host方编程接口 RTDX COM API(组件对象模型COM是windows 下一种编程技术)
21
1.3.7 CCS2.0界面(2)
主机方的RTDX库是和CCS集成在一起的 主机一方有一个函数接口,目标方DSP上也有一个 函数接口 主机应用程序通过COM API发送数据到DSP,或接收 数据,应用程序可以按自己的方式来显示数据, RTDX可以脱离DSP/BIOS使用,给用户灵活性 下一张图是一个例子,用LabView作一个显示界面, LabView调用RTDX API得到DSP传来的数据
23
1.3.8 CCS2.0的文件与环境变量
.mak .lib .obj .out .wks (.wks 保存当前CCS中的设置:打开的变量窗口, 显示的图形。方便,快捷。) 可编辑文件:.c .asm .h .cmd (.sa) 三个环境变量:C6X_A_DIR,C6X_C_DIR,PATH
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IEMASK,定义那些中断位需要被屏蔽。
CCMASK,定义CSR中的缓存控制位的 设置值。
4.2.3 中断中的上下文切换和
硬件中断管理 (3)
HWI_enter/HWI_exit宏还保证在中断嵌套情况下只在最外层中断服 务例程中调用DSP/BIOS调度器。如果在HWI或其嵌套的HWI中触发 了(trigger)一个SWI(使用SWI_post)或使能了一个高优先权的 TSK,那么在最外层的HWI_exit中会调用SWI或TSK的调度器。SWI 调度器在切换到任何高优先权TSK之前首先服务所有未决的SWI。
PRD: PRD函数以整数倍于低分辨时钟中断或其它事件(如 外部中断)的频率执行。
4.1.2 线程的选择 (4)
PRD与SWI: 所有的PRD函数属于同一个SWI优先级, 所有PRD函数间不能互相抢占。PRD函数 可以触发(post)低优先级软件中断来延长 处理时间。这可以保证在下一个系统计数 (tick)到来时PRD_swi(周期函数对应的 软件中断)可以抢占这些低优先级中断, 新的PRD_swi得以执行。
4.2.1 硬件中断的配置(图)
4.2.2 允许和禁止硬件中断
在一个软件中断或任务中,可以在一个关键段的处理中暂 时禁止硬件中断。
函数HWI_disable和HWI_enable/HWI_restore需成对使用 来禁止或允许中断。
HWI_disable和HWI_restore成对使用允许硬件中断嵌套。
4.1.3 线程的优先级
在DSP/BIOS中,硬件中断有最 高的优先级,然后是软件中断, 软件中断可以被高优先权软件中 断或硬件中断抢先。软件中断是 不能被阻塞的。任务的优先权低 于软件中断,共有15个任务优先 权级别(加上TSK_idle应该16 个)。任务在等待某个资源有效 时可以被阻塞。后台线程 idle_loop是优先级最低的线程。
一个硬件中断在响应前触发多次, 则仅响应 一次. 所以硬件中断的响应尽量快.
4.2.1 硬件中断的配置
在DSP/BIOS配置工具中为每一个硬件中断 建立了HWI对象。
使用HWI管理器,可以配置每个硬件中断的 ISR(中断服务函数)。在HWI对象的属性页 中输入ISR的函数名即可。
DSP/BIOS负责设置中断向量表。在配置工 具中也允许配置中断向量表在内存中的位 置(MEM 管理器中设置)。
4.2.3 中断中的上下文切换和 硬件中断管理 (2)
HWI_enter ‘isr cC62_CTEMPS, IEMASK, CCMASK C62_ABTEMPS, C62_CTEMPS, IEMASK, CCMASK
C62_ABTEMPS和C62_CTEMPS ,决定 保存并恢复那些A、B或控制寄存器。
4.1.1 线程的类型(续)
在DSP/BIOS中还有另外几种函数可以执行,它们 是在某一种类型的线程上下文中被执行的:
时钟(CLK)函数:在每个定时器中断的末尾执 行。缺省情况下,这些函数是按HWI函数执行的。
周期(PRD)函数:在片上定时器中断或其它事 件多次计数后执行周期函数,周期函数是一种特 殊类型的软件中断。
4.1.5 线程让出和抢先 (2)
4.1.5 线程让出和抢先 (3)
线程抢先的例子
4.2 硬件中断
硬件中断是对外界异步事件触发的, 来源可 以是片上(on-device)设备或外部设备.
硬件中断发生,处理器转向中断处理向量.
一个硬件中断在处理时可以被另外一个硬 件中断抢占,而不论其优先级.
4.3.5 SWI对象的邮箱(1)
每个SWI都有一个32位的邮箱,它用来决定是否 触发中断或者被SWI函数内部使用。
5个触发SWI的函数的不同和对邮箱的作用
4.3.5 SWI对象的邮箱(2)
SWI触发后,邮箱的 值恢复初始化的值。
SWI_getmbox(),得到 SWI在触发前的邮箱 值。 利用这一点,可以控 制SWI的函数的执行 次数。(难点之一) 提供的运行机制!
typedef struct SWI_Attrs {
SWI_Fxn
fxn;
Arg
arg0;
Arg
arg1;
#if defined(_54_)
Bool iscfxn;
#endif
Int
priority;
Uns
mailbox;
} SWI_Attrs;
4.3.2 设置软件中断优先级
配置工具中设置SWI对象的优先级。
系统栈上保存了当软件中断抢占其它线程时的寄存器内容。
为了满足同一时刻最大可能的抢占数量,每增加一个软件 优先级别,系统栈大小都要增长。从堆栈使用的角度上看, 给所有的软件中断一个优先级更有效。
当建立第一个PRD对象时,会自动建立一个新的SWI对象 (称作PRD_swi)和系统时钟。如果没有其它的SWI对象, 那么PRD_swi对象使用最低优先级,同时增加系统栈的大 小。
4.3 软件中断
软件中断不同于一般处理器上的软件中断指令, DSP/BIOS的SWI模块是独立于任何处理器相关的软件中断 指令的。
SWI线程适于处理的应用是速率较低的或时限不如HWI严 格的工作。
SWI的触发是编程实现的,有五个函数可以触发软件中断: SWI_andn,SWI_dec,SWI_inc,SWI_or,SWI_post
DSP/BIOS使应用程序按线程结构化设计,每个线 程完成一个模块化的功能.
多线程程序中允许高优先级线程抢占低优先级线 程,以及线程间的同步和通讯
4.1.1 线程的类型
DSP/BIOS 支持4种线程:
(1)硬件中断(HWI): 频率可达200KHz(5us),处理 时限在2us~100us . (2)软件中断(SWI):时限100us以上,SWI允许HWI 将一些非关键处理在低优先级上延迟执行,这样可以减少 在中断服务程序中的驻留时间 (3)任务(TSK):任务与软件中断不同的地方在于在运行 过程中可以被挂起。DSP/BIOS提供了一些任务间同步和 通讯的机制,包括队列、信号灯和邮箱。 (4)后台线程(IDL): MAIN->空闲循环: 运行那些没 有执行期限(deadlines)的函数
数据通知函数:在使用管道(PIP)或主机通道 (HST)传输数据时执行。
4.1.2 线程的选择 (1)
SWI、TSK与HWI之间的选择: 硬件中断只处理时间要求苛刻的关键任务。 HWI可以处理发生频率在200KHz左右的事 件。软件中断或任务可以用于执行时间限 制在100us以上的事件。HWI函数应该触发 (post)软件中断或任务来进行低优先级处 理。使用低优先级线程可以减小中断禁止 的时间,允许其它中断的触发。
DSP BIOS 4: 线程调度( part 1 )
4.1 线程调度概述
许多实时DSP应用都需要同时执行许多不相关的 功能(functions,函数),这些功能一般是对外部 事件的响应. 这些功能就叫线程.
DSP/BIOS定义线程为任何独立的指令流. 可以是 一个函数, 或一个中断服务程序.
不要进行任务切换
4.2.3 中断中的上下文切换和 硬件中断管理 (1)
一个中断抢占另外一个中断时,这个中断要保存 和恢复它修改的寄存器。使用HWI_enter和 HWI_exit保存和恢复寄存器。
HWI_enter/HWI_exit还保证SWI和TSK管理器在 合适的时候被调用。
使用HWI dispatcher,就把C写的HWI函数放到 HWI_enter/HWI_exit宏对中。所以使用HWI dispatcher后,不能再调用HWI_enter/HWI_exit, 否会导致系统崩溃。
4.3.1 建立SWI对象
动态法:SWI_creat;可以动态删除 静态法:配置工具; 不能动态删除
swi = SWI_create(attrs); 其中,swi是一个句柄。 attrs是一个 SWI_Attrs结构。
SWI_create只能在任务 级调用,而不能在HWI或 其它SWI中调用。
一个软件中断会一直执行到完毕(没有挂起状态),除非 被硬件中断或更高级别的软件中断抢占。
如果在HWI中断服务程序内部需要调用任何会触发软件中 断的SWI函数,那么需要在中断服务程序的入口和出口调 用HWI_enter和HWI_exit,或者使用HWI分派器 (diapatcher)来调用中断服务程序。
4.1.2 线程的选择 (2)
SWI与TSK 之间的选择: SWI一般用于相对独立的函数,如果要求比 较复杂的话使用TSK。TSK提供了很多任务 间通讯和同步的手段。一个任务可以挂起 等待某一个资源的有效。使用共享数据时, TSK比SWI有更多的选择。而软件中断执行 时必须保证所需的数据已经准备好。所有 的SWI使用同一个堆栈,所以在存储器使用 上更加高效。
4.3.4 软件中断的执行(1)
一般通过调用SWI_andn、SWI_dec、SWI_inc、 SWI_or和SWI_post来使软件中断进入调度。这 些函数可以在程序的任何地方调用。
SWI可以被更高优先级的线程抢占,但是,SWI不 能被阻塞,即使软件中断正在等待一个外部设备 (比如等到设备准备好)也不可以将它挂起。
4.1.2 线程的选择 (3)
IDL: 后台函数用于执行没有执行时间限制的非关键处理
CLK: 如果希望每个定时器中断时触发一个函数的执行则使 用CLK函数。这些函数是当作HWI来运行,所以应该 保证运行时间尽量小。缺省的CLK对象PRD_clk增加 周期函数的一次计数(tick)。可以增加更多的CLK 对象以相同的速率执行某个函数。
如果在一个SWI得到执行权之前被触发(post) 了多次,那么这个SWI只被执行一次。
4.3.4 软件中断的执行(2)