4435|9

77

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

LPC800 开发板 I2C 的使能问题。 [复制链接]

我把周立功的LPC800例子里面的I2C中的I2C_EEPROM的程序改了一下,还是无法运行,请帮忙看一下。

void I2CInit (void)
{
    //原始程序用的最适宜做I2C的口,小板上没有   
    //LPC_IOCON->PIO0_10  &= ~(0x3 << 8);                                 /* 引脚属性                     */
    //LPC_IOCON->PIO0_10  |=  (0x2 << 8);                                 /* 使能I2C_SDA 增强快速模式     */
    //LPC_IOCON->PIO0_11  &= ~(0x3 << 8);
    //LPC_IOCON->PIO0_11  |=  (0x2 << 8);                                 /* 使能I2C_SCL 增强快速模式     */
   
                /* Pin Assign 8 bit Configuration */
    /* I2C0_SDA */
    LPC_SWM->PINASSIGN7 = 0x00ffffffUL;                                  /* I2C_SDA ~ P0.0              */
                LPC_IOCON->PIO0_0 |= (0x3 << 3); //我按照手册把下拉电阻关了
                LPC_IOCON->PIO0_0 |= (1 << 10);
    /* I2C0_SCL */
    LPC_SWM->PINASSIGN8 = 0xffffff01UL;                                  /* I2C_SCL ~ P0.1              */
                LPC_IOCON->PIO0_1 |= (0x3 << 3);
                LPC_IOCON->PIO0_1 |= (1 << 10);
       
    //LPC_SWM->PINASSIGN7 &= ~(0xFFUL << 24);                             /* 管脚分配                     */
    //LPC_SWM->PINASSIGN7 |=  (10 << 24);                                 /* I2C_SDA ~ P0.10              */
    //LPC_SWM->PINASSIGN8 &= ~(0xFF << 0);
    //LPC_SWM->PINASSIGN8 |=  (11 << 0);                                  /* I2C_SCL ~ P0.11              */
   
    /*
     * 时钟换算关系:       I2C_Pclk   = MAIN_CLK / SYSAHBCLKDIV;
     *                      I2C_Fclk   = I2C_Pclk / DIVVAL;
     *                      I2C_SCLclk = I2C_Fclk / (MSTSCLLOW + MSTSCLHIGH + 4);
     *
     * 系统时钟:           MAIN_CLK   = 24 MHz,    SYSAHBCLKDIV = 1;
     * I2C增强快速模式:    I2C_SCLclk = 400 kHz;
     
     * CAT24C02要求:       I2C_Fclk    = 8 * I2C_SCLclk = 3.2 MHz, MSTSCLLOW = 2, MSTSCLHIGH = 0;
     *                      DIVVAL      = I2C_Pclk / I2C_Fclk - 1= 24 / 3.2 - 1 = 7;
     */
                LPC_SYSCON->PRESETCTRL |= (1 << 6);
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 5);                              /* 初始化I2C AHB时钟            */
    LPC_I2C->DIV      = 7;
    LPC_I2C->MSTTIME |= (0 << 0) | (0 << 4); //不知道为什么原始程序用的是(2<<0),我安装手册改成了(0<<0)
                           /* SCL_LOW = SCL_HIGH = 2 * CLK */
    LPC_I2C->CFG     |= (1 << 0) | (0 << 3);                            /* 使能主机模式,禁止超时       */
}

程序无法运行,我把引脚连到一个LED灯上,板子RESET之后灯没有闪烁,感觉没有输出。
麻烦看一下问题出在什么地方,谢谢。
此帖出自NXP MCU论坛

最新回复

多谢大大指点,这是一个很好的例子   详情 回复 发表于 2013-9-5 09:23

点评

管脚有没有配置成为I2C。。。。。。。  详情 回复 发表于 2013-8-29 14:54
点赞 关注
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 

回复 楼主hizzx 的帖子

管脚有没有配置成为I2C。。。。。。。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

77

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

我把Switch Matrix Tool里面的swm.c里面的拷了过去

/* I2C0_SDA */
    LPC_SWM->PINASSIGN7 = 0x00ffffffUL;                                  /* I2C_SDA ~ P0.0              */
                LPC_IOCON->PIO0_0 |= (0x3 << 3); //我按照手册把下拉电阻关了
                LPC_IOCON->PIO0_0 |= (1 << 10);
    /* I2C0_SCL */
    LPC_SWM->PINASSIGN8 = 0xffffff01UL;                                  /* I2C_SCL ~ P0.1              */
                LPC_IOCON->PIO0_1 |= (0x3 << 3);
                LPC_IOCON->PIO0_1 |= (1 << 10);
  需要把lpc8xx.h和type.h也烤进去吗?
此帖出自NXP MCU论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

4
 
I2C 比较难搞,
我想找个lpc810 通过i2c连接 adxl 345 的例子,不过一直没找到
此帖出自NXP MCU论坛
 
 
 

回复

77

帖子

0

TA的资源

纯净的硅(高级)

5
 

研究了一周才发现系统时钟没有选择对

研究了一周才发现,在周立功的例子上需要把
system_LPC8xx.c的第105行

#define SYSPLLCLKSEL_Val      0x00000001            
改成
#define SYSPLLCLKSEL_Val      0x00000000
此帖出自NXP MCU论坛

点评

改了这个之后程序就正常了么? 你用的是内部时钟12MHz 么?  详情 回复 发表于 2013-9-3 14:26
现在可以了吗?  详情 回复 发表于 2013-9-3 14:20
 
 
 

回复

1453

帖子

18

TA的资源

纯净的硅(高级)

6
 

回复 5楼hizzx 的帖子

现在可以了吗?
此帖出自NXP MCU论坛
 
个人签名http://weibo.com/u/1391449055
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 5楼hizzx 的帖子

改了这个之后程序就正常了么?
你用的是内部时钟12MHz 么?
此帖出自NXP MCU论坛
 
 
 

回复

77

帖子

0

TA的资源

纯净的硅(高级)

8
 

可以用了

可以用了。
我把
P01定义为SDA。
P03定义为SCL。
我还没有逻辑分析仪,所有加了几个串口通信作为Debug用,IIC用的是一个24C02,所写的数据是LED的数据,可以用单片机再显示在LED上。

感觉最重要的是在写动作里面加几个延时,还有我感觉写的for循环逻辑上多了一个减一。
我可能没有把RESET键,所以需要用开关电源复位。

[ 本帖最后由 hizzx 于 2013-9-5 09:11 编辑 ]

LPC800_U_II.rar

126.74 KB, 下载次数: 12

P01->SDA,P03->SCL

此帖出自NXP MCU论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 
多谢大大指点,这是一个很好的例子
此帖出自NXP MCU论坛

点评

我要有零花钱就买个调试器了,就不加串口了。不知道论坛搞活动不。  详情 回复 发表于 2013-9-5 09:26
 
 
 

回复

77

帖子

0

TA的资源

纯净的硅(高级)

10
 

回复 9楼alchimy 的帖子

我要有零花钱就买个调试器了,就不加串口了。不知道论坛搞活动不。
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表