I2C通信流保护(超时)

6个帖子/ 0新
最后一篇
Vadym.
离线
最后一次露面:1年5个月前
加入:2015-08-13 08:28
I2C通信流保护(超时)

你好。

我通过I2C通信,DA14580在主角色,SDK 5.0.3连接DA14580到RTC设备PCF85263A。
我用于EEPROM中的对话框官方I2C驱动从“DA14580_peripheral示例代码”,而当外部装置(RTC),其连接到总线它的工作原理。
当RTC装置断开和不响应(不存在ACK)的SW进入无限循环在功能“i2c_wait_until_eeprom_ready”。

你有像超时或模块重启这个问题在I2C模块的一些例子或硬件的解决方案?

我认为这个问题是一样的,以http://support.dialog-semiconductor.com/i2c-communication-eeprom-24lc08b

谢谢,
Vadym。

设备:
mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

请检查下面的帖子,

http://support.dialog-semiconductor.com/i2c-read-hangs-waitforreceivedbyte

谢谢mt_dialog.

Vadym.
离线
最后一次露面:1年5个月前
加入:2015-08-13 08:28
你好。

你好。

我认为实现一个超时的硬件定时器TMR0超时阅读处理一个选项。
在功能“read_data_single”有一部分,当所有的中断都被禁止。而当没有从I2C从答案中,程序等待确切的部分,当中断被禁用。
如果我的理解对不对,我不会接受定时器中断的回调,我需要通过轮询测试TMR?
我怎样才能得到TMR0的迹象是重叠或任何来自TMR0另一个标志?

我在哪里可以找到的I2C和TMR0模块API或详细的说明?

谢谢,
Vadym。

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

是的,如果中断被禁止你不会从计时器得到的中断,所以你可以尝试通过从定时器读取值轮询定时器寄存器TIMER0_ON_REG或者您也可以以轮询与NVIC_GetPendingIRQ(IRQn_Type IRQN)未决中断,检查SWTIM_IRQn已发生,而为了等待另一定时器中断后清除中断。我想以后更好。

谢谢mt_dialog.

Vadym.
离线
最后一次露面:1年5个月前
加入:2015-08-13 08:28
你好。

你好。

我尝试使用TIMER0的超时目的。
定时器初始化,并在明年开始方式:
空隙timeoutTimer0_init(无效)
{
timer0_stop();
timer0_register_callback(timer0_general_user_callback_function);
set_tmr_enable(CLK_PER_REG_TMR_ENABLED);
set_tmr_div(CLK_PER_REG_TMR_DIV_8);
timer0_set_pwm_high_counter(NO_PWM);
timer0_set_pwm_low_counter(NO_PWM);
timer0_init(TIM0_CLK_FAST,PWM_MODE_ONE,TIM0_CLK_DIV_BY_10);
}
空隙timeoutTimer0_start_10ms(无效)
{
timer0_disable_irq();
timer0_set_pwm_on_counter(RELOAD_10MS);// 2000
timer0_start();
timer0_enable_irq();
}

我收到的第一中断在很小的时候(我是不成功来衡量它)。后,我得到的中断预期时间(10毫秒)。
是否定时器值(TIMER0_ON_REG)从一些“重载值”装只有当计时器“溢出”与产生中断发生什么呢?
或者是我定时器设置的顺序是错的?

谢谢!

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

您在TIMER_ON_REG地方值是重装每次定时器计数下降到零,我看不出什么错,你怎么设置你的计时器虽然你可以看看如何定时器在SDK在下文中使用的值目录\ peripheral_examples \定时器0 \ timer0_general \。关于打断你几乎immidiatelly后启动定时器,定时器functionallity的一部分,你无法避免它,忽略它。

谢谢mt_dialog.