被突如其来的一个bug困扰了好几天, 起因是, 按键接的红外接收器, 结果发现, 一旦按下之后, IEN1, P0IE的标识位bit5, 被不知道特么的谁归0了, 也就是说, 按键只能被按下一次, 再按就不进中断了.

后来研究了甜总的自定义按键.

http://blog.csdn.net/feilusia/article/details/50535963

发现按键根本不进中断.

接着, 又参考另一个文章:

http://www.cnblogs.com/chenzhao207/articles/4483189.html

不用协议栈, 直接做成一个文件, debug成功.

然后我才想起, 带协议编译的时候IAR有一句警告, 我没有注意, 就是说我后来定义的key中断跟hal_key文件里面定义的中断处理重复了.

于是, 我把编译的参数HAL_KEY=FALSE, 还把board_init时候的key_config给干掉, 终于成功的在协议栈里面进了中断.

今天早上看了代码我才明白, 原来key的响应在OnBoard.c文件里面, 直接就是这个:

HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);

而在hal_key.c里面:

HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
{
  HAL_ENTER_ISR();

if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)

{
    halProcessKeyInterrupt();
  }

/*
    Clear the CPU interrupt flag for Port_0
    PxIFG has to be cleared before PxIF
  */

HAL_KEY_SW_6_PXIFG = 0;

HAL_KEY_CPU_PORT_0_IF = 0;

CLEAR_SLEEP_MODE();

HAL_EXIT_ISR();
  return;
}

上面这一段就是中断声明, 怎么知道的呢, 天杀的IAR没法进行全局的搜索, 还是用SI找到的:

(原来IAR的全局搜索要Ctrl+Alt+F的).

Hal_mcu.h 里面

#define HAL_ISR_FUNC_PROTOTYPE(f,v)     _PRAGMA(vector=v) __near_func __interrupt void f(void)
#define HAL_ISR_FUNCTION(f,v)           HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)

原来HAL_ISR_FUNCTION(f,v) 就是 HAL_ISR_FUNC_PROTOTYPE(f,v);跟HAL_ISR_FUNC_DECLARATION(f,v)

而 HAL_ISR_FUNC_PROTOTYPE(f,v) 又是 _PRAGMA(vector=v) __near_func __interrupt void f(void)

所以 HAL_ISR_FUNCTION 就是中断处理的函数啊...

会跟

#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void){

}

起冲突的.

接下来要做的步骤:

1. 把系统的Key都干掉, 研究一下OnBoard.c里面的HalKeyConfig都有啥.

2. 如果没啥了, 就使用自己写的key的中断.

3. 检查中断响应的函数, EA=0肯定是不对的, 停掉P0IEN对应的bit位比较合理.

4. 测试红外的效果.

TI CC2541的狗日的Key的更多相关文章

  1. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例

    本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...

  2. IAR 9+ 编译 TI CC2541 出现 Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition.

    IAR 9+ 编译 TI CC2541 出现 Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. Segm ...

  3. TI CC2541 BLE协议栈蓝牙MAC 地址

    在Flash中有一块只读区域,从地址0x780E开始,蓝牙的MAC以小端方式存放在里面. 在TI的Peripheral例程里面,添加一个特征值,只读属性,6字节长度(蓝牙MAC长度为48-bit,6字 ...

  4. TI CC2541的红外控制

    整整一个礼拜, 整了...大约40个小时吧, 最少.. 下面是结果, 只能做一个delay延时.: unsigned char Time;unsigned char IrValue[6];#pragm ...

  5. TI CC2541的中断优先级设置.

    实际看到的中断优先级设置是这样的:

  6. TI CC2541的引脚中断.

  7. TI CC2541的整体目标

    1. App端会发送一定数量的byte过来蓝牙, 每2个byte是一个汉字的编码. 2. 拿到汉字编码之后, 统计字符数量, 然后通过SPI, 搜索编码 3. 收到的编码, 每个汉字字符有32个byt ...

  8. TI CC2541的GPIO引脚设置.

    P1SEL寄存器, 0xF4, 功能选择用的, 0表示GPIO口, 1表示外设.

  9. TI CC2541的LED控制

    现在终于进入到蓝牙SPI的环节了, 下面还要研究I2C, 所以第一步, 先点灯, 就是GPIO控制吧. 参考一下LEd的初始化: void HalLedInit (void){#if (HAL_LED ...

随机推荐

  1. SQL Server Logical/Physical Reads

    Summary Info: Logical Reads :    Reading Data pages from CachePhysical Reads :    Reading Data pages ...

  2. 为什么玩VR眼镜会头晕?

    为什么玩VR眼镜会头晕?看完本文你就懂了   很多用户都体验过各式各样的VR眼镜或者说头盔,但是不管哪一款,都很容易出现头晕的情况.相信大家都纳闷过,为什么玩VR眼镜会头晕?实际上这是和设备本身的技术 ...

  3. js DOM 元素ID就是全局变量

    有人在twitter上提到了:在Chrome的JavaScript终端中,你只需要输入一个元素的ID,就可以访问到这个元素.@johnjbarton给了解释,这是因为所有的元素ID都是全局变量.本文再 ...

  4. java获取泛型的真实类型

    ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass(); Type[] actualTyp ...

  5. InitializingBean afterPropertiesSet

    package org.test.InitializingBean; import org.springframework.context.support.ClassPathXmlApplicatio ...

  6. 从电商平台促销活动看电商app开发趋势

    据亿合科技小编了解到:尽管各大电商平台都进入了品质和品牌时代,但对于消费者来说,低价依然是一个有吸引力的因素.尼尔森<网络购物者趋势研究>报告显示,2016年价格敏感型购物者的比例从15% ...

  7. DG - physical standby switchover切换过程

    一.切换前检查1.检查备库已经全部接收到主库的redo如果是最大可用性.最大保护性模式,可以在primary端查看v$archive_dest_status,确认是否所有的redo已经传送到备库#在主 ...

  8. JAVA NIO系列(三) Buffer 解读

    缓冲区分类 NIO中的buffer用于和通道交互,数据是从通道读入缓冲区,从缓冲区中写入通道的.Buffer就像一个数组,可以保存多个类型相同的数据.每种基本数据类型都有对应的Buffer类: 缓冲区 ...

  9. Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界

    物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDe ...

  10. PostgreSQL9.2.4内核源码结构介绍

    PostgreSQL的源代码可以随意获得,其开源协议也允许研究者任意修改,这里介绍一下PostgreSQL的源码结构以及部分实现机制.下载PostgreSQL源代码并减压后,其一级目录结构如下图: P ...