嵌入式系统课程设计报告实验报告

上传人:cl****1 文档编号:490131525 上传时间:2023-11-03 格式:DOC 页数:9 大小:253.50KB
返回 下载 相关 举报
嵌入式系统课程设计报告实验报告_第1页
第1页 / 共9页
嵌入式系统课程设计报告实验报告_第2页
第2页 / 共9页
嵌入式系统课程设计报告实验报告_第3页
第3页 / 共9页
嵌入式系统课程设计报告实验报告_第4页
第4页 / 共9页
嵌入式系统课程设计报告实验报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《嵌入式系统课程设计报告实验报告》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计报告实验报告(9页珍藏版)》请在金锄头文库上搜索。

1、- - -.嵌入式系统课程设计必做部分学院:电控学院专业:通信工程- -总结资料设计名称: IIC 同步串行通讯1、 设计的目的:1.掌握 S3C44B0IIC 控制器的编程方法2.编程实现串行 EEPROM 存储器 24C16 的数据存储和访问。2、设计的内容:1.学习 S3C44B0 IIC 控制器的原理与编程方法;2.学习 IIC 存储器 24C16 的编程方法;3.理解 IIC 存储器 24C16 的与 S3C44B0 的电路连接原理; 4.掌握 C 语言中断程序设计方法;5.编程实现对 24C16 的数据存储和访问。3、设计思路、遇到的问题及解决方法:此次试验,我们结合嵌入式系统原理

2、及应用教材以及老师提供的各种pdf 和 word 资料,了解到了各种寄存器的配置方法,如 IICDS 等。对于例程中的各种函数,如 Wr24C16(), Rd24C16(),_irq IicInt() 等,通过对程序的仔细研读,最终了解了它们的各自用途,并在此基础上,编写了主函数。实现了从 0-255 共 256 个字节的写入及读取操作。- 2 -这次实验我们遇到了不少的难题,像开始使用 ARM-Project Manager 平台一开始,由于对此平台的不了解,我们走了许都弯路。像对于头文件的配置问题,总是配置不对,后来发现头文件为程序自主生成,无需配置。还有关于程序中的一些.s 文件,开始并

3、不知道是有何作用,后来在老师的指点下,发现有必要将其加入到 sourse 文件栏中调用,同时调用的同时,由于不理解调用的路径问题,多次编译失败,后来发现了问题,是路径配置不当,最终更改了路径,解决了问 题。再有,在对老师提供的例程进行阅读时候,发现了不少的 啰嗦以及错误语句,例如 Uart_Printf(%dn,k); 语句就不应该为 Uart_Printf(%dn,&k);这些问题我 们都通过调试最终给予了改正。4、设计的结果及验证正确输出结果如下截图,从超级终端中回显显示了正确数据,实验成立。- 3 -5、程序流程图如下:开始Uart 端口初始化,rPCONF,rPUPF,rINTCON,

4、pISR_IIC, rINTMSK,rIICCON 各个寄存器初始化,向量端口设置,设置循环变量 i=0;用 Wr24C16 函数写入 0-255。共 256 个数据,其中将数 值 I 写入到地址为 I 的 bank0 中,方便读取Rd24C16 函数读取,Uart_Printf 函数打印 0-255 共 256 个数, 地址分别为 0-255结束6、全部源代码如下(可验证) #include #include C:ARM25144b044b.h#include C:ARM25144b044blib.h#include C:ARM25144b0Def.h#include C:ARM25144b

5、0iic.h#include C:ARM25144b0Option.h#include #include #include #include #include - 4 -#define WRDATA (1)#define POLLACK (2)#define RDDATA (3)#define SETRDADDR (4)#define IICBUFSIZE 0x20U8 _iicDataIICBUFSIZE;volatile int _iicDataCount;volatile int _iicStatus;volatile int _iicMode;int _iicPt;void _irq

6、IicInt(void);void Wr24C16(U32 slvAddr,U32 addr,U8 data)_iicMode=WRDATA;_iicPt=0;_iicData0=(U8)addr;_iicData1=data;_iicDataCount=2;rIICDS=slvAddr;/0xa0 ,写 移位寄存器rIICSTAT=0xf0; /MasTx,Start/Clearing the pending bit isnt needed because the pending bit has been cleared. while(_iicDataCount!=-1);/中断完成,总线不

