LPC1788的IIC使用

发布者:AngelicJourney最新更新时间:2017-01-13 来源: eefocus关键字:LPC1788  IIC使用 手机看文章 扫描二维码
随时随地手机看文章

#ifndef __IIC0_H_

#define __IIC0_H_

 

#include "common.h"

#include "delay.h"

 

 

//IIC通讯过程中的指定状态

 

#define STATUS_SENDSTART        0X08    //已经发送起始条件

#define STATUS_REPEATSTART      0X10    //已经发送重复的起始条件

#define STATUS_SENDSLAVE_ACK    0X18    //已发送从机写地址,接收到ACK

#define STATUS_SENDSLAVE_NACK   0X20    //已发送从机写地址,未接收到ack

#define STATUS_SENDDATA_ACK     0X28    //已发送从机写数据,并接收到ack

#define STATUS_SENDDATA_NACK    0X30    //已发送从机写数据没收到ack

#define STATUS_LOSS             0X38    //丢失总线仲裁

#define STATUS_READADDR_NACK    0X48    //已经发送从机读地址未收到ack

#define STATUS_READADDR_ACK     0X40    //已发送从机读地址并接受到ack

#define STATUS_RECV_ACK         0X50    //已接受数据字节ack已返回

#define STATUS_RECV_NACK         0X58   //已接受数据字节nack已返回

 

 

 

void iic0_init(u16 div);//参数为时钟分频数 不得超过65535 + 65535

 

u8 iic0_start(void);//发送起始信号

 

u8 iic0_send_write_addr(u8 addr);//发送设备写地址

 

u8 iic0_send_data(u8 data);//发送数据

 

u8 iic0_send_stop(void);//发送停止

 

u8 iic0_send_read_addr(u8 addr);//发送读地址

 

u8 iic0_read_data(u8* value,u8 ack);//读取数据

 

u8 iic0_repeat_start(void);//重新发送start

 

#endif

 

 

 

 

 

 

 

 

#include "iic0.h"

 

 

#define I2EN  6     //接口使能

#define STA   5     //起始标志

#define STO   4     //停止标志

#define SI    3     //中断标志

#define AA    2     //应答标志

 

#define I2ENC 6     //清除iic使能

#define STAC  5     //清除起始

#define SIC   3     //清除中断

#define AAC   2     //清除应答

 

#define STATE (LPC_I2C0->STAT & 0xf8)   //IIC总线的实际状态信息

 

void iic0_init(u16 div)

