8255并行接口键盘实验.docVIP

  • 66
  • 0
  • 约3.16千字
  • 约 8页
  • 2017-03-05 发布于重庆
  • 举报
8255并行接口键盘实验

四川大学网络教育学院 计算机综合实践 校外学习中心: 成都市 学 生 姓 名: 专 业: 电气工程及其自动化 层 次: 专升本 年 级: 09春 学 号: 实 践 时 间: 实验 目的 1、掌握8255A的功能及方式0、1的实现? 2、熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。? 3、利用09H型中断设计一个自己的键盘中断服务程序,程序设计应考虑在 退出时不破坏原有的设置。 实验 内容 1?、8255的工作方式? 一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。? 方式0是基本型输入/输出。这种方式和外设交换数据时,8255端口与外设之间不使用联络线。? 方式1为选通型输入/输出。用这种方式和外界交换数据时,端口和外设之间要有联络信号。? 方式2是双向数据传送,仅A口有这项功能。当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。?2.、工作方式选择字? 8255工作方式选择字共8位,存放在8255控制寄存器中。最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。?3?、C口置/复位控制字? 8255的C口可进行位操作,即:可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(图8-10)。C口置/复位字共8位,各位含义如下: 4、?命令字与初始化编程? 8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:?? ①?向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。?? ②当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。?? 注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。?? ③?向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”。 算法 与流 程图 键盘驱动的主要作用就是实时监测外部按键中断,一旦发现外部有键按下就向内核发送键盘消息实现键盘输入功能。键盘驱动创建了中断服务线程和4个键盘中断事件,每行按键对应一个键盘中断事件。有键被按下时,中断服务例程得到对应的中断标识符并报告给系统任务调度进程,同时产生键盘中断事件,键盘中断服务线程响应键盘中断事件,开始扫描矩阵键盘。根据产生的中断事件类型不同,可以首先确定被按下键的行位置。由于键盘被按下后,该键对应的行和列被连通,因此根据判断各列对应的I/O口的电平,可以得到被按下键的列位置;得到按键的准确位置后,通过向操作系统发送键盘消息KEYBD_EVENT,实现一次键盘输入。循环扫描键盘,直到按键被弹起则发送KEYEVENTF_KEYUP事件。响应键盘中断输入的整个流程如图。 ? 1、?在OAL层加入中断源? 矩阵键盘采用4路I/O口中断,每路中断对应1个中断源。矩阵键盘驱动首先要在OAL层加入这些中断源。以其中一路中断为例:? #define?SYSINTR_KEYONE(SYSINTR_FIRMWARE+0)?2?、中断服务例程(ISR)设计? 本键盘驱动将GPIO_6、GPIO_7、GPIO_16、GPIO_17四个I/O口作为中断I/O口。有键被按下时将产生一个I/O中断,内核首先进入异常中断处理程序,由它屏蔽所有中断,再调用中断服务例程ISR得到该中断的逻辑中断标识。鉴于ISR的任务比较单一,ISR通常都要求越短、越快越好。矩阵键盘驱动的ISR设计如下:? if(v_pGPIOReg﹥GEDR_x??GPIO_6)?{//中断触发????v_pGPIOReg﹥GEDR_x?=?GPIO_6;//清除中断? return?SYSINTR_KEYONE;//返回中断标识}???其他三路中断的ISR设计与此类似。?3、中断服务线程(IST)设计? 中断服务例程以键盘中断的逻辑中断标识符形式返回给系统任务调度进程,中断服务线程则在矩阵键盘驱动中负责具体中断处理。因为中断服务例程较小,并且只做很少的处理工作,中断服务线程就必须完成大多数中

文档评论(0)

1亿VIP精品文档

相关文档