1 / 22

实验 2 中断模拟实验

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

brick
Download Presentation

实验 2 中断模拟实验

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验2中断模拟实验

  2. 试验目的 • 掌握中断的含义和中断响应过程。 • 掌握用CCS simulator模拟中断的方法。 • 掌握中断应用程序的编写方法。

  3. 摘要 • 复习C54x中断操作 • 模拟中断的方法 • 实验内容及步骤

  4. 试验原理 • 中断是一些由硬件或软件产生的信号,能使CPU暂时停止执行正在执行的程序,转而执行由DSP程序开发者编写的中断服务程序(ISR—— Interrupt Service Routine) • C54x既支持软件中断也支持硬件中断 • 软件中断,是由指令 (INTR、TRAP、RESET) 产生的。 • 硬件中断: • 外部中断——通过DSP外部中断引脚接收到的片外设备产生的中断(例如ADC/DAC向DSP发出的中断) • 片上外设中断——DSP片上外设 (如定时器、串口、DMA等) 向CPU发出的中断 • 当同一CPU时钟周期内有多个硬件中断发生时,CPU会按照中断优先级对它们进行响应 ! 软件中断无优先级。

  5. 可屏蔽和非可屏蔽中断 • DSP的中断可分为两大类: • 可屏蔽 (Maskable) 中断:可以通过软件被禁止/使能的中断。被禁止掉的中断即使产生,CPU 也不会去响应 !被使能的中断,当它产生时 CPU 就会去响应它 ! • 非可屏蔽 (Nonmaskable) 中断:不能被禁止的中断。当这些中断产生时 CPU 会无条件响应 !C54x 的非可屏蔽中断有: • 所有的软件中断 ! • 外部中断 NMI (DSP外部中断引脚NMI) • 复位中断 RS (DSP外部中断引脚RS) • CPU在响应 NMI中断时,将不能被任何其他中断打断 !包括复位中断 !

  6. IFR • IFR (Interrupt Flag Register) 中断标志寄存器 (地址0x01) • 当一个可屏蔽中断产生时,IFR中相应的中断标志位会被置1,当CPU响应该中断后,该标志位才被清除 ! • 清除中断标志还可通过: • 软件或硬件复位; • 向标志位写1; • 使用INTR #K指令响应该中断 C5402 DSP 的 IFR 寄存器

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

  8. Y 可屏蔽中断? N INTM=0 ? N Y N Y 产生应答信号 IACK INTM置1 C54x 中断响应流程 中断请求产生 Request 中断应答 Acknowledgment 执行用户编写的ISR 从ISR返回时,将先前 压入堆栈的 PC 值 弹出放入PC 中 IMR屏蔽位=1? 产生应答信号 IACK 将当前PC值压入堆栈 程序继续从被中断处 运行

  9. 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

  10. 摘要 • 复习C54x中断操作 • 模拟中断的方法 • 实验内容及步骤

  11. Simulator 下模拟中断 • 编写引脚文件,指示出中断产生的时间! • 将引脚文件和相应的中断引脚进行“连接”! • 装载并运行程序后,CCS会根据引脚文件中设置的时间来产生模拟的中断信号!

  12. 引脚文件(.txt)

  13. 引脚文件和中断引脚的“连接” • Tools → Pin connect

  14. 实验内容 • 在C54x Device Simulator模式下,编写引脚文件模拟部中断0 (INT0) 的产生。 • 编写程序响应 INT0 中断。

  15. 实验步骤 • 使用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 链接器命令文件

  16. 实验环境建立

  17. 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"); } }

  18. isr.c #include <stdio.h> extern int INTtimes; interrupt void myisr() { printf("%d\n", ++INTtimes); }

  19. 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

  20. 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 }

  21. 实验内容和步骤 • 构建可执行模块。 • 装载并运行后观察结果。 • 修改程序,使其响应INT1中断。 • 重新构建、装载并运行后观察结果。

  22. 实验报告要求 • 中断发生时程序是如何转移到ISR的? • 如何编程实现对中断的响应 ? • 附.c程序和.asm程序(中断向量表),并添加注释,说明一些关键语句的含义。

More Related