{

    //打开时钟,同时打开iic和gpio时钟

    LPC_SC->PCONP |= (1<<15)|(1<<7);//打开时钟

    //配置引脚功能

    LPC_IOCON->P0_27 = 0x00;

    LPC_IOCON->P0_27 |= (1<<0)|(1<<8);//打开iic功能,禁止滤波器 与引脚配置相关 根据实际引脚进行修改

   

    LPC_IOCON->P0_28 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

    LPC_IOCON->P0_28 |= (1<<0)|(1<<8);//打开iic功能,禁止滤波器 与引脚配置相关 根据实际引脚进行修改

   

    LPC_I2C0->CONCLR |= (1<

    LPC_I2C0->CONCLR |= (1<

 

    LPC_I2C0->SCLH = div/2;//设置IIC时钟

    LPC_I2C0->SCLL = div/2;

   

    LPC_I2C0->CONSET |= (1<

}

 

//等待指定的状态

//失败返回1 成功返回0

static u8 WaitResponse(u8 response)

{

    u8 retry = 200;

    while(--retry)

    {

        DelayUs(1);

        if(STATE == response)break;

    }

    if(retry)return 0;

    else

    {

        iic0_send_stop();

        return 1;

    }

}

u8 iic0_start(void)//发送起始信号

{

    LPC_I2C0->CONCLR = (1<

    //Start

    LPC_I2C0->CONSET = (1<

    return WaitResponse(STATUS_SENDSTART);//等待起始条件发送成功

}

 

u8 iic0_send_write_addr(u8 addr)    //发送设备写地址

{

    //dev_addr

    LPC_I2C0->DAT = addr;

    LPC_I2C0->CONSET = (1<

    LPC_I2C0->CONCLR = (1<

    return WaitResponse(STATUS_SENDSLAVE_ACK);//等待设备ack

}

 

u8 iic0_send_data(u8 data)  //发送数据

{

    LPC_I2C0->DAT = data;

    LPC_I2C0->CONSET = (1<

    LPC_I2C0->CONCLR = (1<

    return WaitResponse(STATUS_SENDDATA_ACK);

}

 

u8 iic0_send_stop(void) //发送停止

{

    LPC_I2C0->CONCLR = (1<

    LPC_I2C0->CONSET = (1<

    LPC_I2C0->CONCLR = (1<

    return 0;

}

 

u8 iic0_send_read_addr(u8 addr) //发送读地址

{

    LPC_I2C0->DAT = addr;

    LPC_I2C0->CONSET = (1<

    LPC_I2C0->CONCLR = (1<

    return WaitResponse(STATUS_READADDR_ACK);

}

 

u8 iic0_read_data(u8* value,u8 ack) //读取数据 1发送ack 0不发送

{

     if(ack)

    {

        LPC_I2C0->CONSET = (1<

        LPC_I2C0->CONCLR = (1<

        if( WaitResponse(STATUS_RECV_ACK))return 1;

    }

    else

    {

        LPC_I2C0->CONCLR = (1<

        if(WaitResponse(STATUS_RECV_NACK))return 1;

    }   

    *value = LPC_I2C0->DAT;

    return 0;

}

 

u8 iic0_repeat_start(void)  //重新发送start

{

    LPC_I2C0->CONCLR = (1<

    LPC_I2C0->CONSET = (1<

    return WaitResponse(STATUS_REPEATSTART);//等待重复start成功

}


关键字:LPC1788  IIC使用 引用地址:LPC1788的IIC使用

上一篇:lPC1788的GPIO驱动
下一篇:lPC1788驱动SDRAM

推荐阅读最新更新时间:2024-03-16 15:30

AVR 单片机学习(九)iic总线及TWI模块的使用方法
IIC总线定义与特点 I2C总线的工作原理 AVR的TWI模块的使用方法 AT24C02IIC inter integrated circuit 总线是一种由PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如:电源和系统风扇,可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。 TWI:ATMega 系列单片机内集成两线制串行接口模块,ATmegl文档称为TWI接口事实上TWI与PHILIOS
[单片机]
AVR 单片机学习(九)<font color='red'>iic</font>总线及TWI模块的<font color='red'>使用</font>方法
Cortex-M3 (NXP LPC1788)之GPIO
经过前一篇的分析,现在可以进入C环境进行各个模块的学习。首先进行简单的GPIO控制LED灯的操作,开发板通过GPIO1.18控制LED灯,电路如下图: 为了对LPC1788的内部结构有更好的理解和学习,虽然NXP给出了封装好的库函数,但是我将自己编写代码便于直接对内部原理进行分析。代码如下 #define rFIO1DIR (*(volatile unsigned*)0x20098020) //高速GPIO 方向控制寄存器,用于配置管脚的输入或输出,默认为输入 #define rFIO1MASK (*(volatile unsigned*)0x20098030) //高速GPIO 屏蔽寄存器
[单片机]
Cortex-M3 (NXP <font color='red'>LPC1788</font>)之GPIO
pic 16 使用8563 rtc iic 通讯 内部iic
void init_iic() { time.second=57; time.minute=2; time.hour=12; time.day=1; time.week=3; time.month=3; time.year=17;//默认时间 TRISCbits.TRISC3=1; //iic主模式配置为输入 TRISCbits.TRISC4=1; SSP1STAT=0x00; SSP1CON1=0x38; //使能iic主模式 SSP1CON2=0x00; SSP1ADD=0x19;//波特率设置 400K HZ } void IIC_write_n(unsigned
[单片机]
Cortex-M3 (NXP LPC1788)之SysTick系统节拍定时器
在GPIO控制篇中的延时闪烁LED只用了简单的for循环,为了精确的计时本篇介绍使用SysTick定时器每1ms产生中断,从而实现精确定时的目的。要使用系统节拍定时器主要进行两个部分的配置。1:系统时钟控制。2系统节拍定时器的控制。 一,系统时钟控制 LPC1788有3个独立的振荡器。他们是主振荡器,内部RC振荡器,RTC振荡器。复位后,LPC1788将用内部的RC振荡器运行,直到被软件切换。这样就能在没有任何外部晶振的情况下运行。LPC1788的时钟控制如图1所示 在开发板上使用12M的晶振作为主振荡器,它通过锁相环PLL0来提高频率提供CPU。由于芯片总是从内部的RC振荡器开始工作,因此主振荡器
[单片机]
Cortex-M3 (NXP <font color='red'>LPC1788</font>)之SysTick系统节拍定时器
LPC1788--SYSTEM--启动文件记录
#include LPC177x_8x.h void SystemInit (void) { LPC_SC- SCS = 0x00000021; //主振荡器使能 if (0x00000021 & (1 5)) { while ((LPC_SC- SCS & (1 6)) == 0);//等待主振荡器稳定 } LPC_SC- CLKSRCSEL = 0x00000001; //时钟源选择--选择主振荡器作为系统时钟与PLL0时钟源 LPC_SC- PLL0CFG = 0x00000009; // 倍频与分频-M=10 P=1 pll_out_clk = 12M*10 =
[单片机]
Cortex-M3 (NXP LPC1788)之IIS控制器
I2S总线为数字音频应用提供了一个标准的通信接口。它是一条3线串行总线,包含串行数据SD、字选择WS、串行时钟SCK。LPC1788的I2S接口提供了彼此独立的发送和接收通道,每个通道可以作为主机或从机,还提供了可选的过采样主机时钟输出MCLK。因此发送和接收通道各有四个引脚,对于发送为I2S_TX_CLK、I2S_TX_WS、I2S_TX_SDA、I2S_TX_MCLK。I2S的时序如图1。 图1:I2S时序 从图中可以看出每个串行时钟SCK传送一位音频信号,因此SCK的频率=声道数X采样频率X采样位数。如程序中44.1KHZ采样的16位立体音,对应的SCK频率为2X16X44100HZ。WS是字段选择,也称
[单片机]
Cortex-M3 (NXP <font color='red'>LPC1788</font>)之IIS控制器
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved