This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/LAUNCHXL-F28377S:F2837xS 外设驱动程序库- I2C 模块

Guru**** 2581045 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/648142/ccs-launchxl-f28377s-f2837xs-peripheral-driver-library---i2c-module

器件型号:LAUNCHXL-F28377S

工具/软件:Code Composer Studio

大家好、我正在使用 F28377S 微控制器、

 

我对 i2cn´t 有一些疑问、因为我无法正确配置(用于发送要显示的数据的配置)。

 

我需要:

  • 微控制器必须是主器件。
  • 微控制器必须发送数据/Start–数据(带有从器件地址)–Stop / Bytes 到从器件。
  • I2C 数据必须在函数调用时发送(无中断)。

 

在 C2000或控制套件提供的示例中、不考虑这种情况(中断示例)。

 

在我的示例中,微控制器仅将从地址发送到 i2c 总线(不含数据),我不知道原因。

 

我尝试了许多 i2c 配置、但结果是相同的。

 

您是否有任何具有这些特征的示例?

 

可以帮帮我吗?

 

 

我的示例:

 

//包含的文件

//

#include "driverlib.h"

#include "device.h"

 

//

//定义

//

#define SLAVE_ADDRESS  0x74

 

//

//全局

//

uint16_t sData[8];                 //发送数据缓冲区

uint16_t RDATA[8];                 //接收数据缓冲器

uint16_t rDataPoint = 0;           //跟踪我们在中的位置

                                   //数据流以检查接收到的数据

//

//函数原型

//

void initI2C (void);

 

//

//主函

//

void main (void)

  {

 

   uint16_t i;

 

   //

   //初始化设备时钟和外设

   //

   device_init();

 

   //

   //禁用引脚锁定并启用内部上拉

   //

   DEVICE_initGPIO();

   //

   //初始化 GPIO 42和43分别用作 SDA A 和 SCL A

   //

   GPIO_setPinConfig (GPIO_42_SDAA);

   GPIO_setPadConfig (42、GPIO_PIN_TYPE_PULLUP);

   GPIO_setQualificationMode (42、GPIO_QUAL_异 步);

 

   GPIO_setPinConfig (GPIO_43_SCLA);

   GPIO_setPadConfig (43、GPIO_PIN_TYPE_PULLUP);

   GPIO_setQualificationMode (43、GPIO_QUAL_异 步);

   //

   //初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。

   //

   interrupt_initModule()

 

   //

   //使用指向 shell 中断的指针初始化 PIE 矢量表

   //服务例程(ISR)。

   //

   interrupt_initVectorTable()

 

 

   //

   //设置 I2C 使用,将其初始化为 FIFO 模式

   //

   initi2C();

 

   //

   //初始化数据缓冲区

   //

   对于(I = 0;I < 8;I++)

   {

       sData[i]= 0;

       RDATA[i]=0;

   }

 

   sData[0]= 0x00;

   sData[1]=0x01;

   sData[2]=0x02;

   sData[3]=0x03;

   sData[4]=0x04;

   sData[5]= 0x05;

   sData[6]= 0x06;

   sData[7]= 0x07;

 

 

   //

   //启用全局中断(INTM)和实时中断(DBGM)

   //

   EINT;

   ERTM;

 

   //

   //永久循环。

   //

   while (1)

   {

   

               /*//

              //读取数据

              //

 

              对于(I = 0;I < 8;I++)

              {

                  RDATA[i]= I2C_getData (I2CA_BASE);

              }

 

              rDataPoint =(rDataPoint + 1)& 0xFF;

               *

 

 

              uint16_t i;

              I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);

              I2C_setSlaveAddress (I2CA_BASE、SLAVE_ADDRESS);

 

              对于(I = 0;I < 8;I++)

              {

                  I2C_putData (I2CA_BASE、sData[i]);

              }

              //

              //发送数据

              //

              I2C_sendStartCondition (I2CA_BASE);

              I2C_sendStopCondition (I2CA_BASE);

 

      }

 

 

 

//

//函数、用于在 FIFO 模式下配置 I2C A。

//

initI2C()

   //

   //必须在配置 I2C 之前将其复位

   //

   I2C_DisableModule (I2CA_BASE);

   //

   // I2C 配置。 使用占空比为50%的50kHz I2CCLK。

   //

   I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、50000、I2C_DUTYCYCLE _50);

   I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);

   I2C_setDataCount (I2CA_BASE、8);

   I2C_setBitCount (I2CA_BASE、I2C_BITCOUNT_8);

   //

   //配置

   //

   I2C_setSlaveAddress (I2CA_BASE、SLAVE_ADDRESS);

   I2C_setEmulationMode (I2CA_BASE、I2C_emulation_free_run);

   //

   // FIFO 配置

   //

   I2C_enableFIFO (I2CA_BASE);

   I2C_setFIFOInterruptLevel (I2CA_BASE、I2C_FIFO_TX2I2C_FIFO_RX2);

   //

   //配置完成。 启用模块。

   //

   I2C_enableModule (I2CA_BASE);

 

 

//

//文件结束

//

 

I2C 总线结果

[0xE8-[0xE8-][0xE8-[0xE8-][0xE8-][0xE8-[0xE8-][0xE8-]

 

感谢大家、

 

此致、