arm7单片机移植ucos后i2c地址搜索拖死主机
本帖最后由 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地址搜索这个尾巴。
求解释。
昨日突破了,将I2C改成FIQ后,I2C搜索达到70K bus不会挂掉了 今日再次突破,速率96k i2c 搜索 ok,秘诀:F标志始终不能置1 fiq里面加OSMboxPost,数据没能发到任务,奇怪,请大神指导一下呢 这是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);
} 消息队列LetterQeue如下使用,有没有问题呢?
OS_EVENT*LetterQeue;
#define Letter_Size 32
void * LetterQeueTb;
LetterQeue = OSQCreate(&LetterQeueTb, Letter_Size);
staticvoidAppTaskOne (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));
说好的不使用SVC 管理模式,确发现使用了,求大神解释一下呢
#defineARM_MODE_ARM 0x00000000
#defineARM_MODE_THUMB 0x00000020
#defineARM_SVC_MODE_THUMB (0x00000013L + ARM_MODE_THUMB)
#defineARM_SVC_MODE_ARM (0x00000013L + ARM_MODE_ARM)
页:
[1]