1,在硬件设计时,要注意SCL和SDA线要加10K的上拉电阻,因为其端口配置内部没有上拉电阻,要不然两端口在初始状态下为低电平,在软件操作I2C总线置STA信号时是不会有反应的。
2,要注意检查下功率控制寄存器PCONP相应位,确保该功能模块是打开的。
3 如果根据I2C状态字进行相应处理采用中断方式的话,还应中断的相关设置。
【1】对于LPC21xx,I2C初始化应该如下:
static void BSP_I2C_Init(CPU_INT32U fi2c)
{
CPU_INT32U Fpclk = BSP_CPU_PclkFreq();
//PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 设置I2C控制口有效
PINSEL0_bit.P0_2 = 1; //设置I/O口工作模式,使用I2C0口,P0.2,P0.3和UART0的P0.0,P0.1。其余口为GPIO口
PINSEL0_bit.P0_3 = 1;
PCONP_bit.PCI2C = 1; //配置PCONP功率模块使能I2C
if(fi2c>400000) fi2c = 400000;
I2SCLH = (Fpclk/fi2c + 1) / 2; //高电平占空比寄存器
I2SCLL = (Fpclk/fi2c) / 2; //低电平占空比寄存器
//配置成I2C主模式
I2CONCLR = STA|SI|AA|STO; //分别为:起始标志(STA)|I2C中断标(SI)|应答标志(AA)|停止标志(STO)
I2CONSET = I2CEN; //I2EN=1,使能I2C功能
// 设置I2C中断允许
VICIntSelect &= ~(1 << VIC_I2C); // 设置所有通道为IRQ中断
VICVectCntl4 = 0x20|VIC_I2C; // I2C通道分配到IRQ slot 0,即优先级最高
VICVectAddr4 = (CPU_INT32U)I2C_IRQ_ISR_handler; // 设置I2C中断向量地址
VICIntEnable |= (1 << VIC_I2C); // 使能I2C中断
}
注意上面蓝色粗体部分,搞错了就不会进入中断或者导致其它中断源进入中断,VIC_I2C为通道号,细节参考其用户手册。
【2】启动I2C总线,代码如下:
I2CONCLR = STA|SI|AA; //0x2C; //起始标志(STA)|I2C中断标(SI)|应答标志(AA)
I2CONSET = I2CEN|STA; //0x60; //I2C接口使能,设置为主机,并启动总线
//I2CONSET = STA; //置位 STA进入I2C主发送器模式,启动发送START脉冲
while(0==I2C_end); //等待中断
if(1==I2C_end) return(1);
else return(0);
只有设置的起始标志位,才能启动I2C总线。
上面的代码是参考周立功官网的实验例程,蓝色字体是做的修改。
关键字:I2C设计 细节问题 LPC21xx
引用地址:
有关I2C设计时应注意的细节问题
推荐阅读最新更新时间:2024-03-16 14:51
I2C串行总线在单片机8031应用系统中的设计与实现
1 I2C总线概述 I2C (inter IC bus)总线是由Philips公司提出的串行通信接口规范,常见的中文译名有“集成电路间总线”或“内部集成电路总线”。它使用两条线:串行数据线(SDA)和串行时钟线(SCL),使连接到该总线上可访问的器件之间传送信息,属于多主控制总线。总线上的每个器件均可设置唯一的地址,从而可实现器件的有效访问。自Philips公司推出I2C总线后,Philips公司及其他公司纷纷相继推出了许多I2C总线产品,如各种微处理器、存储器(PCF8571/8570,128/256 字节)、A/D(PCF8591)、D/A(TDA8442/8444)转换器、E2PROM及各种I2C总线接口电路(PCF8
[单片机]
设计一个属于您自己的简易I2C隔离器
通常产品设计时间非常紧张,用于新产品设计的资金也并不宽余。但不管怎样,我们都必须要在不增加成本的前提下设计出能够运行于恶劣环境下的稳健系统。一般而言,这会要求使用电流隔离,用于保护敏感控制电子组件免受外部突入和瞬态浪涌电流的损害。
如果您的设计涉及许多工业接口,那么当您在各大半导体厂商的官方网站上看到琳琅满目的RS-485、RS-232、CAN和I2C信号隔离器时,您会发现自己像一个进到糖果店里的小孩一样兴奋不已。但是,当您想要采购经理批准购买这些产品时,他会立马给您泼上一盆冷水:“不能利用一些已有的标准组件吗?不管用什么方法,把它们都利用起来?”
今后碰到这种情况,您可以热情洋溢的回答“没问题”了,因为本文将
[嵌入式]
MPLAB IDE 细节点问题不定期更新ing
问题1、如何找到MPLAB IDE 隐藏的项目、输出的窗口 答:在菜单栏的 视图 中 “Project”、“Output”。 问题2、mplab c文件为什么不能添加到工程中的source files,只能添加到other files 答:文件保存的时候要加.C文件类型,只是写了个文件名没有后缀就会加到other files中,所以添加不进去到source文件。 实用功能: 1、打开MPLAB开发环境之后,点击Edit(编辑)---Properties(属性),进入Editor Properties(属性编辑)对话框; 2、在General选项卡中,选中Use Tabbed Window选项,可以将打开的多个源文件在同一
[单片机]
基于Linux操作系统的ARM/DSP多机I2C通信设计方案
引言 在很多嵌入式控制系统中,系统既要完成大量的信息采集和复杂的算法,又要实现精确的控制功能。采用运行有嵌入式Linux操作系统的ARM9微控制器完成信号采集及实现上层控制算法,并向DSP芯片发送上层算法得到控制参数,DSP芯片根据获得的参数和下层控制算法实现精确、可靠的闭环控制。 1 多机系统组成 该多机控制系统以ARM9微控制器s3c2440为核心,采用I2C总线挂载多个DSP芯片TMS320F28015作为协控制器,构成整个控制系统的核心。 1.1 S3C2440及TMS320F28015简介 Samsung公司的处理器S3C2440是内部集成了ARM公司ARM920T处理器内核的32位微控
[单片机]
I2C器件接口IP核的CPLD设计
摘要:根据单片机I2C串行扩展的特点,在EDA软件MaxplusII的环境下,利用AHDL语言,建立IP核。此设计利用状态机实现,在给出设计的同时详细说明IP核的建立过程,并下载到芯片通过硬件试验验证。 关键词:可编程逻辑器件 I2C串行扩展 IP核 由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的IP(Intellectual Property)核。各个IP核可重复利用,可大大提高设计能力和效率。国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对I2C的主方式串行扩展通信的特点,详细给出设计过程和结果。 1 IP核简介 IP核是指:将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器、
[半导体设计/制造]
基于I2C总线的MSP430单片机应用系统设计
引言 串行护展总线技术是新一代单片机技术发展的一个显著特点。其中PHILIPS公司推出的I2C总线最为著名,它包括一个两端接口,通过一个带有缓冲区的接口,数据可以被I2C发送或接收,控制和状态信息则通过一套内存映射寄存器来传送。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。本文是把I2C总线应用到MSP430单片机温度控制系统中的一个典型实例。 I2C总线是用2根双向I/O信号线(串行时钟线SCL和串行数据线SDA)把多种器件连接起来,并实现器件之间的串行通讯。 MSP430是TI公司一种具有超低功耗的功能强大的16位单片机,MSP430F16
[单片机]
C51单片机模拟I2C总线驱动程序设计(2)
/************************************ I2C_RcvB ******************************** 函数名:uchar I2C_RcvB() 入口: 出口:uchar 型数据 功能描述: 接收从器件传来的数据,并判断总线错误(不发应答信号),收完后需要调用应答函数。 调用函数: 全局变量: ******************************************************************************* uchar I2C_RcvB() { uchar retc;
[单片机]
基于ARM硬件初始化的一些细节问题的解释
ARM硬件启动程序的工作一般包括: 1.分配中断向量表; 2.初始化存储器系统; 3.初始化各工作模式下的堆栈; 4.初始化有特殊要求的硬件模块; 5.初始化用户程序的执行环境; 6.切换处理器的工作模式; 7.调用主应用程序; 这里主要讲解写初始化应用程序执行环境: 一个典型的可执行程序的映像结构通常如表所列。 可执行程序映像的结构 分区 说明 ZI(初始化为0的可读/写数据) 只定义了变量名的全局变量
[单片机]