跳过主要内容

I2C通信流保护(超时)

DA14580

5年前

发布的Vadym0点 5回复
0的问题

嗨。

我将DA14580连接到RTC设备PCF85263A通过I2C通信,DA14580在主角色,SDK 5.0.3。
我从“DA14580_peripheral示例代码”中使用了Dialog官方的eeprom I2C驱动程序,当外部设备(RTC)连接到总线时,它可以工作。
当RTC设备断开连接且没有响应(没有ACK)时,SW在函数“i2c_wait_until_eeprom_ready”中进入无限循环。

你有一些例子或HW解决方案在I2C模块这个问题,如超时或模块重启?

我认为问题和http://support.dialog-semiconductor.com/i2c-communication-eeprom-24lc08b

谢谢,
Vadym。

5年前

MT_dialog -30点

嗨Vadym,

请查看下面的帖子,

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

由于MT_dialog

5年前

Vadym 0点

嗨。

我考虑使用硬件计时器TMR0实现超时处理以进行超时读取。
在函数"read_data_single"中,当所有中断被禁用时,有一部分。当I2C从站没有应答时,程序正好在中断被禁用的部分等待。
如果我理解正确,我将不会收到定时器中断回调,我需要通过轮询测试TMR ?
我如何从TMR0中得到TMR0是重叠或任何其他标志的指示?

在哪里可以找到I2C和TMR0模块的API或详细描述?

谢谢,
Vadym。

5年前

MT_dialog -30点

嗨Vadym,

是的,如果中断禁用你不会得到一个定时器中断,所以你可以试着调查计时器通过阅读从计时器的值寄存器TIMER0_ON_REG或者你可以调查的等待中断NVIC_GetPendingIRQ (IRQn_Type IRQn),以检查是否SWTIM_IRQn已经发生,并清除中断后,以等待另一个计时器中断。我认为后者更好。

由于MT_dialog

5年前

Vadym 0点

嗨。

我尝试使用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 ();

我在非常短的时间内接收到第一个中断(我没有成功测量它)。在我得到中断在预期的时间(10mSec)。
定时器值(TIMER0_ON_REG)从一些“重载值”加载只有当计时器“溢出”发生中断生成?
或者我的定时器设置序列是错误的?

谢谢!

5年前

MT_dialog -30点

嗨Vadym,

的价值,你的价值是在TIMER_ON_REG重新加载每次计时器倒数至零,我不看到什么毛病你如何设置定时器虽然可以看看如何使用定时器在以下目录\ peripheral_examples \ SDK timer0 \ timer0_general \。关于你几乎立即得到的中断,在你启动计时器后,这是计时器功能的一部分,你不能避免它,只是忽略它。

由于MT_dialog