ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx

上传人:b****6 文档编号:18932637 上传时间:2023-01-02 格式:DOCX 页数:40 大小:1.78MB
下载 相关 举报
ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx_第1页
第1页 / 共40页
ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx_第2页
第2页 / 共40页
ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx_第3页
第3页 / 共40页
ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx_第4页
第4页 / 共40页
ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx

《ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx》由会员分享,可在线阅读,更多相关《ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx(40页珍藏版)》请在冰豆网上搜索。

ARMARM嵌入式IIC实验led实验KEYBORAD实验中断测试Word格式.docx

//初始化S3C2410的Interrupt,PortandUART

keyboard_test();

//调用keyboard_test()

while

(1);

}

TestKeyBoard.c

/*头文件和宏定义*/

#definerCPLDLEDADDR(*(volatileunsignedchar*)0x21180000)//LED对应的真实地址(物理地址)

voidkeyboard_test(void);

//void__irqkeyboard_int(void);

UINT8Tkey_set(UINT8TucChar);

/*外部函数*/

externvoidiic_write_keybd(UINT32TunSlaveAddr,UINT32TunAddr,UINT8TucData);

externvoidiic_read_keybd(UINT32TunSlaveAddr,UINT32TunAddr,UINT8T*pData);

externvoidiic_init_keybd(void);

/*全局变量*/

UINT32Tg_nKeyPress;

keyboard_init

按键板初始化

voidkeyboard_init(void)

iic_init_keybd();

//iic初始化

led_on

根据键值点亮相应led灯和超范围数据处理

voidled_on(UINT8TkeyNum)//led编码对应二进制数据

intlow8=0x0F|(1<

<

7);

//0x0F将低四位置1(1<

7)表示蜂鸣器的控制位

if(keyNum<

15)//数据0~E为正常范围

{

rCPLDLEDADDR|=low8;

//将低四位和第八位置1.低四位用于表示键值。

第八位为1表示蜂鸣器不工作

rCPLDLEDADDR&

=~keyNum;

//对led编码。

led的亮灭代表1和0.通过4个led的亮灭表示相应按键。

最右边为最低位

}

else

