为避免编译过程中,一些头文件和库找不到,我们需要将该例子放在
OMAPL138 BSL软件包安装路径的 evmomapl138_v1 estsICETEK目录下
如果要使用自己的
BSL库,请将压缩包中BSL目录下的 evmomapl138_gpio.c 替换BSL源程序的evmomapl138_v1slsrc 下的该文件,重新编译库。或者直接使用压缩包中的库
首先在
main函数中使用DSP BIOS 的API允许可屏蔽中断:
例如我们使用
CPU的INT4作为GPIO bank23的中断
//
可屏蔽中断4允许
C64_enableIER(C64_EINT4);
以下是在
DSP BIOS中的操作
第一种方式使用
CPU中断直接响应外部事件
一、在
Secheduling 中选择
HWI – Hardware Interrupt Function Manager
前的加号
在展开的列表的
ECM –Event Combiner Manager
上点击鼠标右键,弹出菜单上选择 properties
在打开对话框中 选择
Enable event combiner manager
点击 确定
二、在HWI – Hardware Interrupt Function Manager
下的 HWI_INT4 ~ HWI_INT15中,选择一个然后在其上点击鼠标右键,选择properties,
打开属性对话框
在
interrupt selection number后的输入框中输入外部事件对应的中断号,如bank23的中断对应的中断号为49,对于不同的CPU的外设器中断号可能不一样参考对应器件的数据手册以及对应处理器的系统参考文章。对于OMAPL138的中断,参考文章:
OMAP-L138 Applications Processor System Reference Guide 的
3.2.2.1章节 Interrupt Controller (INTC
OMAPL138
数据手册的第5.7.2章节 DSP Interrupts
在
function 后的输入框中 输入中断响应的函数(中断服务程序)
如我们中断服务程序为
则在输入框中输入
_output_clk 注意对于
C语言写的中断服务程序在输入框中输入时应在函数名前加下划线”_”
对于用
C语言写的中断服务程序,我们还应该做如下的步骤
在中断属性页面上点击
Dispatcher选项卡,选中 Use Dispatcher选项。
Interrupt Mask
后的下拉列表表示在执行当前中断的时候是否允许其他中断发生,即是否允许中断,参考DSP BIOS的在线帮助获得更多的信息
第二中方式
CPU响应事件组合器(combiner)生成的中断
一、在
Secheduling 中选择
HWI – Hardware Interrupt Function Manager
前的加号
在展开的列表的
ECM –Event Combiner Manager
上点击鼠标右键,弹出菜单上选择 properties
在打开对话框中 选择
Enable event combiner manager
点击 确定
展开
ECM –Event Combiner Manager
,在对应的 EVENTn 上点击鼠标右键,选择 properties,这里作为例子我们使用OMAPL138的GPIO23 的组中断作为演示,它对应的事件的编号为49,关于什么事件对应于那个事件编号,参考文章:
OMAP-L138 Applications Processor System Reference Guide 的
3.2.2.1章节 Interrupt Controller (INTC
OMAPL138
数据手册的第5.7.2章节 DSP Interrupts
打开属性对话框
在打开的对话框中,
Comment
输入框中输入一些注释,方便我们以后识别该中断的作用
在
function 后的输入框中,输入用C、C++写的中断服务程序函数名,且以 _ 开始,如我们的中断服务程序如下
则应该在
function输入框中输入 _output_clk
unmask event source
选项应该选中,告知编译器不要屏蔽该事件的中断,默认的情况下,他们都是被屏蔽的
二、在HWI – Hardware Interrupt Function Manager
下的 HWI_INT4 ~ HWI_INT15中,选择一个然后在其上点击鼠标右键,选择properties,
这里我们需要修改
interrupt selection number,输入的数字对应的ECM源的关系如下
nterrupt SelectionNumber ECM Module Objects ECM EventRange
0 EVENT4 to EVENT31 4 - 31
1 EVENT32 to EVENT63 32 - 63
2 EVENT64 to EVENT95 64 - 95
3 EVENT96 to EVENT127 96 – 127
如果拟将
HWI_INT4 映射到ECM 32-63,这其中包含GPIO2bank的中断事件,则 nterrupt SelectionNumber 输入框中输入
1
当我们在
interrupt selection number输入框中输入0~3之间的数字时,function输入框中会自动填上函数
_ECM_dispatch 且不能修改成其他的
在
Dispatcher 选项卡中,选中 use Dispatcher
如果我们不修改
interrupt Mask选项,它自动选择Self,且Arg中填入一个数值,这个数值和我们在interrupt selection number输入框中输如的数值相关联,我们使用默认的。
Interrupt Mask
后的下拉列表表示在执行当前中断的时候是否允许其他中断发生,即是否允许中断,参考DSP BIOS的在线帮助获得更多的信息
点击确定,重新编译项目,下载进行测试
/////////////////////////////////////////////////////////////////////////////////////////////////////
参考文档:
1、 数据手册
http://www.ti.com/lit/gpn/omap-l138
2、 系统参考:
http://focus.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=sprugm7d&fileType=pdf
3、 兆模块参考
http://focus.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=sprufk5a&fileType=pdf
4、 CPU
和指令集用户手册
http://focus.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=sprufe8b&fileType=pdf