请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28069 主题中讨论的其他器件:C2000WARE
您好!
我正在尝试通过 F28069 MCU 的 I2C 从 MCP9808读取温度数据。 但我不能。 请找到以下代码。 你有什么建议吗?
// I2C GPIO 配置 //为所选引脚启用内部上拉*/ GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;//为 GPIO32 (SDAA) GpioCtrlRegs.GPBPUD.bit.GPIO33启用上拉;//为 GPIO32.Gpin 启用上拉; *仅为 GPIO32.GCLA 设置(GPBPUZ1.bit.GPIO3*) // asynch 输入 GPIO32 (SDAA) GpioCtrlRegs.GPBQSEL1.bit.GPIO33=3;// asynch 输入 GPIO33 (SCLA) //使用 GPIO regs*/ GpioBMlRegs.GPUX1.bit.GPIO32=1配置 I2C 引脚;//针对 GPIO32.GPIO33/ GPCLA.GPIO33= 1配置 GPIO33/ GPIO1.GPIO1.bit.GPIO32.GPIO1.GPIO1.bit.GPIO33/ GPIO1.GPIO1.GPIO32.GPIO1.GPIO1.GPIO32.GPIO1.bit.GPIO32.GPIO32.GPIO1.bit.GPIO
void InitI2C() { //初始化 I2C I2cRegs.I2CMDR.bit.IRS = 0; I2cRegs.I2CPSC.ALL = 8;//预分频器-需要7-12MHz 的模块 clk I2cRegs.I2CCLKL=10;//注意:必须为非零 I2CIER=0x24;注意:I2CIELCR.I2I2I2CIEL = 0;//启用 SCD 和 ARDY 中断 I2CARegs.I2CMDR.ALL = 0x0020;//使 I2C 退出复位 //挂起 I2CARegs.I2CFFTX.ALL = 0x6000时停止 I2C;// 启用 FIFO 模式和 TXFIFO I2CARegs.I2CFFRX.ALL = 0x2040;//清除 RXFIFO 。}
长 GetTemperature (void) { 长温度; 长 TempUpperByte; 长 TempLowerByte; I2caRegs.I2CMDR.bit.IRS = 1; //重置 I2C //确保 I2C 不忙且在 (I2cRegs.I2CSTR.bit.BB = 1)期间已停止; //忙环路 I2cRegs.I2CSTR.bit.SCD = 1; //清除 SCD 位(停止条件位) while (I2caRegs.I2CMDR.bit.STP = 1); //停止位循环 //I2caRegs.I2CMDR.ALL = 0x6620; //开始、停止、无 rm、复位 i2c 01101110 00100000 I2cRegs.I2CMDR.bit.NACKMOD = 0; // NACK 模式位 I2caRegs.I2CMDR.bit.FREE = 1; //挂起 I2caRegs.I2CMDR.bit.STT = 1时运行空闲 I2C; //起始条件位 I2caRegs.I2CMDR.bit.STP= 0; //停止条件位 I2caRegs.I2CMDR.bit.MST = 1; //主控模式 I2caRegs.I2CMDR.bit.TRX = 1; //发送器模式 I2caRegs.I2CMDR.bit.XA = 0; // 7位寻址模式 I2caRegs.I2CMDR.bit.RM = 0; //非重复模式 I2caRegs.I2CMDR.bit.DLB = 0; //数字回送模式被禁用 I2caRegs.I2CMDR.bit.IRS = 1; // I2C 模块被使能 I2caRegs.I2CMDR.bit.STB=0; // I2C 模块不在起始字节模式 I2caRegs.I2CMDR.bit.FDF = 1; //自由数据格式模式被禁用 I2caRegs.I2CMDR.bit.BC = 0; //每个数据字节8位 while (I2cRegs.I2CSTR.bit.XRDY = 0); //在总线空闲 前不执行任何操作 I2caRegs.I2CMDR.bit.STT = 1; //起始条件位 I2caRegs.I2CDXR = 0x32; while (I2caRegs.I2CSTR.bit.nack = 1); I2caRegs.I2CDXR = 0x05; //传感器的寄存器地址(1个字节) while (I2cRegs.I2CSTR.bit.nack = 1); I2cRegs.I2CMDR.bit.STT = 1; //起始条件位 I2cRegs.I2CDXR = 0x33; while (I2cRegs.I2CSTR.bit.nack = 1); TempUpperByte = I2cRegs.I2CDRR; while (I2cRegs.I2CSTR.bit.nack = 1);I2cADDR.I2CSTR.bit.NACK = 1;I2CSTR.bit.NACKMOD = 1; TempLowerByte = I2cRegs.I2CDRR; while (I2cRegs.I2CSTR.bit.nack = 0); I2cRegs.I2CMDR.bit.STP= 1; Temperature =(TempUpperByte * 16 + TempLowerByte / 16); Return Temperature; }