[技术问答] I2C中断里出现了switch或if语句中未处理的状态时,会导致死机。

[复制链接]
1366|15
 楼主| elephant00 发表于 2022-12-6 10:18 | 显示全部楼层 |阅读模式
收到几个数据后,I2C死机。

void I2C_SlaveTRx(uint32_t u32Status)

{

     ...

    if(u32Status == 0x60)

    ...

    else

    {

        /* TO DO */

        printf("Status 0x%x is NOT processed\n", u32Status);

}

}


pigluffy 发表于 2022-12-6 10:58 来自手机 | 显示全部楼层
感觉像是中断旗标未清除所导致的现象
LLGTR 发表于 2022-12-6 13:19 | 显示全部楼层
IIC死机?就是程序能正常跑IIC不通讯了?
天天向善 发表于 2022-12-6 13:24 | 显示全部楼层
你这是从机IIC?死机的现象是什么样的?
xch 发表于 2022-12-6 17:46 | 显示全部楼层
I2C 通信函数中不能嵌入标准的 printf 函数,除非自己改写poll模式的打印函数为DMA或者高优先级的中断函数。
jasontu 发表于 2022-12-7 07:41 | 显示全部楼层
如果有未判断的state code,可以看i2c state列表,後续看什麽事件发生,再作相对应的处理
两只袜子 发表于 2022-12-7 10:00 | 显示全部楼层
增加case,或者在default里重置I2C外设。

    else

    {

        /* TO DO */

        printf("Status 0x%x is NOT processed\n", u32Status);

        I2C_Close(I2C0);

        I2C0_Init();

}

xiaoqizi 发表于 2022-12-30 10:45 | 显示全部楼层
非常不建议楼主在iic的中断里边进行数据处理
drer 发表于 2022-12-30 11:35 | 显示全部楼层
xch 发表于 2022-12-6 17:46
I2C 通信函数中不能嵌入标准的 printf 函数,除非自己改写poll模式的打印函数为DMA或者高优先级的中断函数 ...

为什么iic函数中不能嵌入标准的printf函数呢?会导致什么问题呢?
coshi 发表于 2022-12-30 12:08 | 显示全部楼层
可以先把中断里边所有数据处理的函数都屏蔽掉试试看 是不是硬件的问题
wiba 发表于 2022-12-30 12:59 | 显示全部楼层
我觉得是因为在中断里边做if   else语句导致时序不稳定了
小小蚂蚁举千斤 发表于 2022-12-30 21:18 来自手机 | 显示全部楼层
wiba 发表于 2022-12-30 12:59
我觉得是因为在中断里边做if   else语句导致时序不稳定了

我感觉也是这样的,中断卡死了
LOVEEVER 发表于 2023-1-10 16:07 | 显示全部楼层
楼主这个貌似就是在中断里面出问题了,楼主可以去掉中断放在外面确认一下,应该就会没问题
OKAKAKO 发表于 2023-1-11 17:28 来自手机 | 显示全部楼层
中断旗标未处理吧。而且可不建议这么处理
中国龙芯CDX 发表于 2023-1-12 11:28 | 显示全部楼层
xiaoqizi 发表于 2022-12-30 10:45
非常不建议楼主在iic的中断里边进行数据处理

确实在终端里面进行数据处理会出很大问题,有时候整体就会出问题
小夏天的大西瓜 发表于 2023-1-12 14:21 | 显示全部楼层
建议楼主通信数据和算法分开,中断里面只做数据算法,这样不会影响原始数据的获得
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1031

主题

3946

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部