打印
[技术问答]

求大神指导F460中断注册函数

[复制链接]
1201|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuxinhd|  楼主 | 2022-7-6 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    今天在看F460手册的时候结合官方给的库学习中断注册的过程,案例中使用了en_result_t enIrqRegistration(const stc_irq_regi_conf_t *pstcIrqRegiConf)这个函数。
一开始还比较容易理解,进入函数体首先检查了一下入口参数的回调函数地址是不是空,但是没有对其他两个成员进行检查。再往下第一个if应该是判断中断向量编号是不是32-127之间。但是不能理解的是判断完了,如果中断向量编号在32-127之间竟然直接返回参数错误。而且在else中也仅仅对向量编号小于32的做了处理。
还一个百思不得其解的是if (0x1FFu == stcIntSel->INTSEL)这一句到底几个意思!
原函数我复制在下边,大家也可以看官方提供的库文件。求大神们帮忙分析一下!


en_result_t enIrqRegistration(const stc_irq_regi_conf_t *pstcIrqRegiConf)
{
    // todo, assert ...
    stc_intc_sel_field_t *stcIntSel;
    en_result_t enRet = Ok;

    //DDL_ASSERT(NULL != pstcIrqRegiConf->pfnCallback);检查回调函数地址不为空
    DDL_ASSERT(IS_NULL_POINT(pstcIrqRegiConf->pfnCallback));

    if (((((pstcIrqRegiConf->enIntSrc/32)*6 + 32) > pstcIrqRegiConf->enIRQn) || \
        (((pstcIrqRegiConf->enIntSrc/32)*6 + 37) < pstcIrqRegiConf->enIRQn)) && \
        (pstcIrqRegiConf->enIRQn >= 32))//第二种方式
    {
        enRet = ErrorInvalidParameter;
    }
    else//第一种方式
    {                //计算中断向量入口地址=M4_INTC->SEL0+偏移地址(4*中断向量编号)
        stcIntSel = (stc_intc_sel_field_t *)((uint32_t)(&M4_INTC->SEL0)         +   \
                                             (4u * pstcIrqRegiConf->enIRQn));
        if (0x1FFu == stcIntSel->INTSEL)//INTSEL[8:0]
        {
            stcIntSel->INTSEL = pstcIrqRegiConf->enIntSrc;//INTSEL寄存器中写入中断源序号
            IrqHandler[pstcIrqRegiConf->enIRQn] = pstcIrqRegiConf->pfnCallback;//回调函数地址放入中断向量表
        }
        else
        {
            enRet = ErrorUninitialized;
        }
    }
    return enRet;
}


使用特权

评论回复
沙发
wubangmi| | 2022-7-6 17:22 | 只看该作者
if语句是判断中断向量为32~127的中断源是否匹配,如果你选的中断源和中断向量不匹配,那就是错误的。你可以看中断向量是6个一组。有对应的中断源,不是随便匹配的。
else语句是中断源和中断向量匹配的情况下设置中断。至于0x1FF,应该是这个中断号没有被中断源用过,也就是避免你中断号被重复设置,也就是一个中断号对应了多个中断源。
以上是我个人的理解。
by the way:现在已经用到3.0.0的库了,2.2.0的库,我觉得应该可以放弃了,3.0.0的库请到小华半导体http://xhsc.com.cn下载

使用特权

评论回复
板凳
xuxinhd|  楼主 | 2022-7-8 14:25 | 只看该作者
wubangmi 发表于 2022-7-6 17:22
if语句是判断中断向量为32~127的中断源是否匹配,如果你选的中断源和中断向量不匹配,那就是错误的。你可以 ...

谢谢!已经换到新库了!我还以为那就是最新的

使用特权

评论回复
地板
skyred| | 2022-7-10 19:08 | 只看该作者
中断注册,,,,这个词有点潮

使用特权

评论回复
5
tpgf| | 2022-8-1 18:45 | 只看该作者
请问什么叫做注册函数呢

使用特权

评论回复
6
qcliu| | 2022-8-1 19:06 | 只看该作者
中断入口向量那块屏蔽了吧

使用特权

评论回复
7
drer| | 2022-8-1 19:13 | 只看该作者
是库的版本出问题了吗

使用特权

评论回复
8
coshi| | 2022-8-1 19:28 | 只看该作者
中断源和中断向量不匹配

使用特权

评论回复
9
kxsi| | 2022-8-1 19:34 | 只看该作者
二者不可随便匹配

使用特权

评论回复
10
wiba| | 2022-8-1 19:46 | 只看该作者
难道需要更新库吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

54

帖子

1

粉丝