slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
实验 2 中断模拟实验 PowerPoint Presentation
Download Presentation
实验 2 中断模拟实验

Loading in 2 Seconds...

play fullscreen
1 / 22

实验 2 中断模拟实验 - PowerPoint PPT Presentation


  • 179 Views
  • Uploaded on

实验 2 中断模拟实验. 试验目的. 掌握中断的含义和中断响应过程。 掌握用 CCS simulator 模拟中断的方法。 掌握中断应用程序的编写方法。. 摘要. 复习 C54x 中断操作 模拟中断的方法 实验内容及步骤. 试验原理. 中断是一些由硬件或软件产生的信号,能使 CPU 暂时停止执行正在执行的程序,转而执行由 DSP 程序开发者编写的中断服务程序 (ISR—— Interrupt Service Routine) C54x 既支持软件中断也支持硬件中断 软件中断,是由指令 (INTR 、 TRAP 、 RESET) 产生的。 硬件中断:

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '实验 2 中断模拟实验' - brick


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
试验目的
  • 掌握中断的含义和中断响应过程。
  • 掌握用CCS simulator模拟中断的方法。
  • 掌握中断应用程序的编写方法。
slide3
摘要
  • 复习C54x中断操作
  • 模拟中断的方法
  • 实验内容及步骤
slide4
试验原理
  • 中断是一些由硬件或软件产生的信号,能使CPU暂时停止执行正在执行的程序,转而执行由DSP程序开发者编写的中断服务程序(ISR—— Interrupt Service Routine)
  • C54x既支持软件中断也支持硬件中断
    • 软件中断,是由指令 (INTR、TRAP、RESET) 产生的。
    • 硬件中断:
      • 外部中断——通过DSP外部中断引脚接收到的片外设备产生的中断(例如ADC/DAC向DSP发出的中断)
      • 片上外设中断——DSP片上外设 (如定时器、串口、DMA等) 向CPU发出的中断
  • 当同一CPU时钟周期内有多个硬件中断发生时,CPU会按照中断优先级对它们进行响应 ! 软件中断无优先级。
slide5
可屏蔽和非可屏蔽中断
  • DSP的中断可分为两大类:
    • 可屏蔽 (Maskable) 中断:可以通过软件被禁止/使能的中断。被禁止掉的中断即使产生,CPU 也不会去响应 !被使能的中断,当它产生时 CPU 就会去响应它 !
    • 非可屏蔽 (Nonmaskable) 中断:不能被禁止的中断。当这些中断产生时 CPU 会无条件响应 !C54x 的非可屏蔽中断有:
      • 所有的软件中断 !
      • 外部中断 NMI (DSP外部中断引脚NMI)
      • 复位中断 RS (DSP外部中断引脚RS)
    • CPU在响应 NMI中断时,将不能被任何其他中断打断 !包括复位中断 !
slide6
IFR
  • IFR (Interrupt Flag Register) 中断标志寄存器 (地址0x01)
    • 当一个可屏蔽中断产生时,IFR中相应的中断标志位会被置1,当CPU响应该中断后,该标志位才被清除 !
    • 清除中断标志还可通过:
      • 软件或硬件复位;
      • 向标志位写1;
      • 使用INTR #K指令响应该中断

C5402 DSP 的 IFR 寄存器

slide7
IMR
  • IMR (Interrupt Mask Register) 中断屏蔽寄存器 (地址0x00)
    • 当 ST1 的 INTM 位为 0 时,IMR 可用于禁止和使能可屏蔽中断,向 IMR 中的某个屏蔽位写 1 就能使能相应的可屏蔽中断 !如果写 0,则相应的中断被禁止 !

ST1:

(0x07)

C5402 DSP 的 IMR 寄存器

slide8

Y

可屏蔽中断?

N

INTM=0 ?

N

Y

N

Y

产生应答信号 IACK

INTM置1

C54x 中断响应流程

中断请求产生

Request

中断应答

Acknowledgment

执行用户编写的ISR

从ISR返回时,将先前

压入堆栈的 PC 值

弹出放入PC 中

IMR屏蔽位=1?

产生应答信号 IACK

将当前PC值压入堆栈

程序继续从被中断处

运行

slide9

PC = (IPTR<<7) + 中断号×4

… …

程序空间

4-word space

CPU 如何跳转到 ISR 去执行 ?

中断 INT0 得到应答

Acknowledgment

执行 C 函数

MyInt0isr

PMST:

(0x1D)

中断向量(表)指针

中断向量表

4-word space

B _MyInt0isr

NOP

4-word space

INT0的

中断向量

NOP

4-word space

NOP

4-word space

slide10
摘要
  • 复习C54x中断操作
  • 模拟中断的方法
  • 实验内容及步骤
simulator
Simulator 下模拟中断
  • 编写引脚文件,指示出中断产生的时间!
  • 将引脚文件和相应的中断引脚进行“连接”!
  • 装载并运行程序后,CCS会根据引脚文件中设置的时间来产生模拟的中断信号!
slide14
实验内容
  • 在C54x Device Simulator模式下,编写引脚文件模拟部中断0 (INT0) 的产生。
  • 编写程序响应 INT0 中断。
slide15
实验步骤
  • 使用CCS Setup添加“C5402 Device Simulator”配置到系统中;运行CCS,进入Simulator工作模式。
  • 编写引脚文件 intsim.txt 包含:
  • 10000 (+10000) rpt EOS
  • 使用 Tools Pin Connect 工具将该引脚文件连接到引脚 INT0。
  • 建立一个CCS项目,包含下列文件
      • main.c 使能并打开中断
      • isr.c 中断服务函数
      • vectors.asm 中断向量表
      • linker.cmd 链接器命令文件
slide17

main.c

#include <stdio.h>

#define IMR *(unsigned int *)0x0000

#define IFR *(unsigned int *)0x0001

#define ST1 *(unsigned int *)0x0007

#define PMST *(unsigned int *)0x001D

int INTtimes;

void main()

{

asm(" SSBX INTM");

PMST = 0x00A0;

IFR = 0xFFFF;

IMR = 0x0001;

asm(" RSBX INTM");

puts("interrupt enabled !");

INTtimes = 0;

while(1) {

asm(" RSBX INTM");

}

}

slide18

isr.c

#include <stdio.h>

extern int INTtimes;

interrupt void myisr()

{

printf("%d\n", ++INTtimes);

}

slide19

vectors.asm

.sect ".vectors"

.ref _myisr

.align 0x80

Unused .space 16*4*16

int0: B _myisr

NOP

NOP

NOP

int1: RETE

NOP

NOP

NOP

int2: RETE

NOP

NOP

NOP

.end

slide20

linker.cmd

-lrts.lib

-stack 0x400

-heap 0x400

MEMORY

{

PAGE 0: VECT: o=0x0080, l=0x0080

SRAM: o=0x4000, l=0x3000

PAGE 1: REVS: o=0x1000, l=0x0400

STACK: o=0x1400, l=0x0400

IDRAM: o=0x1800, l=0x2800

}

SECTIONS

{

.vectors: > VECT

.text: > SRAM

.cinit: > SRAM

.stack: > STACK

.bss: > IDRAM

.const: > IDRAM

.cio: > IDRAM

.sysmem > IDRAM

}

slide21
实验内容和步骤
  • 构建可执行模块。
  • 装载并运行后观察结果。
  • 修改程序,使其响应INT1中断。
  • 重新构建、装载并运行后观察结果。
slide22
实验报告要求
  • 中断发生时程序是如何转移到ISR的?
  • 如何编程实现对中断的响应 ?
  • 附.c程序和.asm程序(中断向量表),并添加注释,说明一些关键语句的含义。