| 
 
| 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) {
 ;
 }
 }
 }
 
 
 
 附24C02的说明
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |