[uCOS/RTOS]

arm7单片机移植ucos后i2c地址搜索拖死主机

[复制链接]
550|6
手机看帖
扫描二维码
随时随地手机跟帖
luoengineer|  楼主 | 2020-6-29 14:52 | 显示全部楼层 |阅读模式
本帖最后由 luoengineer 于 2020-6-30 17:30 编辑

arm 7核的aduc7026成功移植了ucos-ii,做了一个从i2c中断程序,与2112 通信100k速率正常。但是如果2112主机用i2c地址搜索功能,35k速率没有问题,可以找到7026的从机地址,但是大于35k后,就会把主机的sda 拖低,2112只好reset。
郁闷,移植后其他功能都ok,跑了24小时也没问题,但就是i2c地址搜索这个尾巴。
求解释。

使用特权

评论回复

相关帖子

luoengineer|  楼主 | 2020-7-3 08:46 | 显示全部楼层
昨日突破了,将I2C改成FIQ后,I2C搜索达到70K bus不会挂掉了

使用特权

评论回复
luoengineer|  楼主 | 2020-7-3 10:04 | 显示全部楼层
今日再次突破,速率96k i2c 搜索 ok,秘诀:F标志始终不能置1

使用特权

评论回复
luoengineer|  楼主 | 2020-7-8 09:55 | 显示全部楼层
fiq里面加OSMboxPost,数据没能发到任务,奇怪,请大神指导一下呢

使用特权

评论回复
luoengineer|  楼主 | 2020-7-8 10:05 | 显示全部楼层
这是OSMboxPost的代码片段, 里面有一个任务调度,这样的话岂不是在中断代码里面就会打断?

OS_ENTER_CRITICAL();
    if (pevent->OSEventGrp != 0) {                    /* See if any task pending on mailbox            */
                                                      /* Ready HPT waiting on event                    */
        (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK);
        OS_EXIT_CRITICAL();
        OS_Sched();                                   /* Find highest priority task ready to run       */
        return (OS_ERR_NONE);
    }

使用特权

评论回复
luoengineer|  楼主 | 2020-7-21 15:33 | 显示全部楼层
消息队列LetterQeue如下使用,有没有问题呢?

OS_EVENT  *LetterQeue;
#define Letter_Size           32
void * LetterQeueTb[Letter_Size];

LetterQeue = OSQCreate(&LetterQeueTb[0], Letter_Size);

static  void  AppTaskOne      (void  *p_arg)
{
        INT32U msg;
        INT8U err;
        (void)p_arg;        
       
        while (DEF_TRUE)
        {
                msg = (INT32U)OSQPend(LetterQeue, 0, &err);
                switch (msg & 0xFF)
                {
                    ....
                 }
        }
}

Fiq:
OSQPost(LetterQeue, (void *)(byIndex));


使用特权

评论回复
luoengineer|  楼主 | 2020-7-23 14:46 | 显示全部楼层

说好的不使用SVC 管理模式,确发现使用了,求大神解释一下呢
127835f1930737947b.png
464065f1931ab7300e.png

#define  ARM_MODE_ARM           0x00000000
#define  ARM_MODE_THUMB         0x00000020

#define  ARM_SVC_MODE_THUMB    (0x00000013L + ARM_MODE_THUMB)
#define  ARM_SVC_MODE_ARM      (0x00000013L + ARM_MODE_ARM)

使用特权

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

本版积分规则

19

主题

80

帖子

1

粉丝