TI中文支持网
TI专业的中文技术问题搜集分享网站

有关I2C的问题

您好!

      我用HALCoGen帮助里的I2C通信例程测试I2C时,数组RX_PACK只能收到前8位数据,并且程序运行不到 i2cClearSCD(i2cREG1)这句?当我把数组TX_PACK的后8位字符去除,只留前8位的时候,可以运行到 i2cClearSCD(i2cREG1)这句,然后我加了个串口发送中断去发送RX_PACK所接收的数据,结果没有进入中断,数据就发送了。弄了很久没有弄清楚什么问题?想问下是什么原因?前一个程序是HALCoGen帮助里的程序,后一个是我加串口发送中断的程序

 

修改的程序:

/* Include Files */

#include "sys_common.h" #include "system.h"/** @file sys_main.c *   @brief Application main file *   @date 15.Aug.2012 *   @version 03.02.00 * *   This file contains an empty main function, *   which can be used for the application. */

/* (c) Texas Instruments 2009-2012, All rights reserved. */

/* USER CODE BEGIN (0) */ /* USER CODE END */

/* Include Files */

#include "sys_common.h"

#include "system.h"

#include "i2c.h"

#include "sci.h"

#define own_add 0x20

#define slv_add 0x10

#define bsize    8

uint8_t  TX_PACK[bsize]={'H','E','R','C','U','L','E','S'};

uint8_t  RX_PACK[bsize]={0};

 uint32_t data;

uint32_t Time;

static unsigned char a;

void i2cEnableLoopback(i2cBASE_t *i2c);

void sciNotification(sciBASE_t *sci, uint32_t flags);

void main(void)

{     uint32_t buf_size = bsize;   

  uint8_t  *t_buff = &TX_PACK[0];   

  uint8_t  *r_buff = &RX_PACK[0];   

  Time=8;

    /* i2c initialization         */    

 i2cInit();    

 sciInit();   

  _enable_IRQ();

    /* set i2c own address        */   

 i2cSetOwnAdd(i2cREG1,own_add);

    /* enable internal loopback   */  

  i2cEnableLoopback(i2cREG1);

    /* Initiate Start condition for Transmission  */   

  i2cSetStart(i2cREG1);

    /* send data packets          */    

 while(buf_size–)   

  {        i2cSendByte(i2cREG1,*t_buff++);        /* receive data packets    */     

          *r_buff++ = i2cReceiveByte(i2cREG1);      

   }

    /* Clear Stop Condition detect flag  */

    i2cClearSCD(i2cREG1);

    while(1)    

            {     if(Time==8)  

                          {      Time=0;    

                                  sciSend(scilinREG,buf_size,RX_PACK);  

                           }

               }

}

void sciNotification(sciBASE_t *sci, uint32_t flags)

 {

    sciSend(scilinREG, bsize, RX_PACK);

  Time++;

}

 

 

Jay:

你好,

你是不是设置了接收到8个字节就产生STOP了。

在I2C的Halcogen配置部分可以进行配置,请确认一下。

weibin chi:

回复 Jay:

Jay,你好

       应该是我设置了接收到8个字节就产生STOP了。 我用的是TMS570LS3137的开发板,对于我修改的那个程序,没有进入中断就发送了,这个是什么原因?(已经设置了发送中断)

  谢谢

  

Jay:

回复 weibin chi:

你有在主循环中一直在调用SCI的发送,所以数据就发出去了。

没有进中断,是因为你没有调用SCI的中断使能函数sciEnableNotification。

weibin chi:

回复 Jay:

Jay,你好

  

       我看TMS570开发板中附带的关盘中的,有个SCI中断的收发视频,里面使能了接受中断,其程序里就没有调用中断使能函数sciEnableNotification,并且其主函数中调用了 sciReceive,而且我做了该例程,可以实现接受中断,如果把主函数中的 sciReceive去除,出现进入不了中断函数的情况。

     ·1、这是什么原因呀?

     2、  想问什么时候要调用中断使能函数sciEnableNotification?

Jay:

回复 weibin chi:

我不清楚光盘中的视频是怎么做的。

但按我的经验,sciEnableNotification应该是要调用的。

你加sciEnableNotification调用先试试嘛。

weibin chi:

回复 Jay:

Jay,你好。

     我有试过调用sciEnableNotification,但是问题还是没有解决,还是没有进入中断。你能不能给个你调试的,有用到串口中断的例程。

 

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 有关I2C的问题
分享到: 更多 (0)