=~(1<

//数据超范围以报警处理,蜂鸣器发声

keyboard_test

测试按键板

voidkeyboard_test(void)

UINT8TucChar;

keyboard_init();

//按键板初始化

while

(1)

{

while

(1)//等待按键被按下(使用查询方式)有键被按下时跳出该循环

{

iic_read_keybd(0x70,0x00,&

ucChar);

//从从器件0x70的系统寄存器0x00读取数据

if(ucChar&

0x01)//判断从器件的系统寄存器0x00最低位SystemReg.0的值置1时表示有效的按键动作,清0表示无按键动作

break;

}

iic_read_keybd(0x70,0x1,&

//从从器件的键值寄存器读取按键信息

if(ucChar!

=0)//当ucChar!

=0时表示有键被压按

ucChar=key_set(ucChar);

//对获得的按键信息进行处理(根据需要编码)

led_on(ucChar);

//根据键值点亮对应的led灯

}

key_set

键值设置

UINT8Tkey_set(UINT8TucChar)//根据从器件的键值寄存器读取回来的数据改成自定义编码

switch(ucChar)

{

case1:

case2:

case3:

case4:

case5:

ucChar-=1;

break;

//如果读取数据为1~5范围,则减一以下类似

case9:

case10:

case11:

case12:

case13:

ucChar-=4;

case17:

case18:

case19:

case20:

case21:

ucChar-=7;

default:

ucChar=0;

//若不在以上的数据范围内,则赋值0,表示超出范围

returnucChar;

IICOfKeyBoard.c

IIC总线的初始化、读写、中断

/*函数声明*/

void__irqiic_int(void);

voidiic_init_keybd(void);

voidiic_read_keybd(UINT32TunSlaveAddr,UINT32TunAddr,UINT8T*pData);

/*全局变量*/

intf_nGetACK;

iic_init_keybd

初始化iic

voidiic_init_keybd(void)

f_nGetACK=0;

//初始化为0非应答

//中断初始化

rINTMOD=0x0;

//所有都设置为普通中断。

中断模式寄存器

rSRCPND=rSRCPND;

//这里是清掉所有标志位。

中断源挂起(标志)寄存器,对其标志位清0,其方法为写1.

rINTPND=rINTPND;

//与上一行同理。

中断服务(挂起)寄存器

rINTMSK&

=~(BIT_IIC);

//开放INT_IIC中断源

//iic初始化

rIICADD=0x10;

//S3C2410X从器件地址。

该地址由从器件的芯片资料和硬件接线图可获知00010000

rIICCON=0xaf;

//使能ACK和IIC总线中断,清除pending位以便响应中断。

设置IICCLK=MCLK/16。

10101111

rIICSTAT=0x10;

//0001000000:

从接收模式0:

写入0,产生停止条件使能“串行数据输出使能”低四位为状态位主要用来读出数据,写入没有作用

//应答位清0

pISR_IIC=(unsigned)iic_int;

//对INT_IIC中断入口地址初始化(将iic_int中断函数地址放到INT_IIC中断入口)

iic_write_keybd

向iic写数据

iic_read_keybd

从iic读数据

//根据IIC总线的读写控制逻辑编程

voidiic_read_keybd(UINT32TunSlaveAddr,UINT32TunAddr,UINT8T*pData)

charcRecvByte;

//初始化为0非应答

//Sendcontrolbyte

rIICDS=unSlaveAddr;

//写从器件地址到IICDS

rIICSTAT=0xf0;

//配置为主发送模式,产生起始条件

while(f_nGetACK==0);

//等应答

//应答清0

//Sendaddress

rIICDS=unAddr;

//写从器件的相应寄存器地址到IICDS

//使能ACK和IIC总线中断,清除未决条件并恢复中断响应

//Sendcontrolbyte

rIICSTAT=0xb0;

//配置为主接收模式,产生起始条件

//Getdata

cRecvByte=rIICDS;

//从IICDS读数据

rIICCON=0x2f;

//禁止应答

delay

(1);

//Getdata

//Endreceive

rIICSTAT=0x90;

//配置为主接收模式,产生停止条件(主接收停止)

//使能ACK和IIC总线中断,清除未决条件并恢复中断响应

delay(10);

//等待直到停止条件生效

*pData=cRecvByte;

iic_int

IIC中断函数

void__irqiic_int(void)

ClearPending(BIT_IIC);

//清除IIC中断标志位

f_nGetACK=1;

//应答位置1,表示有应答

深圳大学实验报告

 

课程名称:

嵌入式系统设计

实验项目名称:

KEYBORAD实验(中断测试)

学院:

专业:

自动化

指导教师:

报告人:

学号

实验时间:

2012.12.4

实验报告提交时间:

2012.12.5

教务部制

实验目的与要求:

实验要求:

1.熟悉中断(INT)的编程及使用;

2.熟悉EEPROM编程和使用;

3.自学熟悉KEYBOARD的运作过程;

4.建立工程文件;

5.把keyboard的输入在LED上显示,超范围的数据以报警处理。

实验内容:

1、建立工程文件

A相关文件的建立与引入

B工程文件配置

2、分析KEYBOARD的初始化程序

KEYBOARD的初始化程序主要是对IIC相关寄存器的初始化。

主要做了三个操作

1IIC中断:

INT_IIC中断源的初始化

2IIC相关寄存器初始化

3IIC中断入口地址初始化

下面逐个分析:

代码如下

总共配置了INT_IIC中断源的四个寄存器。

每一句程序详细分析如下:

AINTMOD---中断模式寄存器

//所有都设置为普通中断。

中断模式寄存器

BSRCPND---中断源挂起(标志)寄存器

rSRCPND=rSR

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1