7、忙,可以传送,同时移位寄存器已经准备好两个数据量 _iicMode=POLLACK;while(1)rIICDS=slvAddr; / 0xa0 ,写 移位寄存器_iicStatus=0x100;rIICSTAT=0xf0; /MasTx,StartrIICCON=0xaf; /resumes IIC operation.IIC-BUS 控制寄存器while(_iicStatus=0x100); /rIICSTAT 数值发给 iicStatus,0xf0if(!(_iicStatus&0x1) / Last-received bit is 0 (ACK was received),判断 ack

8、 是否收到数据break; / when ACK is receivedrIICSTAT=0xd0; /stop MasTx condition IIC-bus 不忙rIICCON=0xaf; /resumes IIC operation.Delay(1); /wait until stop condtion is in effect./write is pleted.void Rd24C16(U32 slvAddr,U32 addr,U8 *data)_iicMode=SETRDADDR; / 写模式开启_iicPt=0; /data 【】的计数器_iicData0=(U8)addr; /取

9、地址_iicDataCount=1;- 5 -rIICDS=slvAddr; /移位寄存器地址联系rIICSTAT=0xf0; /MasTx,Start ,总线忙/Clearing the pending bit isnt needed because the pending bit has been cleared. while(_iicDataCount!=-1);_iicMode=RDDATA;_iicPt=0; / 数组数据变量_iicDataCount=1; /?rIICDS=slvAddr; /设置移位寄存器输出地点rIICSTAT=0xb0; /MasRx,Start IIC-b

10、us 不忙rIICCON=0xaf; /resumes IIC operation.while(_iicDataCount!=-1);*data=_iicData1;void _irq IicInt(void) / 中断挂起 总线控制U32 iicSt,i; /?rI_ISPC=BIT_IIC; /?iicSt=rIICSTAT; / 写入 fo,d0,if(iicSt&0x8) / when bus arbitration is failed. IIC-bus 仲裁过程状态标志位if(iicSt&0x4) / when a slave address is matched with IICA

11、DD IIC-bus 从地址状态标志位 if(iicSt&0x2) / when a slave address is 0000000b IIC-bus 地址为 0 状态标志:if(iicSt&0x1) / when ACK isnt received IIC-bus 上一次接收到的状态标志位switch(_iicMode)case POLLACK:_iicStatus=iicSt;break;case RDDATA:if(_iicDataCount-)=0)_iicData_iicPt+=rIICDS;rIICSTAT=0x90; /stop MasRx condition , Master

12、 receive mode IIC-bus 不忙,Enable Rx/Tx rIICCON=0xaf; /resumes IIC operation.Delay(1); /wait until stop condtion is in effect./too long time./The pending bit will not be set after issuing stop condition.break;_iicData_iicPt+=rIICDS; /0,1/The last data has to be read with no ack. 设置应答位,读取时为 NO 应答位if(_i

13、icDataCount)=0)rIICCON=0x2f; /resumes IIC operation with NOACK.elserIICCON=0xaf; /resumes IIC operation with ACK- 6 -break;case WRDATA:if(_iicDataCount-)=0) /2 ,1,0,-1rIICSTAT=0xd0; /stop MasTx condition IIC-bus 不忙rIICCON=0xaf; /resumes IIC operation. 总线控制Delay(1); /wait until stop condtion is in ef

14、fect./The pending bit will not be set after issuing stop condition.break;rIICDS=_iicData_iicPt+; /_iicData0 has dummy. 传送两次,数据和地址 for(i=0;i10;i+); /for setup time until rising edge of IICSCL rIICCON=0xaf; /resumes IIC operation.break;case SETRDADDR:/Uart_Printf(S%d,_iicDataCount);if(_iicDataCount-)=0) /1,0break; /IIC operation is stopped because of IICCON4rIICDS=_iicData_iicPt+; / 第一次开始传入数据地址,addr for(i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号