请教 uboot模式下 - I2C硬件发送寄存器的理解。

小陆zi 2012-06-20 12:39:48
Hi 大侠:
omap 3530板子。其中有一个寄存器:
register name :I2C_STAT
第4个bit位的描述:
XRDY Transmit Data Ready IRQ status. Set to 1 in transmit mode when new data is requested RW 0
for transmission. When this bit is set to 1, an interrupt is signaled to MPU subsystem
  Read 0x0: No transmit data is requested for transmission
  Read 0x1: Transmit data is requested for transmission
  Write 0x0: No effect
  Write 0x1: Clear this bit to 0.

再看另外一短描述:
Poll the I2Ci.I2C_STAT[4] XRDY bit,
or use the XRDY interrupt (the I2Ci.I2C_IE[4] XRDY_IE bit must be
set to 1)
or the DMA TX channel (the I2Ci.I2C_BUF[7] XDMA_EN bit must be set to 1) to write data to the I2Ci.I2C_DATA register.


在uboot的代码中就是对这个位设置“1”。这个时候是不是触发了数据发送?在没有中断(uboot)的情况下:也就是在这个位设置“1”以后。data line上就会出现串行的数据?

希望做过类似驱动的大虾们给点帮助。
谢谢
...全文
304 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝉时雨 2012-06-21
  • 打赏
  • 举报
回复
不对。
这个状态位只是起到1个提醒程序员"数据已经准备好了"的作用。
也就是说,在这个代码里就算你不清零,数据也会发送出去。
小陆zi 2012-06-20
  • 打赏
  • 举报
回复
hi ceter:
谢谢你的回复。
我知道清0的动作。但是清0后是不是会把buf的数据串行到data line上,在没有中断的情况下
贴一段代码:
if (status & I2C_STAT_XRDY)
{
    /* send out 1 byte */
outb(regoffset, I2C_DATA); //把要发送的数据写到buffer中
outw(I2C_STAT_XRDY, I2C_STAT);//这个就是第四个bit位写1的动作
status = wait_for_pin(); //这个时候就是delay等待pin的空闲
if ((status & I2C_STAT_XRDY)) {
    /* send out next 1 byte */
outb(value, I2C_DATA); //如果空闲就在把第二的buffer中的数据再次发送。
outw(I2C_STAT_XRDY, I2C_STAT);
} else {
i2c_error = 1;
}
    udelay (50000);

我感觉在没有中断的情况下,这个bit位就是触发硬件发送的"开关"。一旦设置了,数据就会发送到dataline上。不知道我的理解对不对。

谢谢
蝉时雨 2012-06-20
  • 打赏
  • 举报
回复
写1是为了清零。
这是个中断状态位,数据准备好(某个buf满了)以后,这个位会被硬件置为1。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