S3C2410 IIC EEPROM 总结

      看了两天的IIC总线,内部结构,寄存器,时序,程序终于有些进展,总结一下,本篇博客总结于两本书中介绍和一篇博客外加自己的思想。

      IIC总线上的数据稳定规则,SCL处于高电平时,SDA上的数据保持稳定,SCL为低电平时允许SDA变化。如果SCL处于高电平是,SDA上产生下降沿,则认为是起始位,SDA上的上升沿认为是 停止位。(注:前提SCL处于高电平时,前面的稳定是指数据的稳定)。如果是利用I/O口来模拟IIC总线就眼严格按照时序 进行命令,数据的读写,这里主要介绍S3C2410中的IIC。

      S3C2410中的IIC主要是寄存器的设置:IICON :应答产生允许1,中断允许使能1

      IICSTAT :模式选择,开始/停止信号,串行输出使能,后四位设置为1

        IICADD :用于产生从地址

        IICDS :IIC总线发送/接收数据以为寄存器,主要用于产生移位数据。其功能与RS232串口的数据寄存器相似(个人理解)当IICSTAT寄存器中串行数据输出使能位=1,IICDS允许进行写操作。在操作中进行的数据传输首先放在IICDS寄存器中,然后设置串行输出允许,数据会自动传输到IIC总线上。给IICDS放好东西,它自动递给Shift Register,在置IICSTAT的第五位为1后,数据就开始传送,字节为单位。

       所传的第一个数据字节,为从设备内要读/写的地址。从设备的地址寄存器会记住这个地址因此,作读操作时,并不是马上进入MR(Master/Receiver)模式,而是先进入MT(Master/Transmitter)模式,往从设备送出要读的首地址,然后进入MR,开始读模式。

          关于中断:

MANUAL上交代道:An IIC-bus interrupt occurs 1) when a 1-byte transmit or receive operation is completed, 2) when a general call or a slave address match occurs, or 3) if bus arbitration fails.也就是说,传输完一个字节后,就会产生中断。其实,这里的“字节传输结束”、“中断”以及“ACK”都是一个东东。

          在看程序时,忘记了中断程序,导致看到这样一个死循环while(_iicStatus==0x100);实际上利用iic时,传输完一个字节就会产生中断,这个死循环就是在等待每一个字节传输完再继续操作的。

_iicMode = POLLACK; //在中断中被SWITCH CASE用
   while(1)
   {
     rIICDS    = slvAddr;
     _iicStatus = 0x100;
     rIICSTAT   = 0xf0;        //MasTx,Start
     rIICCON   = 0xaf;        //Resumes IIC operation.
      
     while(_iicStatus==0x100); //_iicStatus作为信号量,应该由中断使能结束循环

     if(!(_iicStatus&0x1))
       break;            //When ACK is received
   }
在中断列程中:
switch(_iicMode)
{
case POLLACK:
       _iicStatus = iicSt;
       break;
...
...
}
他是直接退出中断的,然后
if(!(_iicStatus&0x1))
       break;            //When ACK is received
判断是否收到ACK
这团代码如果放到程序的一开始,可以理解为判断从设备是否在线,但是在实验代码里把他放在程序的最后,则没有什么用处了。
         总结:通过iic的学习,发现了点学习硬件的经验,总结一下:学习硬件外设,如果能产生中断的,一定要清楚产生中断的条件,然后要注意中断服务函数的作用(pISR_IIC)

要学习寄存器的设置。一般外设的功能根据时序,流程图,看程序,程序要想实现流程图,如果是微控制器中已有的功能,大多都是设置寄存器就可以实现功能,比如DMA,还有今天看的iic都是。  

        问题:从地址的匹配,每个通过iic连接的外设都有自己的设备地址,这个还没有研究,这只是 主发送模式,主接收模式,还有其他模式,具体应用的时候在说吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值