查看: 1951|回复: 1

[其他] 求助:MC56F84786 I2C问题

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
9
最后登录
2018-6-18
发表于 2015-2-2 21:15:51 | 显示全部楼层 |阅读模式
如题。最近在尝试I2C通信的时候遇到了一些问题,在PE下配置的I2C无法和MMA8451Q传感器正常传输数据,求问哪里出问题了?
附部分代码:

volatile word OnReceiveDataNum = 0;
volatile word OnTransmitDataNum = 0;
volatile word OnByteTransferNum = 0;
volatile word OnArbitLostNum = 0;
volatile word OnNACKNum = 0;

volatile word OnSendRecvDataNum = 0;
volatile word OnErrorNum = 0;


void MMA8451Q_init(void);
int MMA8451Q_getX(void);

volatile byte Err;

void main(void)
{
  /* Write your local variable definition here */

        byte CTRL_REG1[2] = {0x2A,0x07};
        byte CTRL_REG2[2] = {0x2B,0x00};
        byte XYZ_DATA_CFG[2] = {0x0E,0x01};

        byte X_Lsb[1] = {0x01};
        byte X_Msb[1] = {0x02};
        byte X_dataH[1], X_dataL[1];
       
        word rcv;
        bool Error = FALSE;

  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  __DI();
  DRV_PWM_Init();
  ADC12_Init();
  OLEDInit();OLEDUpdate(0,0);
  CamInitSystem();
  __EI(0);
  //COP_CTRL&=~(0x2);//cop disable or close watch dog
  /*** End of Processor Expert internal initialization.                    ***/
  /* Write your code here */

  DRV_MEN_PutVal(1);

  Cpu_Delay100US(1);
  I2C1_SelectSlave(0x1C);

  while ((OnSendRecvDataNum == 0) && (OnErrorNum == 0)) {}
  while (I2C1_CheckBus() == I2C1_BUSOFF) {}
  OnErrorNum = 0;
  OnSendRecvDataNum = 0;
  Err = I2C1_SendBlock(&CTRL_REG1[0],2,&rcv);
  if ((Err) || (rcv != 11)) {
    Error = TRUE;
  }
  while ((OnSendRecvDataNum == 0) && (OnErrorNum == 0)) {}
  while (I2C1_CheckBus() == I2C1_BUSOFF) {}
  OnErrorNum = 0;
  OnSendRecvDataNum = 0;
  Cpu_Delay100US(100);

//--------------------------------------------------------



调试中程序在 while ((OnSendRecvDataNum == 0) && (OnErrorNum == 0)) {}处死循环。

I2C1_SelectSlave函数(如下)完全由PE生成:

byte I2C1_SelectSlave(byte Slv)
{
  if (getRegBit(I2C1_C1,MST) != 0x00U) { /* Is the device in the active state? */
    return ERR_BUSY;                   /* If yes then error */
  }
  I2C1_SlaveAddr = (byte)(Slv << 1);   /* Set slave address */
  return ERR_OK;                       /* OK */
}

附PE配置:
2-2.jpg

2-2-1.jpg
完全不知道问题出在哪里,求解,谢谢!

我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

0

主题

43

帖子

0

注册会员

Rank: 2

积分
159
最后登录
1970-1-1
发表于 2015-2-4 17:02:11 | 显示全部楼层
这是一个I2C的基于MC56F8257的例子,I2C模块是一样的, 但没用PE,你可以参考。

i2c_smb_7bit_m_s_single_chip.zip

530.99 KB, 下载次数: 1, 下载积分: 威望 1

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 18:03 , Processed in 0.084319 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表