欢迎来到天天文库
浏览记录
ID:14812708
大小:97.00 KB
页数:7页
时间:2018-07-30
《嵌入式系统课程设计实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式系统课程设计必做部分学院:电控学院专业:通信工程-7-设计名称:IIC同步串行通讯1、设计的目的:1.掌握S3C44B0IIC控制器的编程方法2.编程实现串行EEPROM存储器24C16的数据存储和访问。2、设计的内容:1.学习S3C44B0IIC控制器的原理与编程方法;2.学习IIC存储器24C16的编程方法;3.理解IIC存储器24C16的与S3C44B0的电路连接原理;4.掌握C语言中断程序设计方法;5.编程实现对24C16的数据存储和访问。3、设计思路、遇到的问题及解决方法:此次试
2、验,我们结合《嵌入式系统原理及应用》教材以及老师提供的各种pdf和word资料,了解到了各种寄存器的配置方法,如IICDS等。对于例程中的各种函数,如Wr24C16(),Rd24C16(),__irqIicInt()等,通过对程序的仔细研读,最终了解了它们的各自用途,并在此基础上,编写了主函数。实现了从0-255共256个字节的写入及读取操作。这次实验我们遇到了不少的难题,像开始使用ARM-ProjectManager平台一开始,由于对此平台的不了解,我们走了许都弯路。像对于头文件的配置问题,总
3、是配置不对,后来发现头文件为程序自主生成,无需配置。还有关于程序中的一些.s文件,开始并不知道是有何作用,后来在老师的指点下,发现有必要将其加入到sourse文件栏中调用,同时调用的同时,由于不理解调用的路径问题,多次编译失败,后来发现了问题,是路径配置不当,最终更改了路径,解决了问题。再有,在对老师提供的例程进行阅读时候,发现了不少的啰嗦以及错误语句,例如Uart_Printf("%d",k);语句就不应该为Uart_Printf("%d",&k);这些问题我们都通过调试最终给予了改正
4、。-7-4、设计的结果及验证正确输出结果如下截图,从超级终端中回显显示了正确数据,实验成立。开始5、程序流程图如下:Uart端口初始化,rPCONF,rPUPF,rINTCON,pISR_IIC,rINTMSK,rIICCON各个寄存器初始化,向量端口设置,设置循环变量i=0;用Wr24C16函数写入0-255。共256个数据,其中将数值I写入到地址为I的bank0中,方便读取Rd24C16函数读取,Uart_Printf函数打印0-255共256个数,地址分别为0-255结束-7-6、全部源代
5、码如下(可验证)#include#include"C:ARM25144b044b.h"#include"C:ARM25144b044blib.h"#include"C:ARM25144b0Def.h"#include"C:ARM25144b0iic.h"#include"C:ARM25144b0Option.h"#include#include#include#include6、.h>#include#defineWRDATA(1)#definePOLLACK(2)#defineRDDATA(3)#defineSETRDADDR(4)#defineIICBUFSIZE0x20U8_iicData[IICBUFSIZE];volatileint_iicDataCount;volatileint_iicStatus;volatileint_iicMode;int_iicPt;void__irqIicInt(void);voidWr24C16(U32slvA7、ddr,U32addr,U8data){_iicMode=WRDATA;_iicPt=0;_iicData[0]=(U8)addr;_iicData[1]=data;_iicDataCount=2;rIICDS=slvAddr;//0xa0,写移位寄存器rIICSTAT=0xf0;//MasTx,Start//Clearingthependingbitisn'tneededbecausethependingbithasbeencleared.while(_iicDataCount!=-1);//8、中断完成,总线不忙,可以传送,同时移位寄存器已经准备好两个数据量_iicMode=POLLACK;while(1){rIICDS=slvAddr;//0xa0,写移位寄存器_iicStatus=0x100;rIICSTAT=0xf0;//MasTx,Start-7-rIICCON=0xaf;//resumesIICoperation.IIC-BUS控制寄存器while(_iicStatus==0x100);//rIICSTAT数值发给iicStatus,0xf0if(!(_iicStatus&0
6、.h>#include#defineWRDATA(1)#definePOLLACK(2)#defineRDDATA(3)#defineSETRDADDR(4)#defineIICBUFSIZE0x20U8_iicData[IICBUFSIZE];volatileint_iicDataCount;volatileint_iicStatus;volatileint_iicMode;int_iicPt;void__irqIicInt(void);voidWr24C16(U32slvA
7、ddr,U32addr,U8data){_iicMode=WRDATA;_iicPt=0;_iicData[0]=(U8)addr;_iicData[1]=data;_iicDataCount=2;rIICDS=slvAddr;//0xa0,写移位寄存器rIICSTAT=0xf0;//MasTx,Start//Clearingthependingbitisn'tneededbecausethependingbithasbeencleared.while(_iicDataCount!=-1);//
8、中断完成,总线不忙,可以传送,同时移位寄存器已经准备好两个数据量_iicMode=POLLACK;while(1){rIICDS=slvAddr;//0xa0,写移位寄存器_iicStatus=0x100;rIICSTAT=0xf0;//MasTx,Start-7-rIICCON=0xaf;//resumesIICoperation.IIC-BUS控制寄存器while(_iicStatus==0x100);//rIICSTAT数值发给iicStatus,0xf0if(!(_iicStatus&0
此文档下载收益归作者所有