专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
DSP/BIOS入门
2019-07-13 10:07
发布
生成海报
站内文章
/
DSP
10702
0
1052
DSP/BIOS入门
1
DSP/BIOS
简介
DSP/BIOS
是
CCS
中集成的一个简易的嵌入式实时操作系统,能够大大方便用户编写多任务应用程序。
DSP/BIOS
拥有很多实时嵌入式操作系统的功能,如任务的调度,任务间的同步和通信,内存管理,实时时钟管理,中断服务管理等。有了它,用户可以编写复杂的多线程程序,并且会占用更少的
CPU
和内存资源。
DSP/BIOS
是一个可用于实时调度、同步,主机和目标机通信,以及实时分析系统上的一个可裁减实时内核,它提供了抢占式的多任务调度,对硬件的及时反应,实时分析和配置工具等。同时提供标准的
API
接口,易于使用。它是
TI
的
eXpressDSP
实时软件技术的的一个关键部分。
1.1
DSP/BIOS
的组件构成
DSP/BIOS
在一个主机
/
目标机环境中的组件分布如
图
39
所示:
图
39
?
DSP/BIOS API
:编写的程序可以调用
API
接口函数;
?
DSP/BIOS
配置:创建的配置文件定义了程序使用的静态
BIOS
对象;
?
DSP/BIOS
分析工具:集成在
CCS
上的一些
BIOS
分析工具可以对运行与目标设备上的程序进行监测,包括
CPU
负载、时间、日志、线程执行状态等。
DSP/BIOS
分为很多模块,提供的所有
API
函数都按照模块分类,以模块名加下划线开头来命名,如
图
40
所示为
DSP/BIOS
的全部模块。
图
40
1.2
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
循环中管理和主机的通信,因此主机和目标机之间的数据交互可以进行了。
1.3
DSP/BIOS
的配置
DSP/BIOS
的静态配置是利用
CCS
提供的配置工具完成,包括图形化配置工具和文本配置工具。图形化工具层次清晰,比较直观,而文本工具更加灵活。通常使用图形化的配置方法,下面对主要的模块配置做一些介绍。
1.3.1
Global Setting Properties
右键点击“
Global Settings
”,点击“
What’s This
”,会弹出帮助窗口,该文件中有
Global Setting Properties
的各项设置说明。下面介绍的其他如
MEM
、
LOG
等配置都可以用同样的方法得到相应的帮助。
选择弹出菜单中的“
Properties
”,如
图
41
所示。
图
41
弹出如
图
42
所示对话框
:
图
42
一般选择默认设置即可,
CLKOUT
项需要根据
DSP
硬件单板提供的工作时钟设置,
Himalaya
通常运行在
1GHz
频率。
DSP Endian Mode
项根据实际情况设置。
1.3.2
MEM
设置
MEM
模块设置中可以根据具体情况设置不同的内存段,其中存在一个默认的
IRAM
片内内存段。需要注意的是,首先必须在
IRAM
段上设置一个
heap
段落,用于
BIOS
的内部使用。设置方法是在
IRAM
段上右键选择“
Properties
”,弹出如
图
43
对话框,必须设置红线框中的选项,
heap size
可根据情况具体设置。
图
43
接下来配置
MEM
全局属性,右键点击配置窗口中的“
MEM…
”,如
图
44
所示:
图
44
点击“
Properties
”,弹出如
图
45
所示窗口:
图
45
如图红线框中,两个
heap
段都要选择为
IRAM
,“
Stack Size
”项需要根据实际情况设置最大的栈大小,其他使用缺省设置即可。
在
图
44
的菜单中,点击“
Insert MEM
”可创建新的内存段。在新的内存段名上右键选择“
Properties
”弹出如
图
43
窗口,根据情况设置
base
(基地址)、
len
(段长度)、
heap size
(用于
MEM
动态内存分配的堆大小)。
1.3.3
LOG
设置
LOG
用于输出和记录一些打印信息,默认存在一个
LOG_system
对象,是系统内部用来处理打印信息的,不需要去设置。可以增加新的
LOG
对象,用来在应用程序中输出打印信息。如
图
46
,在
LOG
标签上右键选择“
Insert LOG
”,填写对象名
LOG_test
即建立了一个新的
LOG
对象。
图
46
在
LOG_test
标签上右键选择“
Properties
”,弹出如
图
47
窗口,可对此
LOG
对象属性作一些设置。具体设置含义可通过
Help
查看。
图
47
1.3.4
CLK
设置
在
CLK
属性中通常选择定时器
Timer0
作为
DSP/BIOS
的基准时钟,计时分辩率设置为每秒
1000
次中断,在
1GHz
系统时钟下,近似为每次定时中断间隔
999.996
微秒。
Timer Mode
选择为
32bit unchained
模式,即使用
TCI6482
的
TMR0
的
TIMLO
作为
Timer0
,而
TIMHI
还可以作其它用途使用。
CLK
属性配置界面如
图
48
所示:
图
48
1.3.5
HWI
设置
HWI
(硬中断)中包含
HWI_INT4
到
HWI_INT15
可用来定义用户自己的硬件中断,
HWI_RESET
、
HWI_NMI
和
HWI_RESERVED
不要去改动。如
图
49
,每个硬
HWI
的优先级从上到下逐渐降低。
图
49
选择
HWI_INT10
为例,来设置
EMAC/MDIO
的中断,需要填写中断事件号
17
,并且填写中断服务程序名(
C
函数前面需要加下划线)如
图
50
所示:
图
50
在
Dispatcher
页面,选择“
Use Dispatcher
”由
BIOS
代理控制中断的确认和清除,不需要用户中断服务程序干预,比较简便。如
图
51
:
图
51
1.3.6
SWI
设置
SWI
(软中断)
的优先级在
HWI
之后,但是比
TSK
高,可以通过右键菜单中的“
Insert SWI
”创建一个
SWI
对象,可以指定
SWI
内部优先级,从
0(
最低
)
到
14(
最高
)
。如
图
52
:
图
52
1.3.7
TSK
设置
在
TSK Manager
(任务管理器)中可以根据需要创建各种任务,任务间是根据优先级抢占策略来进行调度的,
TSK
提供有多种优先级别,包括
-1(Suspend)
、
0(Idle)
、
1(
最低
)
到
15(
最高
)
。如
图
53
:
图
53
在
TSK Manager
上右键选择“
Insert TSK
”并填写任务名称后就可以创建一个任务,在相应任务上右键选择“
Properties
”可对任务属性进行设置,如
图
54
:
图
54
Stack Size
(最大堆栈大小)和
Priority
(优先级)需要根据任务的具体情况进行设置。在页面,填写任务实体函数名(
C
函数前面加一个下划线),如
图
55
:
图
55
1.3.8
Synchronization
设置
DSP/BIOS
中任务间的通信和同步可由
SEM
、
MBX
、
QUE
、
LCK
四个模块完成:
?
SEM
(信号量):用于任务同步和互斥,有计数功能,根据需要使用;
?
MBX
(邮箱):也用于任务同步,可以传递少量数据,根据需要使用;
?
QUE
(队列):可实现任务同步和资源的共享,根据需要使用;
?
LCK
(资源锁):实现对共享资源的互斥,根据需要使用。
四种同步模块对象都可以通过各自的右键菜单中“
Insert …
”来创建,并可对其属性作相应的设置。如
图
56
所示:
图
56
1.3.9
Input/Output
设置
这里可以设置一些输入
/
输出相关的高级设置,具体可通过
CCS
的帮助项来了解。一般不需要进行设置。只有
RTDX
(实时数据交换),需要根据目标环境的情况对数据交换模式进行一下选择,用来在调试中主机和目标机进行数据交换。可以是仿真器环境的
JTAG
模式,或者是模拟器环境的
Simulator
模式。如
图
57
所示:
http://blog.21ic.com/user1/6392/archives/2010/67817.html
Ta的文章
更多
>>
聚星C#数字信号处理工具包频谱分析用法
0 个评论
DSP/BIOS入门
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