打印
[技术问答]

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

[复制链接]
989|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?死机的现象是什么样的?

使用特权

评论回复
5
xch| | 2022-12-6 17:46 | 只看该作者
I2C 通信函数中不能嵌入标准的 printf 函数,除非自己改写poll模式的打印函数为DMA或者高优先级的中断函数。

使用特权

评论回复
6
jasontu| | 2022-12-7 07:41 | 只看该作者
如果有未判断的state code,可以看i2c state列表,後续看什麽事件发生,再作相对应的处理

使用特权

评论回复
7
两只袜子| | 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();

}

使用特权

评论回复
8
xiaoqizi| | 2022-12-30 10:45 | 只看该作者
非常不建议楼主在iic的中断里边进行数据处理

使用特权

评论回复
9
drer| | 2022-12-30 11:35 | 只看该作者
xch 发表于 2022-12-6 17:46
I2C 通信函数中不能嵌入标准的 printf 函数,除非自己改写poll模式的打印函数为DMA或者高优先级的中断函数 ...

为什么iic函数中不能嵌入标准的printf函数呢?会导致什么问题呢?

使用特权

评论回复
10
coshi| | 2022-12-30 12:08 | 只看该作者
可以先把中断里边所有数据处理的函数都屏蔽掉试试看 是不是硬件的问题

使用特权

评论回复
11
wiba| | 2022-12-30 12:59 | 只看该作者
我觉得是因为在中断里边做if   else语句导致时序不稳定了

使用特权

评论回复
12
小小蚂蚁举千斤| | 2022-12-30 21:18 | 只看该作者
wiba 发表于 2022-12-30 12:59
我觉得是因为在中断里边做if   else语句导致时序不稳定了

我感觉也是这样的,中断卡死了

使用特权

评论回复
13
LOVEEVER| | 2023-1-10 16:07 | 只看该作者
楼主这个貌似就是在中断里面出问题了,楼主可以去掉中断放在外面确认一下,应该就会没问题

使用特权

评论回复
14
OKAKAKO| | 2023-1-11 17:28 | 只看该作者
中断旗标未处理吧。而且可不建议这么处理

使用特权

评论回复
15
中国龙芯CDX| | 2023-1-12 11:28 | 只看该作者
xiaoqizi 发表于 2022-12-30 10:45
非常不建议楼主在iic的中断里边进行数据处理

确实在终端里面进行数据处理会出很大问题,有时候整体就会出问题

使用特权

评论回复
16
小夏天的大西瓜| | 2023-1-12 14:21 | 只看该作者
建议楼主通信数据和算法分开,中断里面只做数据算法,这样不会影响原始数据的获得

使用特权

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

本版积分规则

969

主题

2979

帖子

7

粉丝