DSP(TMS320C6713)入门之旅三、中断的理解和使用_第1页
DSP(TMS320C6713)入门之旅三、中断的理解和使用_第2页
DSP(TMS320C6713)入门之旅三、中断的理解和使用_第3页
DSP(TMS320C6713)入门之旅三、中断的理解和使用_第4页
DSP(TMS320C6713)入门之旅三、中断的理解和使用_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习一个芯片的功能时,我的建议是先学会如何用C语言点亮一个LED灯,然后就是学习一下使用他的中断,因为在做芯片的时候,各个厂家有自己的一套自己的方法。所以使用中断的就必须了解很多概念,比如如何打开中断,如何安装自己的中断子服务程序,等等!先介绍一下什么叫中断:你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程(中断过程)。CPU执行正常任务保护现场中断发生中断服务程序恢复现场中断返回中断屏蔽下象棋-你已经想好要将军,先在脑海中记下来。-电话响-接电话-回来后恢复刚才想法-你回来继续下象棋-Boss正在训话,要求所有电话关机,你不能接电话了。非屏蔽中断-你内急

2、,即使是Boss在训话,你还是得到外面去嘘嘘。可屏蔽中断-你在闭关修炼,可以不受外界干扰所以我们在使用中断之前先得告诉CPU,我们要使用那个中断,当中断发生的时候,你的执行程序的去向(也就是中断服务子程序),最后在返回我们被中断的函数。这样就完成了我们的中断历程!TheinterruptserviceroutineforINT4includesthis7-in-struct;onextensionofthein-terruptISFP.l220h1224h122Bh1230bI234hI23hl23Chl240h1244h124Bh1240b1250h1254h125&hl25ChRESETE

3、SFPISFPforINT4忖141ISFPReservedReservedClNT4ISFP)OSOhInstrlINT5fSFP0B4hInstr2INT6iSFP0B8h(B12340INT7ISFPOSChInstr4INTBiSFP090hInstrSINT9ISFP094hInstrGINT10ISFP098hInstr7INT11ISFP_09ChInstrSINT12ISFPINT13ISFPINT14ISFPINT15ISFPArldi+iriinajICrTPnrAuultlOnailorrrTOIINI4AdditionalISFPforlNT4STOOOh020h040

4、h060h080hProgrammemory看看6713执行中断的流程:一、使能了全局中断和子中断,那么CPU每执行一条指令之前就去查询一下有没有中断被置位,如果有产生的,那么CPU就要跳转!二、软件把CPU内部的寄存器AoA15,BoB15,等等这些寄存器的值推入堆栈保存,把当前PC寄存器的值放入IRP寄存器中以备中断返回能找到当前被打断的位置(保存现场,中断函数前面得加interrupt关键字)三、CPU的PC指针读出中断向量表的地址,也就是把(ISTP寄存器的值+子中断向量偏移量)装入PC寄存器,这样就执行跳转。四、在中断向量表里一般有就用跳转指令,这样就可以跳转到我们用C语言编写的中断

5、服务子程序中。由于我们在一般的中断服务子程序函数前面加入了interrupt关键字。那么编译器就会在函数返回的语句改成BIRP,这样就把IRP的值送给PC寄存器。(中断服务)五、CPU在执行跳转之前会把堆栈中以前保存的那些值出栈到自己的相应的寄存器中。(恢复现场)OK,明白了中断执行的一个大概流程,我们就来看看6713或者说是C6ooo系列的中断如何安装和使用(以上一章的timer1中断为实例)。由于本来6713有32个中断源,也就是中断CPU的信号可以来自这个32信号源。但是DSP却安排了在同一时刻置最多服务16个中断号,但是有一个reset,nmi和2个保留的,这些我们不能使用其他的中断源

6、占用,所以我们外设能占用的中断号为415。那么怎么办呢,TI在次想了一个办法,就是使用多路选择开关来决定哪个中断源连接到我们的某一中断号上。MUXL和MUXH两个寄存器,就是这个选择开关!Tabid27.DSPIntarruptETablg2B.InteiTuptSelectorOSPIMTERAUPTI4UM9ERINTERRUPTSELECTORCONTROL.nEGilSTERDEFAULTSELECTOAVALUE诅INARV;DEFAULTINTERRUPTEVENTINTCORESiTTINTD1:TC2R-Se/edINTC4MUXL;i:D|M1MGPI?+74rINT6MUX

7、L;9:5|DC1Q1GPINT6fMlUK中盘疋MHOGPlirMdXLi:l6:OCdlTGPTTF?/UK!42S:21;01OMED?.tAJNTiHT_C6F/JXL|3j-26:D1001EFeIUCTDMAINT10yUXH4:DCW11SDIMTMUXHjS:ED1010EFURTDXPXiMTi2MLJXH;14:ia|D1D11EMURTDXTXiNT_13OBlMSPIMTi用UXHT器1匸:i0001TINTOT16MLrXH;2O:5iB|CiM1CTINT1INTERRUPTSELECTORVALUEjBIMAlRY)INTERRUPTEVENTMODULECOCf

