查看: 5112|回复: 2

[已解决] KEA128系列KBI中断 读KBI1_SP值异常

[复制链接]

该用户从未签到

2

主题

9

帖子

0

注册会员

Rank: 2

积分
82
最后登录
1970-1-1
发表于 2017-9-8 00:14:37 | 显示全部楼层 |阅读模式
请教各位大神;KBI中断设置为高电平触发,进入中断程序后,如果加上判断中断源引脚的程序,则读KBI1_SP寄存器的值为0x000000,如果不加上判断语句,则第一次读的值为0x000000,以后近中断读的值为0x00002000,与预期相符;中断引脚使能寄存器配置为0x000000;改引脚进入中断后使能为GPIO输入输出,做OWI通讯;
以下为我的中断初始化及服务程序:void KBI_PIR_Init_app(void)
{
        uint32_t        i;
        KBI_ConfigType  sKBIConfig;
        MCU_drive_dis;
        DOCI_R;
       
        /* Disable all the KBI pins */
        for (i = 0; i < KBI_MAX_PINS_PER_PORT; i++)
        {
                sKBIConfig.sPin[i].bEn         = 0;
        }
       
        sKBIConfig.sBits.bRstKbsp   = 1;/*Writing a 1 to RSTKBSP is to clear the KBIxSP Register*/
        sKBIConfig.sBits.bKbspEn   = 1;/*The latched value in KBxSP register while interrupt flag occur to be read.*/
        sKBIConfig.sBits.bMode   = KBI_MODE_EDGE_LEVEL;
        sKBIConfig.sBits.bIntEn  = 1;
       
        sKBIConfig.sPin[KBI1_PTF5_SHIFT].bEdge = KBI_RISING_EDGE_HIGH_LEVEL;
        sKBIConfig.sPin[KBI1_PTF5_SHIFT].bEn   = 1;
       
        KBI_SetCallback(KBI1, &KBI1_PIR_Task);
        KBI_Init(KBI1, &sKBIConfig);
}

void KBI1_PIR_Task(void)
{
        KBI_mark=KBI_GetSP(KBI1);
        //if(KBI_mark == KBI1_PTF5_MASK)  加上此判断,每次读取值为0x000000;
        {
                KBI_DisableInt(KBI1);
                KBI_RstSP(KBI1);
                MCU_drive_dis;
                delay10us_PC(8);
                GPIO_read=FGPIO_Read(FGPIOB);
                if(GPIO_read&0x2000)   //delete glitch
                {
                       
                        DOCI_read_data=DOCI_read();
                        global_uart_send[4]=DOCI_read_data>>8;
                        global_uart_send[5]=DOCI_read_data;
                        global_uart_send[0]=MCU_ADDR;
                        global_uart_send[1]=0x07;
                        global_uart_send[2]=0x06;
                        global_uart_send[3]=0x00;
                        global_uart_send[6]=Cal_CRC(global_uart_send,global_uart_send[1]-1);
                        UART_SendWait_app(UART1);
                        UART_clear();
                        UART_send_num++;
                }
        }
        KBI1->PE |= 0x2000;
        KBI_EnableInt(KBI1);
}


最佳答案

建议参考TRK-KEA128软件与工具页面上Keyboard Interrupt (KBI)例程,比如TRK-KEA128_IAR_LABTS4工程里KBI相关函数测试一下。 [attach]428007[/attach] [attach]428006[/attach] ...
回复

使用道具 举报

该用户从未签到

2

主题

9

帖子

0

注册会员

Rank: 2

积分
82
最后登录
1970-1-1
 楼主| 发表于 2017-9-8 00:16:42 | 显示全部楼层
不好意思上面写错了一句;KBI中断引脚使能寄存器配置为0x00002000;
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2017-9-8 11:13:46 | 显示全部楼层
    建议参考TRK-KEA128软件与工具页面上Keyboard Interrupt (KBI)例程,比如TRK-KEA128_IAR_LABTS4工程里KBI相关函数测试一下。
    TRK-KEA128.png

    TRK-KEA128_IAR_LABTS4.png




    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-2 19:41 , Processed in 0.090630 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表