EFM32系列单片机虽然和STM32系列单片机同样是CortexM3单片机。但因为来自不同的公司,所以具备不一样的设计思路和不同的库函数。这一次我们来看下EFM32系列的I2C操作。
I2C总线是数字系统中常用的总线之一,很多传感器芯片都提供I2C接口用于和MCU通信。详细的I2C规范和通信的原理这里就不再赘述了。大家可以通过百度和相关的技术文档去了解。这里只在必要的地方提一下相关的概念。我们的主要精力就放在如何使用EFM32系列的I2C库函数来和I2C传感器芯片通信,获取相应的数据。
和STM32系列的单片机不同,EFM32单片机在I2C这一块提供了一个套件驱动包,对底层的I2C操作进行了进一步的简化,故而使用起来更加的方便。这个I2C驱动包就是I2CSPM。这个驱动包由两个文件组成:i2cspm.c和i2cspm.h。
下面先来看I2C初始化代码实例:
void setupI2C(void)
{
I2CSPM_Init_TypeDef i2cInit;
CMU_ClockEnable(cmuClock_GPIO, true);
i2cInit.port = I2C0;
i2cInit.sclPort = gpioPortA;
i2cInit.sclPin = 1;
i2cInit.sdaPort = gpioPortA;
i2cInit.sdaPin = 0;
i2cInit.portLocation = _I2C_ROUTE_LOCATION_LOC0;
i2cInit.i2cClhr = i2cClockHLRStandard;
i2cIn