ZigBee2006协议栈中使用硬件中断函数的问题
来源:互联网 发布:网络诈骗案立案 编辑:程序博客网 时间:2024/05/29 08:38
最近一直在研究ZigBee2006协议栈,需要用到硬件。有关硬件的头文件和C文件基本上都在HAL文件夹里,这里面有各个硬件,如键盘、LCD、串口等外设的头文件,在hal/target/2430BB、2430DB、2340EB文件夹里有相应的C文件。如果你自己写了相关硬件的函数,那么请将这些函数及其定义放在相应的hal_头文件和C文件里。下面,我以串口0中断的应用为例,介绍如何在协议栈中添加中断。
首先,要对串口进行初始化:使能相应管脚,设定波特率、串口工作模式等。然后使能串口中断和全部中断,即打开串口中断。
其次,我们需要找到中断函数的定义,这个文件的名字叫做hal_mcu.h,在hal/target/2430BB、2430DB、2340EB文件夹里都有,可以在IAR的hal/target/2430BB/includes(hal/target/2430DB/includes和hal/target/2430EB/includes里也有)文件夹里找到。双击打开,我们可以看到很多宏定义,其中CompilerAbstraction部分代码如下:
#ifdef__IAR_SYSTEMS_ICC__
#include
#define HAL_COMPILER_IAR
#defineHAL_MCU_LITTLE_ENDIAN()
#define _PRAGMA(x)_Pragma(#x)
#defineHAL_ISR_FUNC_DECLARATION(f,v)
#defineHAL_ISR_FUNC_PROTOTYPE(f,v)
#defineHAL_ISR_FUNCTION(f,v)
#elif defined__KEIL__
#include
#define HAL_COMPILER_KEIL
#define HAL_MCU_LITTLE_ENDIAN()
#defineHAL_ISR_FUNC_DECLARATION(f,v)
#defineHAL_ISR_FUNC_PROTOTYPE(f,v)
#defineHAL_ISR_FUNCTION(f,v)
#else
#error "ERROR: Unknown compiler."
#endif
这里定义了在不同编译环境下的终端函数,我们可以看出ZigBee2006协议栈仅支持IAR和Keil两种编译环境,其他的编译器会当做未识别的编译器并报错("ERROR:Unknown compiler.")。我使用的是IAR编译环境,并对上面的代码进行注释。
用红色字体标出的部分就是我们定义中断函数的格式要求,这三个宏的意思表明了对中断函数定义的规则:首先,要在文件代码顶端进行函数声明(格式:_PRAGMA(vector=v)__near_func __interrupt voidf(void););然后,在相应的C文件里定义中断函数原型(格式:_PRAGMA(vector=v) __near_func __interrupt voidf(void){...})。其实和C语言中定义函数一模一样,但是格式要按照协议栈规定的来写。
例如:
#include"ioCC2430.h"
_PRAGMA(vector=URX0_VECTOR)__near_func __interrupt void UART0_ISR(void);
...
_PRAGMA(vector=URX0_VECTOR)__near_func __interrupt voidUART0_ISR(void)
{
....
}
例子中浅蓝色的部分是可以自己来设定的,其他格式都是确定的,以上就是在协议栈中添加中断函数的方法,希望能对你有所帮助。
附:中断向量表
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
- ZigBee2006协议栈中使用硬件中断函数的问题
- ZIGBEE2006协议栈学习
- Zigbee2006使用入门指南
- Zigbee2006使用入门指南
- 关于在CC2430中基于ZIGBEE2006的串口通信
- zigbee协议栈添加自己的硬件中断的注意点
- ZigBee密西西比协议栈的中断回调usrSlowTimerInt()函数
- 关于C51的中断函数要注意的几个问题 -----中断中调用函数参数错误问题
- 硬件中断的总结
- 中断的硬件环境
- 51单片机定时器中断函数中变量初始化的问题
- 软中断与硬件中断的区别
- 软中断与硬件中断的区别
- 软件中断和硬件中断的区别
- 硬件中断、软件中断的定义
- 硬件中断和软件中断的区别
- 2中断的硬件环境
- 中断系统的硬件结构
- NLTK学习笔记(7)- Extracting information from text
- 第十四周项目六 阅读程序(1、2、3)
- Hadoop读书笔记(十)MapReduce中的从计数器理解combiner归约
- poj2923 01背包+状态压缩dp
- Android 在Activity中通过Bundle传递自定义数据类型
- ZigBee2006协议栈中使用硬件中断函数的问题
- 两圆相交求面积
- Xcode6中如何添加pch文件
- 月总结--笔记
- 程序分text, data (initialized), bss, stack, heap几个段
- STL解读-rebind的目的就是再定义一个struct (allocator), 这个allocator能分配 _Other类型的元素。
- 09自定义组合控件总结
- JSP调用javabean报错处理方法
- NYOJ 448 寻找最大数