IIC总线实验(十)

IIC总线实验(十)

ID:47486975

大小:214.50 KB

页数:13页

时间:2020-01-12

IIC总线实验(十)_第1页
IIC总线实验(十)_第2页
IIC总线实验(十)_第3页
IIC总线实验(十)_第4页
IIC总线实验(十)_第5页
资源描述:

《IIC总线实验(十)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、声明:本文为原创作品,版权归本博文作者所有,如需转载,请注明出处 简介      这一节,我们来讲一讲有关IIC总线的实验,在硬件中,我们实用了24LC04,一个512字节的EEPROM。在NIOSII中,没有集成IIC接口,为了实现这一功能,我们有两种途径,一种就是自己写IP核或者移植别人的IP核,另一种方法就是通过IO口模拟IIC总线协议。我们这一节采用的方法是后者,通过IO口模拟IIC总线协议,以达到对24LC04控制读写的目的。     首先,我简单介绍一下IIC总线的原理,大家稍微了解

2、一下。IIC(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。它在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送

3、数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。下图就为IIC总线的时序图。简单介绍之后,我们就要开始实践一下了,开始吧硬件开发     首先,需要在软核中添加两个IO模块,并将其命名为SCL和SDA,其中,

4、SCL为output建portsonly(仅输出),SDA为Bidirection(tristate)port(双向),建好以后,如下图所示     接下来,我们自动分配一下地址,编译。完成后,我们回到Quartus界面。然后我们来分配引脚,如下图所示     分配好管脚以后,我们运行TCL脚本文件,开始编译(Ctrl+L)……     编译完成后,我们的硬件部分就结束了,接下来,就是我们的软件开发部分了。软件开发     首先,我们打开NIOSII9.0IDE,然后进行编译(Ctrl+B)。 

5、    编译好以后,我们看一下system.h文件,看是否多出了SCL和SDA部分代码。跟我们预期的一样,system.h文件中出现了SCL和SDA部分代码,如下表所示/* *SCLconfiguration * */#define SCL_NAME "/dev/SCL"#define SCL_TYPE "altera_avalon_pio"#define SCL_BASE0x00201060……/* *SDAconfiguration * */ #define SDA_NAME "/dev/S

6、DA"#define SDA_TYPE "altera_avalon_pio"#define SDA_BASE0x00201070 ……     在跟大家讨论过程中,我了解到很多人都想知道有关NIOSII自带的API的用法,所以,今天我就用这种方式来实现我们的程序。不过我还是推荐大家用我之前的方式编写程序,道理我已经说过了,在此不再重复。下面我们在inc目录下建立一个iic.h文件,如下表所示#ifndef  IIC_H_#define  IIC_H_#define   OUT     1#de

7、fine   IN       0 typedef struct{    void (*write_byte)(unsigned short addr, unsigned char dat);    unsigned char (*read_byte)(unsigned short addr);}IIC; extern IICiic; #endif /*IIC_H_*/接下来,我们需要在driver下建立iic.c文件,如下表所示#include #include 

8、nistd.h>#include  #include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include "../inc/iic.h" static alt_u8read_byte(alt_u16addr);static void write_byte(alt_u16addr,alt_u8dat); IICiic={    .write_byte=write_byte,    .rea

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。