7571|14

4996

帖子

19

TA的资源

裸片初长成(初级)

楼主
 

LPC2131 IIC 下读写24c02老是不进中断? [复制链接]

不知道有没有人弄过周工的IIC程序包?我在使用LPC2131读写AT24C02时,有时候可以进入中断,有时候有不能进入中断?希望高手指导一下!!!!!!!!
此帖出自单片机论坛

最新回复

现在我也出现了这个问题 我是进了中断 但IIC清除中断SI时 SI确不能清除  我用的是MDK  周公的代码 请问楼主解决了没???  详情 回复 发表于 2011-3-24 22:09
点赞 关注
个人签名我的博客
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
自己顶上去,希望网友能帮忙!!!!!!!!!
此帖出自单片机论坛
 
个人签名我的博客
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

问题描述太不清楚,无法判断是软件还是硬件问题;详见周工的参考书

 

深入浅出ARM7-LPC213x_214x

 

 

深入浅出ARM7-LPC213x_214x(上).pdf

3.54 MB, 下载次数: 38

深入浅出ARM7-LPC213x_214x(下).pdf

3.4 MB, 下载次数: 36

此帖出自单片机论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 

回复 板凳 wuxinwu 的帖子

这书我都有,就是用周工的软件,有时候可以进入中断,有时候不行,应该绝对没问题。
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

5
 

上硬件图纸:

 

 

 

此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

6
 

AT24C02.rar (3.61 KB, 下载次数: 41)

代码:

 

主函数:

 

#include "../source/config.h"        // 头文件

/**************************************************************************************
* FunctionName   : OSDelayNMs()
* Description    : 延时1ms
* EntryParameter : NO
* ReturnValue    : NO
**************************************************************************************/
void OSDelayNMs(uint16 t)
{
    uint16 i;

 while (t--)
 {
     for (i=6500; i!=0; i--)
  {
      ;
  }
 }
}

/**************************************************************************************
* FunctionName   : OSPortSet()
* Description    : 端口配置函数
* EntryParameter : NO
* ReturnValue    : NO
**************************************************************************************/
void OSPortSet(void)
{   
 PINSEL0 = 0x00000000;                   // 管脚连接,设置成GPIO
 PINSEL1 = 0x00000000;      //
 PINSEL2 = 0x00000004;         // 保留调试端口,去掉跟踪端口  
}

/**************************************************************************************
* FunctionName   : OSClearCache()
* Description    : 寄存器清零
* EntryParameter : *p - 需要清零的寄存器;length - 寄存器的长度
* ReturnValue    : NO
**************************************************************************************/
void OSClearCache(uint8 *p, uint16 length)
{
    uint16 i;

    for (i=0; i<length; i++)
 {
        *p++ = 0;
 }
}

/**************************************************************************************
* FunctionName   : OSInit()
* Description    : 初始化系统
* EntryParameter : NO
* ReturnValue    : NO
**************************************************************************************/
void OSInit(void)
{
    OSDelayNMs(200);          // 适当延时
 OSPortSet();                 // 初始化I/O口

 I2cInit(100000);       // 初始化IIC

 /* Add your initialization codes here */    
}
    
/**************************************************************************************
* FunctionName   : main()
* Description    : 主函数
* EntryParameter : NO
* ReturnValue    : NO
**************************************************************************************/ 
int main(void)

    uint8 i,iicBuf[10];

    OSInit();                 // 初始化系统


 while (1)
 {
     for (i=0; i<10; i++)
  {
      iicBuf = i + '0';
  }

     I2C_WriteNByte(AT24C02, ONE_BYTE_SUBA, 1, iicBuf, 10);
     OSClearCache(iicBuf,10);
  I2C_ReadNByte(AT24C02, ONE_BYTE_SUBA, 1, iicBuf, 10);

  for (i=0; i<10; i++)
  {
      if (iicBuf != (i+'0'))
   {
       while (1) ;
   }
  }
   
 }
}


/**************************************************************************************
*                                         End Of File                 
**************************************************************************************/

 

 

此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

7
 
IRQEnable();        //打开中断       
初始化i2c之前没看见打开中断
IRQEnable();       
I2cInit(100000);
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

8
 
貌似写i2c后要适当延时才能读;具体看芯片手册
此帖出自单片机论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

9
 
我用的不是周工的启动代码,是MDK生成的,所以没有这个函数,我调试的时候也就看到,中断是打开的。
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

10
 
我用别的中断函数也是这样设置的,都可以正常进入中断的!!!!!!!,如串口中断,没有调用这个函数,也能正常。。
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

11
 

回复 8楼 wuxinwu 的帖子

我知道,写了以后需要延时才行,不过读不知道是否需要延时,程序根本不进入中断。
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼主用的i2c代码都是周工的,
while (1)
{
     for (i=0; i<10; i++)
  {
      iicBuf = i + '0';
  }



     I2C_WriteNByte(AT24C02, ONE_BYTE_SUBA, 1, iicBuf, 10);
     OSClearCache(iicBuf,10);
  I2C_ReadNByte(AT24C02, ONE_BYTE_SUBA, 1, iicBuf, 10);



  for (i=0; i<10; i++)
  {
      if (iicBuf != (i+'0'))
   {
       while (1) ;
   }
  }
   
}
改成:
for (i=0; i<10; i++)
  {
      iicBuf = i + '0';
  }


     I2C_WriteNByte(AT24C02, ONE_BYTE_SUBA, 1, iicBuf, 10);
     OSClearCache(iicBuf,10);
OSDelayNMs(20);  
I2C_ReadNByte(AT24C02, ONE_BYTE_SUBA, 1, iicBuf, 10);
for (i=0; i<10; i++)
  {
      if (iicBuf != (i+'0'))
   {
       while (1) dosomething;
   }
  }
    while(1);
判断看数据写的是否正确。
不知 有时候不能进入中断 是什么意思
此帖出自单片机论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

13
 

回复 12楼 wuxinwu 的帖子

谢谢回复,同样的程序,什么都不改,一天调试,一直都正常,第二天调试,怎么都不动,死在while(I2c_end == 0);这里,中断中打断点,就是不进中断。
此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

14
 

今天又试了一下,把中断寄存器抓下来了:

 

不进中断:

 

进入中断:

此帖出自单片机论坛
 
个人签名我的博客
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

15
 
现在我也出现了这个问题
我是进了中断
但IIC清除中断SI时 SI确不能清除  我用的是MDK  周公的代码
请问楼主解决了没???
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表