嗨,Qinjiny_Dialog
IIC对OLED的写的发送方式为ad_i2c_async_transact;写多帧数据的时候,会有数据丢失,IIC总线没发送完成就停止了。导致我的OLED花屏。经过测试,发现关掉蓝牙广播之后,就不会有花屏的现象出现。可能蓝牙的活动影响到了IIC通讯。请教一下,如何协调IIC发送和蓝牙的相关活动吗?
可以尝试用OS_ENTER_CRITICAL_SECTION()进入系统临界区保证发送不被其它活动中断,完成传输后OS_LEAVE_CRITICAL_SECTION回到正常状态。
注意不要过于长时间或者过于频繁的使用这个功能,进入临界区会阻止其他所有中断,时间长了会影响整个系统的正常的时间表。
嗨,Qinjiny_Dialog多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40毫秒(iic_speed = 400 khz) .40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题吗?还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA (I2C2 SSD1306 0 x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,使用hw_i2c_write_buffer_dma_ex()发送数据,但是打印出来的设备- > dma_channel = 1;也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
你好先生,
你也可以尝试提高I2c的时钟频率,最好是使用spi接口的屏,数据传得快
嗨,JelphiIIC已经是400千赫了。硬件他们已经做好了,暂时没法修改了。只能以后的项目在修改了。多谢你的回答!祝好!
这不是一个好的选择:用I2c去刷屏,这决定了你始终会拉慢系统的性能,另外,你在用I2c一定要使用dma
嗨,Jelphi嗯嗯,多谢你的建议。dma在用的时候,也是没有文档可以看怎么来配置。可以简要说下IIC使用dma的配置流程不,我配置玩后,发现还是没有启动dma通道。
------------------------------------------------------------------------------------------------------------------------结婚,2017-03-08 07:48kingwheat嗨,Qinjiny_Dialog多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40毫秒(iic_speed = 400 khz) .40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题吗?还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA (I2C2 SSD1306 0 x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,使用hw_i2c_write_buffer_dma_ex()发送数据,但是打印出来的设备- > dma_channel = 1;也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?-------------------------------------------------------------------------------------------------------------------------
dma在sdk中已有配置,你是否其他地方申请了相同的dma通道,代码可以调试
可以尝试用OS_ENTER_CRITICAL_SECTION()进入系统临界区保证发送不被其它活动中断,完成传输后OS_LEAVE_CRITICAL_SECTION回到正常状态。
注意不要过于长时间或者过于频繁的使用这个功能,进入临界区会阻止其他所有中断,时间长了会影响整个系统的正常的时间表。
嗨,Qinjiny_Dialog
多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40毫秒(iic_speed = 400 khz) .40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题吗?
还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA (I2C2 SSD1306 0 x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,
使用hw_i2c_write_buffer_dma_ex()发送数据,但是打印出来的设备- > dma_channel = 1;
也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
你好先生,
你也可以尝试提高I2c的时钟频率,最好是使用spi接口的屏,数据传得快
嗨,Jelphi
IIC已经是400千赫了。硬件他们已经做好了,暂时没法修改了。只能以后的项目在修改了。多谢你的回答!
祝好!
你好先生,
这不是一个好的选择:用I2c去刷屏,这决定了你始终会拉慢系统的性能,另外,你在用I2c一定要使用dma
嗨,Jelphi
嗯嗯,多谢你的建议。dma在用的时候,也是没有文档可以看怎么来配置。可以简要说下IIC使用dma的配置流程不,我配置玩后,发现还是没有启动dma通道。
------------------------------------------------------------------------------------------------------------------------
结婚,2017-03-08 07:48
kingwheat
嗨,Qinjiny_Dialog
多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40毫秒(iic_speed = 400 khz) .40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题吗?
还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA (I2C2 SSD1306 0 x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,
使用hw_i2c_write_buffer_dma_ex()发送数据,但是打印出来的设备- > dma_channel = 1;
也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
-------------------------------------------------------------------------------------------------------------------------
dma在sdk中已有配置,你是否其他地方申请了相同的dma通道,代码可以调试