“Thread: SysBIOS, CC2650”中讨论的其它部件
工具/软件:TI-RTOS
您好,
正如本论坛上的服务帖子中所描述的那样,I2C需要一些努力才能在CC2640平台上工作。
因此,正如我在几篇文章中所述,我已将其添加到board.h (这些是我正在使用的PIN):
#define Board_I2C0_SDA0 IOID_8
#define Board_I2C0_SCL0 IOID_9
引脚IOID_8和IOID_9未被包含的主板中的任何其他(如SPI)使用
我已将此代码添加到board.c:
//添加缺少的12C结构
#include <ti/drivers/i2c/I2CCC26XX.h>
#include <ti/SysBIOS/family/arm/cc26xx/PowerCC2650/h>
#define CC2650_I2CCOUNT 1.
#define Board_I2C0_SDA0 IOID_8
#define Board_I2C0_SCL0 IOID_9
/* I2C对象*/
I2CCC26XX_Object i2cCC26xx对象[CC2650_I2CCOUNT];
/* I2C配置结构,描述要使用哪些引脚*/
const I2CCC26XX_HWAttrs i2cCC26xxHWAttrs[CC2650_I2CCOUNT]={
{
baseAddr = I2C0_BASE,
.powerMngrId = Periph_I2C0,
.sdaPin = Board_I2C0_SDA0,
.sclPin = Board_I2C0_SCL0,
intNum = INT_I2C_IRQ,
.intPriority =(~0)
}
};
CONST I2C_Config I2C_CONFIG[]={
{&I2CCC26XX_fxnTable,&i2cCC26xxObjects[0],&i2cCC26xxHWAttrs[0]},
{NULL,NULL,NULL}
};
启动程序时,我在BIOS_START()之前调用I2C_INIT()。
从以下代码调用I2C_OPEN时,代码在TI_TROS内消失:
I2C_PARAM_INIT (&PARAMS);
Params.bitrate = I2C_400kHz;
Params.transferMode = I2C_MODE_blocking;
i2cHandle = I2C_OPEN (CC2650_I2C0,¶ms);
当I2CCC26XX_initHw尝试调用I2CMasterInitExpClk时,错误发生在I2CCC26XX_initHw内部。
静态空I2CCC26XX_initHw (I2C_HANDLE句柄){
I2CCC26XX_Object *对象;
I2CCC26XX_HWAttrs const *hwAttrs;
Types_FreqHz频率;
/*获取指向对象和hwAttrs */的指针
对象=句柄->对象;
hwAttrs = handl->hwAttrs;
/*设置I2C配置*/
BIOS_getCpuFreq (&freq);
I2CMasterInitExpClk (hwAttrs->baseAddr,freq.lo,bitrase[对象->比特率]);
object-> bitrate包含调用BIOS_getCpuFreq之前的正确值,但调用之后,其值为8.056万,显然超出范围。
有人对可能发生的情况/如何解决此问题有任何想法?
谢谢!
Justin