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.

[参考译文] 编译器/CC2630:传感器控制器stdio不允许使用两个i2c

Guru**** 2540720 points
Other Parts Discussed in Thread: CC2650, CC2630

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/578831/compiler-cc2630-sensor-controller-stdio-cannot-allow-to-use-two-i2c

部件号:CC2630
主题中讨论的其他部件:CC2650

工具/软件:TI C/C++编译器

我的设备上有两条i2c总线,一条i2c (DIO23, DIO24)与温度传感器连接, 另一条i2c (DIO25, DIO26)与gsensor连接。 但传感器控制器的stdio不允许我创建两 个单独的任务来访问温度传感器和传感器。 编译器出现以下故障:

常量已定义:".define AUXIO_I2C_SCL 6"

常量已定义:".define AUXIO_I2C_SDA 7"

常量已定义:".define I2C_base_delay 9"

常量已定义:".define I2C_EXT_DELAY 4"

常量已定义:".define I2C_Stretch timeout_US 2万"

常量已定义:".define I2C_WAY_STRELED_DELAY 5"

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

    您能否提供有关您的问题的更多信息? 您是否从其中一个示例应用程序开始? 如果是,您做了哪些修改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下信息来自myDev.scp,您可以使用传感器控制器stdio 1.4 .........0将其打开,在I/OMapping中,您可以知道我正在使用两个I2C总线,一个用于gsensor,另一个是rhTemp,但代码生成器不允许我这样做。 感谢你的帮助。

    <?xml version="xml 1.0 ?>
    <project name="myDev" 1.4 0.4.297万 (项目名称)>
    <desc><![CDATA[]></desc>
    <pattr name="Board">CC2650 SensorTag +电容性触摸皮肤</pattr>
    <pattr name="Chip name">CC2630</pattr>
    <pattr name="Chip package">QFN48 7x7 RGZ</pattr>
    <pattr name="Chip revision">-</pattr>
    <pattr name="Code prefix"></pattr>
    <pattr name="Operating system">TI-RTOS</pattr>
    <pattr name="Output directory">E:/work / pedometer/SCIF</pattr>
    <task name="gSensor">
    <desc><![CDATA[]></desc>
    <tattr name="GSENSOR_ALERT_BUF_FULLE" type="hex" content="const" scope="task" min="0000" max="FFFFFF">0001</tattr>
    <tattr name="GSENSOR_alert_fee_fall”type="hex" content="const" scope="task" min="0000" max="FFFF">0002</tattr>
    <tattr name="GSENSOR_BUF_SIZE" type="dec" content="const" scope="task" min="0" max="6.5535万 ">480</tattr>
    <tattr name="GSENSOR_INT_REL" type="hex" content="const" scope="task" min="0000" max="FFFFFF">001A</tattr>
    <tattr name="GSENSOR_XOUT_L" type="hex" content="const" scope="task" min="0000" max="FFFF">0006</tattr>
    <tattr name="I2C_SLAVE_ADDR" type="hex" content="const" scope="task" min="0000" max="FFFFFF">001C</tattr>
    <tattr name="output.lastX" desc="the last gsensor X value" type="dec" content="struct scope="task" min="-3.2768万" max="3.2767万">0</tatttr>
    <tattr name="output.lastY" desc="the last gsensor Y value" type="dec" content="struct scope="task" min="-3.2768万" max="3.2767万">0</tatttr>
    <tattr name="output.lastz" desc="the last gsensor Z value" type="dec" content="struct scope="task" min="-3.2768万" max="3.2767万">0</tatttr>
    <resource_ref name="adc" enabled="0"/>
    <resource_ref name="Analog Open-DRAIN PINs" enabled="0"/>
    <resource_ref name="Analog Open-Source Pins" enabled="0"/>
    <resource_ref name="Analog Pins" enabled="0"/>
    <resource_ref name="compa" enabled="0"/>
    <resource_ref name="compb" enabled="0"/>
    <resource_ref name="compb Event Trigger" enabled="0"/>
    <resource_ref name="Delay Insertion" enabled="1"/>
    <resource_ref name="Differential Output Pines" enabled="0"/>
    <resource_ref name="Digital Input Pins" enabled="0">
    <IO_USAGE NAME="GSENSOR_IRQ" label="GSensor interrupT">
    <uattr name="Configuration on initialization">1</uattr>
    <uattr name="Configuration on uninitialization">1</uattr>
    <uattr name="Pin count">0</uattr>
    <uattr name="Pin/0000">DIO28</uattr>
    <uattr name="Pin/0001"></uattr>
    <uattr name="Pin/0002"></uattr>
    <uattr name="Pin/0003"></uattr>
    <uattr name="Pin/0004"></uattr>
    <uattr name="Pin/0005"></uattr>
    <uattr name="Pin/0006"></uattr>
    <uattr name="Pin/0007"></uattr>
    <uattr name="Pin/0008"></uattr>
    <uattr name="Pin/0009"></uattr>
    <uattr name="Pin/0010"></uattr>
    <uattr name="Pin/0011"></uattr>
    <uattr name="Pin/0012"></uattr>
    <uattr name="Pin/0013"></uattr>
    <uattr name="Pin/0014"></uattr>
    <uattr name="Pin/0015"></uattr>
    </io_usage>
    </resource_ref>
    <resource_ref name="Digital Open-DRAIN PINs" enabled="0"/>
    <resource_ref name="Digital Open-Source Pins" enabled="0"/>
    <resource_ref name="Digital Output Pins" enabled="0"/>
    <resource_ref name="gpio事件触发器" enabled="0"/>
    <resource_ref name="I2C Master" enabled="1">
    <rattr name="scl frequency">0</rattr>
    <rattr name="scl tretch timeout">2万</rattr>
    <io_usage>
    <uattr name="scl pin/0000">DIO26</uattr>
    <uattr name="sda pin/0000">DIO25</uattr>
    </io_usage>
    </resource_ref>
    <resource_ref name="isrc" enabled="0"/>
    <resource_ref name="Math and Logic" enabled="0"/>
    <resource_ref name="Multi-Buffer Output Data Exchange" enabled="0">
    <rattr name="Buffer count">2</rattr>
    <rattr name="indicate overflow at buffer check">1</rattr>
    <rattr name="indicate overflow at buffer switch">0</rattr>
    <rattr name="prevent overflow at buffer switch">1</rattr>
    </resource_ref>
    <resource_ref name="Peripheral Sharing" enabled="0"/>
    <resource_ref name="RTC Multi-Event Capture" enabled="0"/>
    <resource_ref name="rtc-based Execution Scheduling" enabled="1"/>
    <resource_ref name="SPI Chip Select" enabled="0"/>
    <resource_ref name="SPI数据传输" enabled="0">
    <rattr name="bit rate">0</rattr>
    <rattr name="miso configuration when inactive">-1</rattr>
    <rattr name="MOSI configuration on initialization">0</rattr>
    <rattr name="MOSI configuration on uninitialization">0</rattr>
    <rattr name="sclk configuration on initialization">0</rattr>
    <rattr name="sclk configuration on uninitialization">0</rattr>
    <io_usage>
    <uattr name="miso pin/0000"></uattr>
    <uattr name="MOSI pin/0000"></uattr>
    <uattr name="sclk pin/0000"></uattr>
    </io_usage>
    </resource_ref>
    <resource_ref name="System CPU Alert" enabled="1"/>
    <resource_ref name="tc" enabled="0"/>
    <resource_ref name="Timer 0" enabled="0"/>
    <resource_ref name="Timer Event Trigger" enabled="0"/>
    <resource_ref name="UART Emulator" enabled="0">
    rattr name="RX buffer size">64</rattr>
    <rattr name="required idle period before enabling Rx">11</rattr>
    rattr name="tx缓冲区大小">64</rattr>
    <io_usage>
    <uattr name="RX pin/0000"></uattr>
    <uattr name="tx pin/0000"></uattr>
    </io_usage>
    </resource_ref>
    <sccode name="event0"><![CDATA[state.decTick = cfg.stopTick;
    状态.移动= 1;

    fwScheduleTask(1);]></sccode>
    <sccode name="execute"><![CDATA[macro readXYZ(){
    U16 resultRegH;
    U16 resultRegL;

    i2cStart();
    i2cTx (I2C_OP_WRITE | I2C_SLAVE_ADDR);
    i2cTx (GSENSOR_XOUT_L);

    //读取结果
    i2cRepeatedStart();
    i2cTx (I2C_OP_READ | I2C_SLAV_ADDR);

    i2cRxAck(resultRegL);
    i2cRxAck(resultRegH);
    output.lastX =(resultRegH << 8)|(resultRegL);//x

    i2cRxAck(resultRegL);
    i2cRxAck(resultRegH);
    output.lastY =(resultRegH << 8)|(resultRegL);//y

    i2cRxAck(resultRegL);
    i2cRxNack(resultRegH);
    output.lastZ =(resultRegH << 8)|(resultRegL);//z

    i2cStop();
    }

    readXYZ ();//读取gsensor所有值]></sccode>
    <sccode name="initialize"><![CDATA[fwScheduleTask(2);]></sccode>
    <sccode name="terminate"><![CDATA[]></sccode>
    <t_iter></t_iter>
    <t_struct (结构)></t_struct (结构)>
    </task>
    <task name="rhTemp">
    <desc><![CDATA[]></desc>
    <tattr name="RHTEMP_CMD_MEA_RH_HOLD" type="hex" content="const" scope="task" min="0000" max="FFFFFF">00e5</tattr>
    <tattr name="RHTEMP_CMD_MEA_TEMP_HOLD" type="hex" content="const" scope="task" min="0000" max="FFFFFF">00e3</tattr>
    <tattr name="RHTEMP_I2C_SLAV_ADDR" type="hex" content="const" scope="task" min="0000" max="FFFFFF">0080</tattr>
    <tattr name="RHTEMP__CMD_reset" type="hex" content="const" scope="task" min="0000" max="FFFFFF">00fe</tattr>
    <tattr name="cfg.rhHighThr" type="dec" content="struct" scope="task" min="0" max="6.5535万 </tattr>
    <tattr name="cfg.rhLowThr" type="dec" content="struct" scope="task" min="0" max="6.5535万 ">0</tattr>
    <tattr name="cfg.tempHighThr" type="dec" content="struct" scope="task" min="0" max="6.5535万 </tattr>
    <tattr name="cfg.tempLowThr" type="dec" content="struct" scope="task" min="0" max="6.5535万 ">0</tattr>
    <tattr name="output.rh type="dec" content="struct" scope="task" min="0" max="6.5535万 ">0</tattr>
    <tattr name="output.temp" type="dec" content="struct" scope="task" min="0" max="6.5535万 ">0</tatttr>
    <resource_ref name="adc" enabled="0"/>
    <resource_ref name="Analog Open-DRAIN PINs" enabled="0"/>
    <resource_ref name="Analog Open-Source Pins" enabled="0"/>
    <resource_ref name="Analog Pins" enabled="0"/>
    <resource_ref name="compa" enabled="0"/>
    <resource_ref name="compb" enabled="0"/>
    <resource_ref name="compb Event Trigger" enabled="0"/>
    <resource_ref name="Delay Insertion" enabled="0"/>
    <resource_ref name="Differential Output Pines" enabled="0"/>
    <resource_ref name="Digital Input Pins" enabled="0"/>
    <resource_ref name="Digital Open-DRAIN PINs" enabled="0"/>
    <resource_ref name="Digital Open-Source Pins" enabled="0"/>
    <resource_ref name="Digital Output Pins" enabled="0"/>
    <resource_ref name="gpio事件触发器" enabled="0"/>
    <resource_ref name="I2C Master" enabled="1">
    <rattr name="scl frequency">0</rattr>
    <rattr name="scl tretch timeout">2万</rattr>
    <io_usage>
    <uattr name="scl pin/0000">DIO24</uattr>
    <uattr name="sda pin/0000">DIO23</uattr>
    </io_usage>
    </resource_ref>
    <resource_ref name="isrc" enabled="0"/>
    <resource_ref name="Math and Logic" enabled="0"/>
    <resource_ref name="Multi-Buffer Output Data Exchange" enabled="0">
    <rattr name="Buffer count">2</rattr>
    <rattr name="indicate overflow at buffer check">1</rattr>
    <rattr name="indicate overflow at buffer switch">0</rattr>
    <rattr name="prevent overflow at buffer switch">1</rattr>
    </resource_ref>
    <resource_ref name="Peripheral Sharing" enabled="0"/>
    <resource_ref name="RTC Multi-Event Capture" enabled="0"/>
    <resource_ref name="rtc-based Execution Scheduling" enabled="1"/>
    <resource_ref name="SPI Chip Select" enabled="0"/>
    <resource_ref name="SPI数据传输" enabled="0">
    <rattr name="bit rate">0</rattr>
    <rattr name="miso configuration when inactive">-1</rattr>
    <rattr name="MOSI configuration on initialization">0</rattr>
    <rattr name="MOSI configuration on uninitialization">0</rattr>
    <rattr name="sclk configuration on initialization">0</rattr>
    <rattr name="sclk configuration on uninitialization">0</rattr>
    <io_usage>
    <uattr name="miso pin/0000"></uattr>
    <uattr name="MOSI pin/0000"></uattr>
    <uattr name="sclk pin/0000"></uattr>
    </io_usage>
    </resource_ref>
    <resource_ref name="System CPU Alert" enabled="1"/>
    <resource_ref name="tc" enabled="0"/>
    <resource_ref name="Timer 0" enabled="0"/>
    <resource_ref name="Timer Event Trigger" enabled="0"/>
    <resource_ref name="UART Emulator" enabled="0">
    rattr name="RX buffer size">64</rattr>
    <rattr name="required idle period before enabling Rx">11</rattr>
    rattr name="tx缓冲区大小">64</rattr>
    <io_usage>
    <uattr name="RX pin/0000"></uattr>
    <uattr name="tx pin/0000"></uattr>
    </io_usage>
    </resource_ref>
    <sccode name="event0"><![CDATA[]></sccode>
    <sccode name="execute"><![CDATA[//选择结果寄存器
    U16 resultRegH;
    U16 resultRegL;

    i2cStart();
    i2cTx (I2C_OP_WRITE | RHTEMP_I2C_SLAVE_ADDR);
    i2cTx (RHTEMP_CMD_MEA_RH_HOLD);

    //读取结果
    i2cRepeatedStart();
    i2cTx (I2C_OP_READ | RHTEMP_I2C_SLAVE_ADDR);
    i2cRxAck(resultRegH);
    i2cRxNack(resultRegL);
    i2cStop();
    output.rh =(resultRegH << 8)|(resultRegL);


    fwScheduleTask(1);]></sccode>
    <sccode name="initialize"><![CDATA[fwScheduleTask(1);]></sccode>
    <sccode name="terminate"><![CDATA[]></sccode>
    <t_iter></t_iter>
    <t_struct (结构)></t_struct (结构)>
    </task>
    </project>

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Wit:
    传感器控制器使用位冲击来实现I2C,因为没有硬件支持。 为了尽可能接近400 kHz (每位30个CPU指令),必须对引脚映射进行硬编码,以便使用最有效的CPU指令。

    我能想到的最佳解决方案是复制I2C资源定义和所有相关的过程定义和汇编文件,并在复制中将所有出现的"I2C-"重命名为其他内容。 复制这些文件夹中的所有I2C资源/过程,并编辑新文件以确保所有内容都引用您的新名称。

    C:\Program Files (x86)\Texas Instruments:Sensor Controller Studio\resource_defs\
    C:\Program Files (x86)\Texas Instruments:Sensor Controller Studio\proc_defs\
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Eirik:

      完全理解,非常感谢!