PN7462 I2CM驱动问题???

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

PN7462 I2CM驱动问题???

1,174 Views
onlineit
Contributor II

PN7462 I2CM驱动问题的驱动有问题,读I2C时,读取16字节,前面4个字节的数据总是重复的,不知道为什么?读写过PNEV7462B板子上的TDA8026的寄存器和EPSON公司的RX-8025SA时钟IC,都是这种情况,读写TDA8026的代码如下:

void phTestI2CM(void)
{
uint8_t pbuffer[128];
uint16_t wStatus;
do{
        //status = phhalI2CM_SlaveCheck(0x24);
        memset(pbuffer,0,sizeof(pbuffer));
        pbuffer[0]=0x00;
        wStatus = phhalI2CM_Transmit(0x24, 0x01, (uint32_t *)pbuffer);
       if (wStatus == PH_ERR_SUCCESS)
       {
         phLED_SetStatus(LED_G);
        }
      else
      {
         phLED_SetStatus(LED_R);
      }

      //读TDA8026的版本号(product version)
      wStatus = phhalI2CM_Receive(0x20, 0x10, (uint32_t *)pbuffer);
      if (wStatus == PH_ERR_SUCCESS)
      {
         phLED_SetStatus(LED_G);
      }
      else
      {
         phLED_SetStatus(LED_R);
      }
   }while(0);
}

执行完phhalI2CM_Receive后,pbuffer的内容如下:

C2 FF FF FF C2 FF FF FF   FF FF FF FF  FF FF FF FF

TDA8026的版本号(product version)为C2.

Labels (1)
0 Kudos
3 Replies

906 Views
onlineit
Contributor II

TIM图片20171017164745.png

代码如下:

uint8_t pbuffer[128];

__phUser_EnterCriticalSection();
wStatus = phhalI2CM_Receive(0x20, 0x20, (uint32_t *)pbuffer);
__phUser_ExitCriticalSection();
if (wStatus == PH_ERR_SUCCESS)
{
   phLED_SetStatus(LED_G);
}
else
{
   phLED_SetStatus(LED_R);
}

0 Kudos

906 Views
onlineit
Contributor II

单独在PN7462AU_ex_phExHif Project中加入I2C的代码测试又是可以的,只是在多任务环境下不行,不知道为什么?TIM图片20171018112157.png

0 Kudos

906 Views
Kan_Li
NXP TechSupport
NXP TechSupport

如果standalone可以,多任务环境下不行,可能和任务的优先级有关。


Have a great day,
Kan

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos