欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    中断向量表配置Word下载.docx

    • 资源ID:8590473       资源大小:22.92KB        全文页数:12页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    中断向量表配置Word下载.docx

    1、 然后建立一个.asm文件,用以配置中断向量表中的中断向量,我们需要声明一些全局变量,以便其他源文件可以引用这些变量或者引用其他源文件的变量,如: *-* Global symbols defined here and exported out of this file*- .global _vectors .global _c_int00 .global _vector1 .global _vector2 ;RSVD保留 .global _vector3 .global _vector4 .global _vector5 .global _vector6 .global _vector7 .

    2、global _vector8 .global _vector9 .global _vector10 .global _vector11 .global _vector12 .global _vector13 .global _c_int14_vencint; Hookup the c_int14 ISR in main() .global _vector15因为引用了rts的_c_int00中断,即RESET中断,因此需要引入这个符号:.ref _c_int00为了把中断服务例程的地址,即中断向量插入到中断向量表中,可以定义一个宏:VEC_ENTRY .macro addr STWB0,*-

    3、B15 MVKL addr,B0 MVKH BB0 LDW*B15+,B0 NOP2.endm为了初始化中断向量表中的中断向量,可以定义一个虚拟的中断向量:_vec_dummy: B3 5 接下来就可以配置中断向量表了:.sect “.vecs”.align 1024_vectors:_vector0:VEC_ENTRY _c_int00RESET中断_vector1:VEC_ENTRY _vec_dummyNMI不可屏蔽中断_vector2:保留中断1_vector3:保留中断2_vector4:VEC_ENTRY _vec_dummy ;外部中断INT4_vector5:外部中断INT5_

    4、vector6:外部中断INT6_vector7:外部中断INT7_vector8:VEC_ENTRY _c_int08 ;EDMA控制器中断EDMAINT,对应于c_int08 ISR_vector9:VEC_ENTRY _vec_dummy;JTAGRTDX中断_vector10: VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer中断_vector11:McBSP_0_Receive中断_vector12:McBSP_1_Transmit中断_vector13:Host_Port_Host_to_DSP中断_vector14:Timer0中断_vector15:T

    5、imer1中断3. 在C程序中指定定义的中断向量表,并且启用CPU中断功能在C程序中,用CSL的IRQ模块来设置中断比较方便,在设置之前,需要外部链接上面的asm程序的中断向量表符号:extern far void vectors();/之所以为vectors,因为C编译器编译后自动改名其为_vectors引用了中断向量表之后,就可以设置中断了:IRQ_setVecs(vectors); /指向asm中定义的中断向量表 IRQ_nmiEnable(); IRQ_globalEnable(); IRQ_map(IRQ_EVT_EDMAINT, 8); /映射事件到指定的物理中断号 IRQ_res

    6、et(IRQ_EVT_EDMAINT);4启动中断源,如venc中断至此,中断服务例程c_int14_vencint就可以为venc中断服务了,其它硬件中断向量的配置同理。DSP中断设置简明教程 (2011-10-26 10:14) 分类: 未分类 一、简述本文介绍TMS320C6000系列中断设置的简明方法。通过示例定时器中断,MCBSP串口接收中断及外部中断这三种中断实现过程,介绍如何实现中断各个寄存器的配置,中断向量表书写以及中断服务函数。最后提供一个简要的示例程序可供大家下载使用。此示例在DSK6416的TI官方实验板上通过测试。由于定时器和串口工作模式较繁,因此对中断无关部分不做介绍

    7、。二、实现DSP中断需要做哪些通用工作设置允许哪些非屏蔽中断设置各个允许的非屏蔽中断的中断来源设置开启总中断设计中断向量表将中断向量表通过cmd文件挂载到指令内存提供中断处理函数如果中断向量表首地址挂载的不是0地址,那么需要设置中断向量表地址寄存器对于不同的中断源,需要做各个自己的工作,比如如果是外部中断,那么需要设置管脚极性,即由高-低产生中断抑或反之。为了照顾知识较少的读者,下面将从一个新工程出发,引导大家建立一个中断示例程序。如果您对建立工程很熟悉,可以跳过此步。三、建立新工程1.点击 Project-New,设置Project Name为intexample,Project Type为

    8、Executable,Target选择您需要的器件,在此由于本人使用的是DSK6416评估板。因此选择TMS320C64XX。2.添加标准库rts6400.lib,以便自动产生c_int00等函数。右击当前工程,选择“Add Files to Project”,选择库所在路径,一般为CCS安装自带,可参考本CCS3.1版本的路径地址:CCStudio_v3.1C6000cgtoolslibrts6400.lib如果您使用的是其他器件类型,请在lib文件夹内选择其他器件库。添加源文件,选择File-New-Source File,保存为main.c到工程路径下。在此文件内书写主函数。void m

    9、ain(void)while(1);最后通过如2步骤添加此文件到工程。3.添加寄存器别名定义头文件。在本示例中,对需要用到的寄存器定义别名后,构成global.h文件,内容在后文逐步介绍。在此可以建立一个空文件,并在main.c中包括它。i nclude global.h到此,一个DSP的新工程框架制作完毕。4.添加cmd链接文件为了实现链接时内存配置,我们需要提供一个cmd文件,为了方便,可以从官方的示例程序中拷贝一份,再加以修改。在安装目录下D:CCStudio_v3.1tutorial器件类型hello1示例下,会找到一个hello1.cmd,将其拷贝到本工程目录下,并将其改名为link

    10、.cmd,最后将其添加到工程中。由于此文件没有声明stack和heap,会产生警告,如果动态数据较多也容易溢出。因此我们最好在此文件提供stack和heap的大小,其值可根据实际情况调整,修改后,此文件内容类似为:-stack 0x1000-heap 0x1000MEMORY ISRAM : origin = 0x0, len = 0x1000000SECTIONS .vectors ISRAM .text .bss .cinit .const .far .stack .cio .sysmem至此,工程建立完毕,可以编译一遍,观察是否正常。- intexample.pjt - Debug -m

    11、ain.c D:CCStudio_v3.1C6000cgtoolsbincl6x -g -fr/intexample/Debug -d_DEBUG -mv6400 -Debug.lkf main.cLinking. -Build Complete, 0 Errors, 0 Warnings, 0 Remarks.四、定时器中断设计首先,我们先实现一个定时器中断,因为它不受外部影响,容易测试。在global.h文件中,加入控制寄存器和中断寄存器别名定义,另外为了使用定时器1,也应对其别名进行定义:/*定义控制寄存器*/extern cregister volatile unsigned int

    12、AMR; /* Address Mode Register */extern cregister volatile unsigned int CSR; /* Control Status Registerextern cregister volatile unsigned int IFR; /* Interrupt Flag Registerextern cregister volatile unsigned int ISR; /* Interrupt Set Registerextern cregister volatile unsigned int ICR; /* Interrupt Cl

    13、ear Registerextern cregister volatile unsigned int IER; /* Interrupt Enable Registerextern cregister volatile unsigned int ISTP; /* Interrupt Service Tbl Ptrextern cregister volatile unsigned int IRP; /* Interrupt Return Pointerextern cregister volatile unsigned int NRP; /* Non-maskable Int Return P

    14、tr*/extern cregister volatile unsigned int IN; /* General Purpose Input Regextern cregister volatile unsigned int OUT; /* General Purpose Output Reg */* 定义中断选择寄存器 */#define MUXH0x019C0000#define MUXL0x019C0004#define EXTPOL0x019C0008/*定义定时器1寄存器*/#define CTL10x01980000/Timer1 control register#define

    15、PRD10x01980004/Timer1 period register#define CNT10x01980008/Timer1 counter register之后,在main函数中对定时器进行初始化,在此我们使用Timer1,参数初始化函数如下:void Timer1_Init(void)*( volatile unsigned int* )CTL1= 0x00000201;/计数器功能设置*( volatile unsigned int* )PRD1= 0x1000;/计数器周期值*( volatile unsigned int* )CTL1|= 0x000000C0;/计数器清零,

    16、启动并在主函数中调用它。随后我们设置中断寄存器参数。DSP支持1个RESET中断,1个NMI(不可屏蔽中断),12个可屏蔽中断(INT4-15),它们具有优先级顺序,INT4最高,INT15最低。每个中断号都可以设置任何中断来源。在此我们选择中断INT10,即开启中断10,并设置其中断来源为定时器1,即在MUXH或MUXL中指定位上填写中断来源选择码:中断来源选择码定义如下:(此内容可以通过帮助中搜索INTSEL得到)INTSEL(Interrupt Selection Number Deion)00000bDSPINTHost port host to DSP interrupt00001b

    17、TINT0Timer 0 interrupt00010bTINT1Timer 1 interrupt00011bSD_INTEMIF SDRAM timer interrupt00100bEXT_INT4External interrupt 400101bEXT_INT5External interrupt 500110bEXT_INT6External interrupt 600111bEXT_INT7External interrupt 701000bEDMA_INTEDMA channel (0-15) interrupt01001-01011bReserved01100bXINT0Mc

    18、BSP0 transmit interrupt01101bRINT0McBSP0 receive interrupt01110bXINT1McBSP1 transmit interrupt01111bRINT1McBSP1 receive interrupt10000-11111b从中得到定时器1的中断选择码为00010。MUXH和MUXL的寄存器定义如下:(也可以通过帮助得到)MUXH位中断来源30-26INTSEL1525-21INTSEL1420-16INTSEL1314-10INTSEL129-5INTSEL114-0 INTSEL1031,15位保留,填0MUXLINTSEL9INT

    19、SEL8INTSEL7INTSEL6INTSEL54-0INTSEL4因此,我们设置MUXH的第4-0位为定时器1的中断选择码00010,其余位可以任意设置(在此可以填1)。转换为16进制后,设置如下:*( volatile unsigned int* )MUXH=0x7fff7fe2;MUXL可以不设置。开启中断到IE10,使能全局中断:IER |= 0x00000402;/ IE10=1 CSR|= 0x00000001;/ 全局中断使能以上就完成了中断参数的配置,中断启动并且可以进入了。下面是中断的处理过程。主要分为设计中断向量表和中断处理函数。我们可以从DSP CCS的示例中复制一份向

    20、量表的雏形。例如CCStudio_v3.1tutorialdsk6416hello1vectors.asm将其拷贝到本工程目录下并加入工程中。中断向量表包含了16个中断处理单元,每个单元限制必须是8条指令。如果不够8条,可以用nop填充,(但nop 4算1条语句),如果服务程序过多,那么可以制作专门的中断服务程序,此时此表只起到跳转作用,这样CPU就可以正确寻址找到正确的中断服务入口。 首先分析一下此文件。文件开始定义了一个宏,用于处理未用到的中断。unused .macro id .global unused:id:unused: b unused: nested branches to b

    21、lock interrupts nop 4 nop它的做法是让程序进入死循环,我认为这种做法未必最优,因此我建议使用直接返回的方式。返回到被中断地址,对于可屏蔽中断为b irp,因此将此宏部分替换成,注意一定要凑够8条。 b irpnop .endm这样,即使我们误开启了此中断,也会顺利返回。当然,如果我们确信的确没有开启,那么其内容是无意义的。代码的正文部分用了一系列unused n来插入此宏,起到占地的作用。由于NMI的返回与可屏蔽中断不同,它在向量表中位于RESET之下,即unused 1,我们将其删除,替换为NMI: b nrp为了实现定时器1中断的处理,我们将unused 10删除,

    22、替换为我们自己的中断跳转程序,如下:INT10:stw b0,*-b15mvkl _xint0_isr,b0mvkh _xint0_isr,b0b b0ldw *b15+,b0nop 3另外,需要和语句: .ref _c_int00 C entry point类似,添加处理程序的引用.ref _xint0_isr timer 1 interrupt handler由于中断向量表的位置需要特定指明,且应对齐到400H,在此文件中,已经定义了段名: .sect .vectors因此我们需要将此.vector代码段挂载到专门的一段指定内存区域。修改link.cmd 链接文件,加入INT区域,起点为0地址。其大小为400H,将原先的ISRAM起始点修改。并将SECTIONS中的.vector指向自己定义的内存区域。 INT origin = 0x00000000, len = 0x0000400 origin = 0x00000400, INT中断向量表设置、安装完毕。最后,设计中断服务函数,在main.c中添加:inte


    注意事项

    本文(中断向量表配置Word下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开