LM3S811用IIC的API十分方便,但一定注意顺序搞不好是搞不定的
对于IIC的读写一定要注意:
主机往IIC从模块里写或从IIC模块读出时一定要调下设地址函数,
I2CMasterSlaveAddveset()
另外,尽量用中断,若不用中断注意延下时。
我的这个程序是写8字节到24c02,然后读出,若一样则灯亮。
把这个下到LM3S811主板,按下rest最右下角那个。我地天啊居然亮了。
我这个程序是把流明库解到硬盘,然后在MDK里设路径到库文件所在目录。
为了减少麻烦。我把工程文件上传啥!
#define I2C_PIN GPIO_PIN_2 | GPIO_PIN_3
#define LEDLED GPIO_PIN_0 /* 数据判断指示灯的设置 */
#define writeaddr 0x00 /* 对24c02操作的子地址 */
#define readaddr 0x00
/*********************************************************************************************************
** Function name: main
**
** Descriptions: Main function of the project 工程的主函数
**
** Input parameters: None 无
** Returned value: None 无
**
** Used global variables: None 无
** Calling modules: SysCtlClockSet,SysCtlPeripheralEnable,IntMasterEnable,GPIOPinTypeI2C,
** GPIODirModeSet,GPIOPadConfigSet,I2CMasterInit,IntEnable,I2CMasterIntEnable
** GPIOPinWrite
**
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main(void)
{
unsigned long ulIdx;
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ); /* 设置晶振为系统时钟 */
SysCtlPeripheralEnable (SYSCTL_PERIPH_I2C); /* 使能I2C外设 */
SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOB); /* 使能GPIO外设 */
SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOD); /* 使能GPIO外设 */
IntMasterEnable(); /* 使能处理器中断 */
GPIOPinTypeI2C (GPIO_PORTB_BASE, I2C_PIN); /* 配置相关引脚,以进行I2C操作 */
GPIODirModeSet (GPIO_PORTD_BASE, LEDLED, GPIO_DIR_MODE_OUT); /* 设置 GPIO PD0为输出口 */
GPIOPadConfigSet (GPIO_PORTD_BASE, LEDLED, /* GPIO Pd0的端口配置 */
GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD);
I2CMasterInit (I2C_MASTER_BASE, false); /* 初始化I2C主机,设置主机为低速*/
IntEnable (INT_I2C); /* 使能I2C中断 */
I2CMasterIntEnable (I2C_MASTER_BASE); /* 使能I2C主机中断 */
//GPIOPinWrite (GPIO_PORTD_BASE, LEDLED, LEDLED);
GPIOPinWrite (GPIO_PORTD_BASE, LEDLED, ~LEDLED); /* 如果接收的数据出错,则蜂鸣
//GPIOPinWrite (GPIO_PORTD_BASE, LEDLED, ~LEDLED); */
while(1) { /* 数据串写入EEPROM的前8个字节 */
for (ulIdx = 0; ulIdx < 8; ulIdx++) {
pucData[ulIdx] = ulIdx;
}
EEPROMWrite (pucData, writeaddr, 8); /* 向EEPROM的00地址单元中写入8个
数据(0~7) */
Delays(5); /* 延时5~10ms写数据入24C02中*/
EEPROMRead (pucData, readaddr, 8); /* 从EEPROM的00地址单元中读取8个
数据 */
Delays(5); /* 延时5~10ms从24C02中独处数
据 */
for (ulIdx = 0; ulIdx < 8; ulIdx++) {
if (pucData[ulIdx] != ulIdx) { /* 判断接收到的数据是否正确 */
GPIOPinWrite (GPIO_PORTD_BASE, LEDLED, ~LEDLED); /* 如果接收的数据出错,则 LEDLED 不亮*/
while(1) {
;
}
}
}
GPIOPinWrite (GPIO_PORTD_BASE, LEDLED, ~LEDLED); /* 如果接收到的数据正确,LEDLED亮*/
Delays(3);
GPIOPinWrite (GPIO_PORTD_BASE, LEDLED, LEDLED);
while(1) {
;
}
}
}
myiic2.rar
(702.82 KB)
附24C02的说明
24WC02[1].pdf
(44.88 KB)
|