为避免编译过程中,一些头文件和库找不到,我们需要将该例子放在OMAPL138BSL软件包安装路径的evmomapl138_v1\tests\ICETEK目录下
如果要使用自己的BSL库,请将压缩包中BSL目录下的evmomapl138_gpio.c替换BSL源程序的evmomapl138_v1\bsl\src下的该文件,重新编译库。或者直接使用压缩包中的库
首先在main函数中使用DSPBIOS的API允许可屏蔽中断:
例如我们使用CPU的INT4作为GPIObank23的中断
//可屏蔽中断4允许
C64_enableIER(C64_EINT4);
以下是在DSPBIOS中的操作
第一种方式使用CPU中断直接响应外部事件
一、在Secheduling中选择
HWI–HardwareInterruptFunctionManager前的加号
在展开的列表的ECM–EventCombinerManager上点击鼠标右键,弹出菜单上选择properties
在打开对话框中选择Enableeventcombinermanager
点击确定
二、在HWI–HardwareInterruptFunctionManager下的HWI_INT4~HWI_INT15中,选择一个然后在其上点击鼠标右键,选择properties,
打开属性对话框
在interruptselectionnumber后的输入框中输入外部事件对应的中断号,如bank23的中断对应的中断号为49,对于不同的CPU的外设器中断号可能不一样参考对应器件的数据手册以及对应处理器的系统参考文章。对于OMAPL138的中断,参考文章:
OMAP-L138ApplicationsProcessorSystemReferenceGuide的3.2.2.1章节InterruptController(INTC
OMAPL138数据手册的第5.7.2章节DSPInterrupts
在function后的输入框中输入中断响应的函数(中断服务程序)
如我们中断服务程序为
则在输入框中输入_output_clk注意对于C语言写的中断服务程序在输入框中输入时应在函数名前加下划线”_”
对于用C语言写的中断服务程序,我们还应该做如下的步骤
在中断属性页面上点击Dispatcher选项卡,选中UseDispatcher选项。
InterruptMask后的下拉列表表示在执行当前中断的时候是否允许其他中断发生,即是否允许中断,参考DSPBIOS的在线帮助获得更多的信息
第二中方式CPU响应事件组合器(combiner)生成的中断
一、在Secheduling中选择
HWI–HardwareInterruptFunctionManager前的加号
在展开的列表的ECM–EventCombinerManager上点击鼠标右键,弹出菜单上选择properties
在打开对话框中选择Enableeventcombinermanager
点击确定
展开
ECM–EventCombinerManager,在对应的EVENTn上点击鼠标右键,选择properties,这里作为例子我们使用OMAPL138的GPIO23的组中断作为演示,它对应的事件的编号为49,关于什么事件对应于那个事件编号,参考文章:
OMAP-L138ApplicationsProcessorSystemReferenceGuide的3.2.2.1章节InterruptController(INTC
OMAPL138数据手册的第5.7.2章节DSPInterrupts
打开属性对话框
在打开的对话框中,
Comment输入框中输入一些注释,方便我们以后识别该中断的作用
在function后的输入框中,输入用C、C++写的中断服务程序函数名,且以_开始,如我们的中断服务程序如下
则应该在function输入框中输入_output_clk
unmaskeventsource选项应该选中,告知编译器不要屏蔽该事件的中断,默认的情况下,他们都是被屏蔽的
二、在HWI–HardwareInterruptFunctionManager下的HWI_INT4~HWI_INT15中,选择一个然后在其上点击鼠标右键,选择properties,
这里我们需要修改interruptselectionnumber,输入的数字对应的ECM源的关系如下
nterruptSelectionNumber ECMModuleObjects ECMEventRange
0 EVENT4toEVENT31 4-31
1 EVENT32toEVENT63 32-63
2 EVENT64toEVENT95 64-95
3 EVENT96toEVENT127 96–127
如果拟将HWI_INT4映射到ECM32-63,这其中包含GPIO2bank的中断事件,则nterruptSelectionNumber输入框中输入1
当我们在interruptselectionnumber输入框中输入0~3之间的数字时,function输入框中会自动填上函数_ECM_dispatch且不能修改成其他的
在Dispatcher选项卡中,选中useDispatcher
如果我们不修改interruptMask选项,它自动选择Self,且Arg中填入一个数值,这个数值和我们在interruptselectionnumber输入框中输如的数值相关联,我们使用默认的。
InterruptMask后的下拉列表表示在执行当前中断的时候是否允许其他中断发生,即是否允许中断,参考DSPBIOS的在线帮助获得更多的信息
点击确定,重新编译项目,下载进行测试