8、CDSPiMTHPICOD01UNTOTimfirGTNT1(2nrar7)00011呂DINTEb/IFD01MGPIMTtGPIOD0101GPIMT5-GPIO03110GPiMTS-GPiO0D111GPIMT7TGPlOC1CO2EDMAINTEDMAD1D01EWUDTDMAEmuLSliDT&1&10EMJRTDXPXEmu也lifin01011EM:JRTDXTXEhiuLd!i-*i01100KINT0McSSPO011D1F:MTC1VcBSPOamoKSNT1McBSPIpdu1RIMT1McSSP!10l-MGPINTOGPiOWMlRffMrvS日wtiaAsiarr

9、fd10D11AEMnc口畑gAetMn*4d10101ABtSrrtd1011DISCIHTC-Isen1D111ISCINTiI2C1iiacoRaMrdllOCdAeswrtd11Q1DRersar.-sd1W11mooAXiNTDMtASPO11101ARINTOMeASPO11110AXlNTlMtASPI11111ARiNTIMtASP1由于我们使用的是Timer1中断,从图中可以看出15号中断号默认为Timer1的中断服务号,但是我这儿想用14号来服务我们的中断,这样以后大家想用其他的就依样画葫芦了。那么我这儿就得把MUXH26:21=OXO2;这样就把14号中断和我们的time

10、r1中断源接上了。当定时器到时时就CPU就会跳转到中断向量表的14号向量那儿。接下来我就来安装和使用定时器中断吧。1、安装中断向量表,一般用汇编编写:取名为vector.asm*Globalsymbolsdefinedhereandexportedoutofthisfile*.global_vectors/全局标号,可以在别处使用.global_c_int00.global_vector1.global_vector2.global_vector3.global_vector4.global_vector5.global_vector6.global_vector7.global_vector

11、8.global_vector9.global_vector10.global_vector11.global_vector12.global_vector13.global_TimerHandler;HookuptheTimerHandlerISRinmain()汇编中的C语言函数要加_.global_vector15*Globalsymbolsreferencedinthisfilebutdefinedsomewhereelse.Rememberthatyourinterruptserviceroutinesneedtobereferencedhere.*.ref_c_intoo/相当于e

12、xtern,在这里引用,在别处定义*Thisisamacrothatinstantiatesoneentryintheinterruptservicetable.*VEC_ENTRY.macroaddr/定义中断向量入口地址STWBo,*B15;保存Bo内容,中断产生后执行的第一条指令;把地址装入Bo;跳转至Bo中存储的地址MVKLaddr,B0;MVKHaddr,BoBBoLDW*B15+,B0;恢复B0内容;由于C6000流水线的原因,跳转后仍然可以执行多条指令NOP2NOPNOP.endm*Thisisadummyinterruptserviceroutineusedtoinitiali

13、zetheIST.*_vec_dummy:未定义中断服务程序BB3;其他没有定义的中断跳转至B3存储的地址NOP5*Thisistheactualinterruptservicetable(IST).Itisproperlyalignedandislocatedinthesubsection.text:vecs.Thismeansifyoudontexplicitlyspecifythissectioninyourlinkercommandfile,itwilldefaultandlinkintothe.textsection.RemembertosettheISTPregistertopoi

14、nttothistable.*.sect.text:vecs定义段.align1024;1024字节对边界对齐_vectors:_vectoro:VEC_ENTRY_c_intoo;RESET跳转到_c_intoo,_c_intoo是c语言程序的入口_vector1:VEC_ENTRY_vec_dummy;NMI_vector2:VEC_ENTRY_vec_dummy;RSVD_vector3:VEC_ENTRY_vec_dummy;所有未定义中断均跳转到同一地址_vector4:VEC_ENTRY_vec_dummy_vector5:VEC_ENTRY_vec_dummy_vector6:V

15、EC_ENTRY_vec_dummy_vector7:VEC_ENTRY_vec_dummy_vector8:VEC_ENTRY_vec_dummy_vector9:VEC_ENTRY_vec_dummy_vector10:VEC_ENTRY_vec_dummy_vector11:VEC_ENTRY_vec_dummy_vector12:VEC_ENTRY_vec_dummy_vector13:VEC_ENTRY_vec_dummy_vector14:VEC_ENTRY_TimerHandler;HookuptheTimerHandlerISRinmain()定时中断中断向量_vector15:VEC_ENTRY_vec_dummy2、初始化中断:先关闭全局中断(即使有新中断也不相应),然后在清除所有中断号的中断标志位,把timeri中断映射到14号中断,设置14号中断为使能,安装中断向量表,最后打开全局中断。TimerEventId=TIMER_getEventId(Htimer);/取得定时事件ID返回为0X02IRQ_setVecs(vectors);量IRQ_globalEnable();厶匕能IRQ_nmiEnable();IRQ_map(TimerEventId,14);14M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论