DA14580
5年前
发布的Vadym0点 5回复嗨。
我将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年前
嗨。
我考虑使用硬件计时器TMR0实现超时处理以进行超时读取。
在函数"read_data_single"中,当所有中断被禁用时,有一部分。当I2C从站没有应答时,程序正好在中断被禁用的部分等待。
如果我理解正确,我将不会收到定时器中断回调,我需要通过轮询测试TMR ?
我如何从TMR0中得到TMR0是重叠或任何其他标志的指示?
在哪里可以找到I2C和TMR0模块的API或详细描述?
谢谢,
Vadym。
5年前
嗨Vadym,
是的,如果中断禁用你不会得到一个定时器中断,所以你可以试着调查计时器通过阅读从计时器的值寄存器TIMER0_ON_REG或者你可以调查的等待中断NVIC_GetPendingIRQ (IRQn_Type IRQn),以检查是否SWTIM_IRQn已经发生,并清除中断后,以等待另一个计时器中断。我认为后者更好。
由于MT_dialog
5年前
嗨。
我尝试使用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年前
嗨Vadym,
请查看下面的帖子,
http://support.dialog-semiconductor.com/i2c-read-hangs-waitforreceivedb..。
由于MT_dialog