按键中断显示教材.pptVIP

  • 20
  • 0
  • 约 22页
  • 2016-12-30 发布于湖北
  • 举报
按键中断显示 实验内容 本实验是一个测试键盘的实验,运行程序依次按键1-8,数码管依次显示 7-0,中间键一一对应,任意按一键,其对应的数码管显示不相应的数字。 设计流程图 中断 中断就是暂停正在执行的程序,并进入中断服务程序(Interrupt Service Routine.ISR)。 DSP的中断按中断源分可分为硬件中断和软件中断;按中断是否可屏蔽分为可屏蔽中断和非可屏蔽中断。 初始化定义 #pragma CODE_SECTION(vect,vect)//设置中断向量存放的代码段 用于将一段目标代码vect链接与.text段不同的存储空间vect段vect是目标代码的起始地址 unsigned int *pmem=0; #define IMR *(pmem+0x0000)//中断屏蔽寄存器(各种中断) #define IFR *(pmem+0x0001)//中断标志寄存器 #define PMST *(pmem+0x001d)//处理器工作方式状态寄存器 其中断指针IPTR可进行中断向量重新定位指向程序寄存器内中断向量所在页 #define SWCR *(pmem+0x002b)//软件等待状态控制寄存器 地址2BH #define SWWSR *(pmem+0x0028)//软件等待状态寄存器 地址28H #define CLKMD *(pmem+0x0058)//时钟方式寄存器 地址为58H #define ST1 *(pmem+0x007)//ST1中的INTM位为总中断控制位 #define PRD0 *(pmem+0x0025) /* timer0 period register */ #define TCR0 *(pmem+0x0026) /* timer0 control register */ ioport unsigned portc001; //键盘地址 ioport unsigned portc000; //数码显示地址 //数据线的高8位是位码,低8位是段码 与中断相关的寄存器 1.1 ST1--状态寄存器1 第11位INTM:中断方式位,从整体上屏蔽或开放中断。 INTM=0 开放全部末加屏蔽的中断。 INTM=1 关闭所有可屏蔽中断。 SSBX INTM 置1,关闭总中断 RSBX INTM 清0,打开总中断 当执行一条RETE或RETF指令(从中断返回)时,INTM清成0。 1.2 IMR-中断屏蔽寄存器 允许中断,对应位置1;屏蔽中断,对应位清0 如:IMR=0X010C 即(0000 0001 0000 1100)B 为允许INT2、TINT、INT3申请中断 1.3 IFR--中断标志寄存器 0-发出中断申请,1-等待中断 以下4种情况会使中断标志清零: ①C54X复位; ②中断在中断服务程序中得到处理,常用于中断方式; ③将1写到IFR中的相应位,常用于查询方式; ④使用适当的中断号执行INTR指令。 1.4 PMST-处理器工作方式状态寄存器 15~7位为IPTR,中断向量指针。指向中断向量所驻留的程序存储器的位置。 中断向量地址计算 PMST=0XE8 - IPTR=OX001 本实验芯片使用的是INT2中断,向量号为0x12,左移两位为0x48 INT2的中断向量地址为 (0000 0000 1100 1000)B=(00C8)H 在此采用混合编程方法 中断初始化 一般中断的初始化包括以下步骤: ①关闭总中断,清除中断标志寄存器IFR中的中断标志; asm(SSBX INTM); IFR=0x7FFF; ②设置中断屏蔽寄存器IMR中的相应屏蔽位为1,开放相应的中断; IMR=0x010C; ③如果需要,重新设置处理器工作模式寄存器PMST中的中断指针IPTR进行中断向量的重新定位; PMST=0xE8; ④开放全部可屏蔽中断。 asm(RSBX INTM); 中断初始化程序 void cpu_init() { asm( ssbx intm);//复位指令 禁止总中断 INTM=1 asm( ssbx xf ); //外部扩展引脚 总清零 PMST=0xe8;// SWWSR=0x7fff;//确保处理器初始化期间CPU能与外部 //慢速器件正常通信

文档评论(0)

1亿VIP精品文档

相关文档