3264|3

2941

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

如何使用lpc8xx的rom建立keil项目? [复制链接]

最近使用lpc824的芯片做了一块板子,GPIO和uart都可以顺利调通,但是项目中有传感器是IIC的接口。先后下载了lpcopen_3_02_keil_iar_nxp_lpcxpresso_824和LPC824_Example_Code_Bundle_Keil_r1.0两个项目,I2C0与开发板相同,就想使用LPC824_Example_Code_Bundle_Keil_r1.0项目中的Example_I2C_MasterSlave程序。
  1. WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE);                 LPC_I2C0->MSTDAT = (Self_Slave_address<<1) | 0;
  2.                 LPC_I2C0->MSTCTL = CTL_MSTSTART;  
  3.                 WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_TX);
  4.                
  5.                 LPC_I2C0->MSTDAT = 0xFE;
  6.                 LPC_I2C0->MSTCTL = CTL_MSTCONTINUE;
  7.                 WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_TX);
  8.                 LPC_I2C0->MSTCTL = CTL_MSTSTOP;
  9.                
  10.                
  11.                 WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE);
  12.                 LPC_I2C0->MSTDAT = (Self_Slave_address<<1) | 0;
  13.                 LPC_I2C0->MSTCTL = CTL_MSTSTART;  
  14.                 WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_TX);
  15.                
  16.                 LPC_I2C0->MSTDAT = 0xE7;
  17.                 LPC_I2C0->MSTCTL = CTL_MSTCONTINUE;
  18.                 WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_TX);
  19.                 LPC_I2C0->MSTCTL = CTL_MSTSTOP;
  20.        
  21.                 LEDs_Off(RED);
  22. //执行到这里就卡死???
  23. WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE);
  24. LPC_I2C0->MSTDAT = (Self_Slave_address<<1) | 1;
  25. LPC_I2C0->MSTCTL = CTL_MSTSTART;  
  26. WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_RX);
复制代码


只要是一读操作就死在
  1. void WaitI2CMasterState(LPC_I2C_TypeDef * ptr_LPC_I2C, uint32_t state) {

  2.   while(!(ptr_LPC_I2C->STAT & STAT_MSTPEND));            // Wait for MSTPENDING bit set in STAT register
  3.   if((ptr_LPC_I2C->STAT & MASTER_STATE_MASK) != state) { // If master state mismatch ...
  4.     LEDs_Off(GREEN);
  5.     LEDs_On(RED);
  6.     while(1);                                            // die here and debug the problem
  7.   }
  8.   return;                                                // If no mismatch, return

  9. }
复制代码

有人在官网的论坛里也问过这样的问题,https://community.nxp.com/thread/483580没有答案!
于是就使用lpcopen_3_02_keil_iar_nxp_lpcxpresso_824中的IIC例程,结果更悲催!只要执行程序就出现SWD可以看见设备,但是烧写出现invalid rom table的故障,每次都是使用ISP启动复活板子。找不到任何原因。
现在真是没有任何办法,希望高手救我!



此帖出自NXP MCU论坛

最新回复

不要用库,用寄存器操作,看卡在哪儿,如果你没看懂库的代码的意思,肯定不知道啥原因,我基本不用库,花点时间看寄存器  详情 回复 发表于 2019-4-13 12:23
点赞 关注(1)
 

回复
举报

2941

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 
  1.        LPC_I2C0->MSTDAT = 0xE7;
  2.                 LPC_I2C0->MSTCTL = CTL_MSTCONTINUE;
  3.                 WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_TX);
  4.                 LPC_I2C0->MSTCTL = CTL_MSTSTOP;
复制代码

代码中的
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_TX);//发出读操作后是谁挂起设备?
还有WaitI2CSlaveState(LPC_I2C_TypeDef * ptr_LPC_I2C, uint32_t state)的函数,是不是应该这个函数呀。
此帖出自NXP MCU论坛
 
 
 

回复

1144

帖子

17

TA的资源

纯净的硅(高级)

板凳
 
不要用库,用寄存器操作,看卡在哪儿,如果你没看懂库的代码的意思,肯定不知道啥原因,我基本不用库,花点时间看寄存器
此帖出自NXP MCU论坛

点评

谢谢你的回复!原因查明,主要是死在中断里。所以在中断里加入如下代码。 虽然“不死了”,但是还是无法操作传感器,optIndex是我的操作的顺序号,用来标记执行到哪个操作步骤了。 我把传感器接上线和取下  详情 回复 发表于 2019-4-13 19:12
 
 
 

回复

2941

帖子

4

TA的资源

五彩晶圆(中级)

4
 
fxyc87 发表于 2019-4-13 12:23
不要用库,用寄存器操作,看卡在哪儿,如果你没看懂库的代码的意思,肯定不知道啥原因,我基本不用库,花点 ...

谢谢你的回复!原因查明,主要是死在中断里。所以在中断里加入如下代码。
  1. sprintf(dis_data,"STAT:%c %x %x %x %x#\n\r",optIndex,LPC_I2C0->STAT,LPC_I2C0->SLVDAT,LPC_I2C0->MSTDAT,LPC_I2C0->MONRXDAT);
复制代码




虽然“不死了”,但是还是无法操作传感器,optIndex是我的操作的顺序号,用来标记执行到哪个操作步骤了。
我把传感器接上线和取下,程序都可以取得“数据”。
-------接上传感器-----------
STAT:A db100 80 40 481#  //从机设备挂起  四个从机地址中至少有一个与硬件匹配?

STAT:B df300 fe 7f 180#    //从机设备挂起  从机地址接收

STAT:C db100 80 40 fe#   //从机设备挂起

STAT:D df300 e3 71 180# //从机设备挂起

STAT:E db100 81 40 e3#  //从机设备挂起

STAT:E df500 81 81 181# //从机设备挂起
-------取下传感器-------------
STAT:A 43100 80 40 0#

STAT:B 57300 fe 7f 180#

STAT:C db100 80 40 fe#  //从机设备挂起  四个从机地址中至少有一个与硬件匹配?

STAT:D df300 e3 71 180#  //从机设备挂起  从机地址接收

STAT:E db100 81 40 e3#

STAT:E df500 81 81 181#


从数据中可以知道在执行读取操作时执行了二次中断,E,E 证明在输出地址后有“数据输入”。
我把传感器都取下来哪来的数据呀!
不知道哪位做过I2C的程序,给点指点。因为我只有一个I2C的传感器,买了一个I2C的OLED的屏幕没有到货,所以无法证明传感器是不是坏了。
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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