打印

求AW系列IIC模块中断例程

[复制链接]
2827|14
手机看帖
扫描二维码
随时随地手机跟帖
沙发
imwangyi| | 2007-1-5 09:30 | 只看该作者

CW5.1安装后有参考代码

program filesfreescale(CodeWarrior_Examples)HCS08Device Initialization C ExamplesGB60_ModulesSourcesIIC_GB60

这是基于标准iic的,至于24C02的,你要自己写了.
:P

使用特权

评论回复
板凳
秋叶|  楼主 | 2007-1-5 21:13 | 只看该作者

每个技术支持都让我看CW自带的例程,如果能用我就不在此发

使用特权

评论回复
地板
张明峰| | 2007-1-6 11:26 | 只看该作者

如果不能用就不会带在里面了

只想吃现成饭的就不要搞研发。

使用特权

评论回复
5
秋叶|  楼主 | 2007-1-7 20:15 | 只看该作者

张先生,做技术支持不能以这个心态啊

我们用户主要集中精力在产品的应用上,如果啥都要自已搞定,哪飞思卡尔只需要报价员就可以了,开什么论谈,中央电视台打个广告就成

使用特权

评论回复
6
imwangyi| | 2007-1-8 13:23 | 只看该作者

肯定可以用

WriteBytesI2C
参考代码里修改IIC1D=slaveAddress可以设置外设置的地址.
I2C_DATA[0]放eeprom的地址.
I2C_DATA[1]开始放写如数据. data len>=2;
做读EEPROM前需写入地址(WriteBytesI2C data len =1)后再做读(ReadBytesI2C data len>=1). 

使用特权

评论回复
7
张明峰| | 2007-1-10 13:08 | 只看该作者

对于只想“守株待兔”的

该是什么心态比较恰当呢?

使用特权

评论回复
8
imwangyi| | 2007-1-11 15:45 | 只看该作者

如何读/写24C02

读24c02,参考代码需要做一下修改.
unsigned char WriteBytesI2C (unsigned char slaveAddress,unsigned char numberOfBytes){
   unsigned char Temp;
  I2C_LENGTH = numberOfBytes;
  if (I2C_LENGTH==1) Temp3=1; else Temp3=0;  做地址定位用
  I2C_COUNTER =0;
  I2C_STEP = IIC_HEADER_SENT_STATUS;
  I2C_DATA_DIRECTION = 1;
  /* Format the Address to fit in the IICA register and place a 0 on the R/W bit.*/
  slaveAddress &= 0xFE;
  IIC1C_IICEN = 0;
  IIC1C_IICEN = 1;
  Temp = IIC1S;                 /* Clear any pending interrupt */
  IIC1S_IICIF=1;

  IIC1C_MST = 0;
  Temp1=1;   
  IIC1S_SRW=0;
  IIC1C_TX = 1;                          /* Select Transmit Mode */
    IIC1C_MST = 1;                        /* Select Master Mode (Send Start Bit) */
  
  for(Temp=0;Temp<5;Temp++);    /* Small delay */
  
  IIC1D=slaveAddress;                        /* Send selected slave address */
  
  return(1);
}

使用特权

评论回复
9
imwangyi| | 2007-1-11 15:46 | 只看该作者

读写24C02-2

unsigned char ReadBytesI2C (unsigned char slaveAddress,unsigned char numberOfBytes){

  unsigned char Temp;

  I2C_LENGTH = numberOfBytes;

  I2C_COUNTER =0;
  I2C_STEP = IIC_HEADER_SENT_STATUS;
  I2C_DATA_DIRECTION = 0;
  
  /* Format the Address to fit in the IICA register and place a 1 on the R/W bit. */
 
  slaveAddress &= 0xFE;
  slaveAddress |= 0x01;         /* Set the Read from slave bit. */

  Temp = IIC1S;                 /* Clear any pending interrupt  */
  IIC1S_IICIF=1;
  
  IIC1C_TX = 1;                          /* Select Transmit Mode          */
    IIC1C_MST = 1;                        /* Select Master Mode (Send Start Bit)*/
  IIC1C_RSTA=1; //重复发Start,即没有STOP时发Start
  IIC1D=slaveAddress;                        /* Send selected slave address   */
  Temp3=0;
  return(1);
}


使用特权

评论回复
10
imwangyi| | 2007-1-11 15:48 | 只看该作者

读写24C02-3

//.....interrupt 24 void IIC_Control_handler里在发送len=1时不发stop  

if(I2C_STEP==IIC_DATA_SENT_STATUS){           /* We are done with the transmition.*/ 
             
             I2C_STEP=IIC_READY_STATUS;                 /* Reset our status flag            */
             Temp = IIC1S;                                             /* ACK the interrupt                */
           IIC1S_IICIF=1;
             if (!Temp3){
              
             IIC1C_TX=0;
             IIC1S_SRW=0;
             IIC1C_MST=0;
             }/* Generate a stop condition        */              
             return;
       }        

使用特权

评论回复
11
imwangyi| | 2007-1-11 15:50 | 只看该作者

读写24C02-4

//.....interrupt 24 void IIC_Control_handler Star 后第一次进中断不发数据stop  

              if (Temp1!=1){
              IIC1D = I2C_DATA[I2C_COUNTER];
              I2C_COUNTER++;
              } else
              Temp1=0;
              return;          
          }

使用特权

评论回复
12
imwangyi| | 2007-1-11 15:53 | 只看该作者

读写24C02-5

configureI2C(0xa0);  //a0,a1,a2 全为0
  I2C_DATA[0]=0X0;    /* EEPROM第0个地址*/
  I2C_DATA[1]=0XAA;    /* 要写数据为0xaa*/   
  EnableInterrupts; /* enable interrupts */  
 

  WriteBytesI2C(0xA0,2);// 写一个AA到24c02地址为0里面去.
  while(I2C_STEP>IIC_READY_STATUS)__RESET_WATCHDOG(); /* wait for memory to be read */
     delay_10ms();
  WriteBytesI2C(0xA0,1);//定位地址为0.
  while(I2C_STEP>IIC_READY_STATUS)__RESET_WATCHDOG(); /* wait for memory to be read */
   //  delay_10ms();
   //while (I2C_COUNTER!=1)  __RESET_WATCHDOG();
  
   ReadBytesI2C(0XA1,1)   ;读1个Byte
   while(I2C_STEP>IIC_READY_STATUS)__RESET_WATCHDOG(); 

使用特权

评论回复
13
imwangyi| | 2007-1-11 15:54 | 只看该作者

如果需要测试代码,e-mail到ileudora@126.com

使用特权

评论回复
14
mc9s08aw60| | 2007-2-6 15:20 | 只看该作者

imwangyi,能否分一份测试程序。谢谢。

mc9s08aw60@126.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

91

帖子

1

粉丝