- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
TMS320C54x系列DSP的中断机制
1 C54x中的中断机制
中断信号实质上是由硬件或者是软件驱动的信号,它能使DSP暂停正在执行的程序并进入中断服务程序(ISR)。在最典型的DSP系统中,如果A/D转换器需要送数据到DSP中,或者D/A转换器需要从DSP中取走数据,都是通过硬件中断向DSP发出请求的。
C54x系列DSP支持软件中断和硬件中断。软件中断是由指令(INTR、TRAP、RESET)触发的,硬件中断是由外围器件触发的。硬件中断实际上又分为两类:一类是由DSP的片外外设(如A/D转换器)触发的,另外一类是由DSP的片内外设(如定时器中断)触发的。硬件中断又有优先级的区分,这是为了处理同一时刻有多个硬件中断源触发中断的情况。硬件中断的种类和优先级请参看具体使用的芯片资料。
如果按照可屏蔽情况分类,中断又可分为可屏蔽中断(C54x至多支持16个)和不可屏蔽中断。可屏蔽中断受ST1寄存器中的INTM位和IMR寄存器中相应位的影响。当INTM=0时,IMR中某位为1,则开放相应的中断。其实,在C54x中硬件中断并不一定要由外围器件触发,它同样可以由指令INTR、TRAP触发,并且不受INTM的限制。有一点需要引起注意的是:指令RESET复位和硬件RS复位对IPTR和外围电路初始化是不相同的。硬件复位时IPTR总是被置为0x1FF,软件复位时则不会修改当前IPTR的值。C54x的中断处理过程分为三个阶段:
①中断请求。可以用硬件器件或者软件指令请求中断。如果请求的中断是可屏蔽中断,则IFR寄存器中相应的位被置为1,而不管中断是否会被响应。
②中断响应。对于软件中断和不可屏蔽中断,CPU是立即响应的。对于可屏蔽中断,要满足下列条件才能响应:
·优先级最高(同时出现多个中断时)
·INTM位为0
·IMR中相应位为1
CPU在取到软件向量的第一个字后会产生IACK信号,对可屏蔽中断而言,IACK会清除IFR中相应位。
③中断处理。保护特定的寄存器,执行中断服务程序,完成后恢复寄存器。保护寄存器的原则是执行中断服务程序后能正确返回并恢复原来运行程序的环境。
DSP中提供的中断是以中断向量表(VECT)的形式出现的(见表1)。中断向量表的长度为128个字节,每个中断分配为4个字节,一共有32个中断,具体的中断要看相应的芯片。C54x中断向量表的地址是由PMST寄存器中的IPTR构成高9位地址形成的,所以向量表的地址必须是128的倍数。硬件复位时,IPTR总是默认置为0x1FF,所以中断向量表地址为0xFF80。每个中断向量的地址按如下构成方法形成:PC=(IPTR)<<7+(Vector[n])<<2 (Vector[n]为中断向量号,在0~31之间),中断向量号左移两位是因为每个中断向量占用4个字节的缘故。中断向量表总是以汇编的形式出现的。
2 扩展地址模式下的中断控制
早期的DSP共有192K的空间(程序、数据和I/O空间各为64K),随着DSP处理能力越来越强,192K的空间已经不能满足需要。后来的C54x均提供了扩展地址模式,使程序空间扩展到8M。扩展模式下的中断控制有自己特殊的地方,有必要进行说明。
扩展模式下程序空间的寻址是通过寄存器PC和XPC一同进行的。PC构成低16位地址位,XPC构成高7位地址位。所以保存和恢复XPC是用户必须注意的。如果用户使用的是Far Call指令,则XPC会自动保存和恢复。但在进行中断处理的时候,只有16位的PC寄存器能够自动得到保存(这是由于考虑了非扩展模式下中断的效率问题),所以XPC必须由用户自己来保存,否则在中断返回的时候往往会跳到不同的页面(由返回前后XPC值的不同引起)造成不可预测的后果。程序如表1所示。
由于必须在长跳转之前保存XPC的值,没法使用延迟指令(如FBD),所以中断时延会增加两个周期。
再来考虑另外一种情况:设程序运行在XPC=2的页面上,如果这个时候有中断发生并得到了CPU的响应,DSP会加载PC:PC=(IPTR)<<7+(Vector[n])<<2,XPC的值不发生变化,于是中断向量的地址为:0x20000+0xPC。这就明显地说明:中断向量表必须和应用程序在同一64K的程序空间页面内。如果应用程序不是只分布在一个程序空间页面内,那应该如何处理呢?可分三种类型共四种技巧来应对这样的情况:(1.1)描述的是OVLY为任意的情况;(2.1)~(2.2)描述的是OVLY=1的情况;(3.1)描述的是OVLY=0的情况。
(1.1)有的应用中,一些程序一旦运行是不允许中断的。把不允许中断的程序部分放到扩展空间内,而把中断向量表和ISR以及允许中断的程序部分都放在XPC=0的页面。当调用扩展空间的程序时关闭中断使能,而当扩展空间程序返回到XPC=0的页面时再开中断。这样做的好处是不用关注XPC的值对中断向量寻址的影响。中断的时候也不需要保存XPC的值。调用过程如图1所示,Y表示需要关注XPC的值,N表示不需要关注XPC的值,数字表示调用顺序。
来源:维库开发网
闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗霉閿濆牊顏犵紒鈧繝鍌楁斀闁绘ɑ褰冮埀顒€顕槐鎾愁潩鏉堛劌鏋戦梺鍝勫暙閻楀嫰鍩€椤戣法绐旂€殿喕绮欓、姗€鎮欓懠鍨涘亾閸喒鏀介柨娑樺娴犙呯磼椤曞懎鐏︾€殿噮鍋婇幃鈺冪磼濡攱瀚奸梻鍌欑贰閸嬪棝宕戝☉銏″殣妞ゆ牗绋掑▍鐘炽亜閺傛娼熷ù婊勭矋閵囧嫰骞樼捄杞版勃闂佺ǹ顑冮崕鎶藉焵椤掑喚娼愭繛鍙夌矒楠炲﹪骞樼拠鑼弨婵犮垼娉涜墝闁哄閰i弻鐔兼焽閿曗偓閺嬫稓绱掗幓鎺撳仴婵﹤顭峰畷鎺戔枎閹存繂顬夐梻浣筋嚃閸犳牠鎮ラ悡搴f殾闁圭増婢橀崡鎶芥煟韫囨凹鍤欑紓宥咃躬楠炲啫饪伴崼鐔风檮婵犮垼娉涢惌鍫ュ船閻㈠憡鈷戦悹鍥ㄥ絻閸よ京绱撳鍛棦鐎规洑鍗冲浠嬵敃閵堝嫮鐟濋梻浣告惈鐞氼偊宕曢弻銉﹀亗婵炲棗绶疯ぐ鎺撳亗閹艰揪绲鹃幉鐓庘攽閻愭潙姣嗛柛銉e妿閸橀潧顪冮妶鍡橆梿鐎规洜鏁哥划锝夊籍閳ь剟骞堥妸锔剧瘈闁告侗鍣禒鈺呮⒑閸涘﹦澧柣妤冨Т椤曪綁骞橀钘変簻闂佸憡绺块崕杈╁緤閸喒鏀介柨娑樺娴滃ジ鏌涙繝鍐ㄧ伌鐎规洜顢婇妵鎰板箳閹惧瓨鐝栨俊鐐€曠换鎰版偋閸曨垰鐒垫い鎴f硶椤︼箓鏌嶇拠鏌ュ弰妤犵偞锚閻g兘宕堕懜鏁屟冣攽閿涘嫬浜奸柛濠冪墵閹兾旈崘銊︾€抽悗骞垮劚椤︿即宕愰崹顐犱簻闁瑰搫妫楁禍楣冩⒑鐎圭媭娼愰柛銊ユ健楠炲啫鈻庨幘宕囩厬婵犮垼鍩栬摫闁挎稐绶氬缁樻媴鐟欏嫬浠╅梺鍛婃煥闁帮絽鐣锋导鏉戝唨鐟滄粓宕甸弴鐐╂斀闁绘ê纾。鏌ユ煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 | More...
闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗霉閿濆牊顏犵紒鈧繝鍌楁斀闁绘ɑ褰冮埀顒€顕槐鎾愁潩鏉堛劌鏋戦梺鍝勫暙閻楀嫰鍩€椤戣法绐旂€殿喕绮欓、姗€鎮欓懠鍨涘亾閸喒鏀介柨娑樺娴犙呯磼椤曞懎鐏︾€殿噮鍋婇幃鈺冪磼濡攱瀚奸梻鍌欑贰閸嬪棝宕戝☉銏″殣妞ゆ牗绋掑▍鐘炽亜閺傛娼熷ù婊勭矋閵囧嫰骞樼捄杞版勃闂佺ǹ顑冮崕鎶藉焵椤掑喚娼愭繛鍙夌矒楠炲﹪骞樼拠鑼弨婵犮垼娉涜墝闁哄閰i弻鐔兼焽閿曗偓閺嬫稓绱掗幓鎺撳仴婵﹤顭峰畷鎺戔枎閹存繂顬夐梻浣筋嚃閸犳牠鎮ラ悡搴f殾闁圭増婢橀崡鎶芥煟韫囨凹鍤欑紓宥咃躬楠炲啫饪伴崼鐔风檮婵犮垼娉涢惌鍫ュ船閻㈠憡鈷戦悹鍥ㄥ絻閸よ京绱撳鍛棦鐎规洑鍗冲浠嬵敃閵堝嫮鐟濋梻浣告惈鐞氼偊宕曢弻銉﹀亗婵炲棗绶疯ぐ鎺撳亗閹艰揪绲鹃幉鐓庘攽閻愭潙姣嗛柛銉e妿閸橀潧顪冮妶鍡橆梿鐎规洜鏁哥划锝夊籍閳ь剟骞堥妸锔剧瘈闁告侗鍣禒鈺呮⒑閸涘﹦澧柣妤冨Т椤曪綁骞橀钘変簻闂佸憡绺块崕杈╁緤閸喒鏀介柨娑樺娴滃ジ鏌涙繝鍐ㄧ伌鐎规洜顢婇妵鎰板箳閹惧瓨鐝栨俊鐐€曠换鎰版偋閸曨垰鐒垫い鎴f硶椤︼箓鏌嶇拠鏌ュ弰妤犵偞锚閻g兘宕堕懜鏁屟冣攽閿涘嫬浜奸柛濠冪墵楠炴劖銈i崘銊х崶闁瑰吋鐣崝宥夊磻閻旇褰掓偂鎼达絾鎲奸梺鎶芥敱閸ㄥ潡寮诲☉妯锋婵鐗婇弫楣冩煟鎼达紕浠涢柣鐔叉櫊瀵顓奸崼顐n€囬梻浣告啞閹搁箖宕版惔顭戞晪闁挎繂妫涚弧鈧┑顔斤供閸樿棄鈻嶉姀銈嗏拺閻犳亽鍔屽▍鎰版煙閸戙倖瀚�
闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋涢ˇ鐢稿极閹剧粯鍋愰柛鎰紦缂冩洟姊绘担鍛婃儓婵炲眰鍔嶉幈銊︻槹鎼达絿鐒兼繝鐢靛Т閸婄敻寮ㄦ禒瀣厽婵☆垰鎼痪褔鏌熼崗鐓庡闁哄本绋撴禒锔炬嫚閹绘帩娼庨梻浣告惈閺堫剙煤閻旈鏆﹂柣鎾崇岸閺€浠嬫煙闁箑甯ㄧ憸鏂款潖閾忓湱鐭欐繛鍡樺劤閸擃參姊洪崨濠冪叆闁活厼鍊搁敃銏$瑹閳ь剙顫忓ú顏勭閹艰揪绲块悾鐢告⒑閻熸澘鏆遍梺甯到椤曪綁骞庨懞銉ヤ簻闂佺ǹ绻楅崑鎰板储娴犲鈷戦柛婵嗗閳ь剙婀遍埀顒傜懗閸パ冩優闂佹悶鍎洪崜姘舵偂濞嗘劑浜滈柡鍐e亾妞ゆ垶鐟ュ玻鍧楀箛閻楀牏鍘甸悗鐟板婢ф宕甸崶顒佺厵妞ゆ梹鍎抽崢瀛橆殽閻愯尙效妞ゃ垺宀稿畷銊╊敊瑜忛崑娑㈠煘閹达附鏅柛鏇ㄥ亗閺夘參姊虹粙鍖℃敾闁绘濞€閻涱噣骞囬鐘电槇濠殿喗锕╅崜娑㈡偩濞差亝鈷戠紒瀣濠€鐗堟叏濡ǹ濮傜€殿喗濞婇弫鍐磼濞戞艾寮伴梻濠庡亜濞诧箓宕欓悷鎼細闁规壆澧楅悡鏇㈢叓閸ャ劍鈷掗柣顓熷浮閺岋紕浠﹂崜褉妲堝Δ妤婁簷閸楁娊宕洪埀顒併亜閹烘垵鈧鎯岄崱妞尖偓鎺戭潩閿濆懍澹曢柣搴㈩問閸n噣宕戞繝鍥╁祦閹兼番鍔嶉崵宥夋煏婢诡垰鍟粻娲⒒閸屾瑨鍏岀紒顕呭灦閺佸鎮楀▓鍨灈闁绘牕銈搁悰顕€寮介鐐电杸濡炪倖甯掗ˇ閬嶅船閻㈠憡鍋℃繝濠傚暟閻忛亶鏌涢幒鎾崇瑨闁宠閰i獮姗€鎼归锛版岸姊绘笟鈧ḿ褏鎹㈤崼銉ョ9闁哄稁鍘奸悿楣冩煙闂傚鍔嶉柣鎾卞劦閺岋綁寮撮悙娴嬪亾閸︻厸鍋撳鐐
闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗霉閿濆牊顏犵紒鈧繝鍌楁斀闁绘ɑ褰冮埀顒€顕槐鎾愁潩鏉堛劌鏋戦梺鍝勫暙閻楀嫰鍩€椤戣法绐旂€殿喕绮欓、姗€鎮欓懠鍨涘亾閸喒鏀介柨娑樺娴犙呯磼椤曞懎鐏︾€殿噮鍋婇幃鈺冪磼濡攱瀚奸梻鍌欑贰閸嬪棝宕戝☉銏″殣妞ゆ牗绋掑▍鐘炽亜閺傛娼熷ù婊勭矋閵囧嫰骞樼捄杞版勃闂佺ǹ顑冮崕鎶藉焵椤掑喚娼愭繛鍙夌矒楠炲﹪骞樼拠鑼弨婵犮垼娉涜墝闁哄閰i弻鐔兼焽閿曗偓閺嬫稓绱掗幓鎺撳仴婵﹤顭峰畷鎺戔枎閹存繂顬夐梻浣筋嚃閸犳牠鎮ラ悡搴f殾闁圭増婢橀崡鎶芥煟韫囨凹鍤欑紓宥咃躬楠炲啫饪伴崼鐔风檮婵犮垼娉涢惌鍫ュ船閻㈠憡鈷戦悹鍥ㄥ絻閸よ京绱撳鍛棦鐎规洑鍗冲浠嬵敃閵堝嫮鐟濋梻浣告惈鐞氼偊宕曢弻銉﹀亗婵炲棗绶疯ぐ鎺撳亗閹艰揪绲鹃幉鐓庘攽閻愭潙姣嗛柛銉e妿閸橀潧顪冮妶鍡橆梿鐎规洜鏁哥划锝夊籍閳ь剟骞堥妸锔剧瘈闁告侗鍣禒鈺呮⒑閸涘﹦澧柣妤冨Т椤曪綁骞橀钘変簻闂佸憡绺块崕杈╁緤閸喒鏀介柨娑樺娴滃ジ鏌涙繝鍐ㄧ伌鐎规洜顢婇妵鎰板箳閹惧瓨鐝栨俊鐐€曠换鎰版偋閸曨垰鐒垫い鎴f硶椤︼箓鏌嶇拠鏌ュ弰妤犵偞锚閻g兘宕堕懜鏁屟冣攽閿涘嫬浜奸柛濠冪墱閺侇噣骞掑Δ鈧壕褰掓煕椤垵娅橀柣搴ゅ煐閵囧嫰寮捄銊︾檨闂佽 鍋撳ù鐘差儏缁犳娊鏌熼幆鐗堫棄缁炬儳缍婇弻锟犲炊閳轰絿娑㈡煕鐎n偅灏い顐g箞椤㈡鍩€椤掆偓鍗卞┑鐘崇閹虫岸鏌i幇顔煎妺闁绘挶鍎甸弻锝夊即閻愭祴鍋撻崷顓涘亾濮樼偓瀚�
闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪箻楠炴垿濮€閵堝懐鐤€濡炪倖妫佸Λ鍕償婵犲洦鈷戠憸鐗堝笒娴滀即鏌涢悩鍐叉诞鐎规洘鍨块獮姗€骞囨担鐟板厞婵$偑鍊栭崝鎴﹀垂閸︻厾鐭堟い鏇楀亾婵﹥妞藉Λ鍐ㄢ槈濞嗘ɑ顥i梻浣呵归敃銈夆€﹂悜鐣屽祦闁硅揪绠戠粈瀣亜閹烘垵鈧骞婂┑鍡╂富闁靛牆妫涙晶顒傜棯閺夎法孝闁宠绉电换婵嬪炊閵娿垺瀚藉┑鐐存尰閸╁啴宕戦幘瀵哥濞达絽鍟垮ú锕傚疾椤掑嫮鍙撻柛銉e妿閳藉鏌i幒鎴犱粵闁靛洤瀚伴獮鎺楀箣濠垫劒鎮i梻浣芥閸熶即宕伴弽顓炶摕闁哄洢鍨归柋鍥ㄧ節閸偄濮堥弫鍫ユ⒒娴e懙褰掝敄閸愵喖绀夌€广儱顦闂佸憡娲﹂崹浼村礃閳ь剟姊洪棃娑掑悍濠碘€虫搐閳绘捇濡堕崱娆戠槇闂佸啿鐨濋崑鎾绘煕閺囥劌澧版い锔垮嵆濮婃椽宕崟顓犲姽缂傚倸绉崇欢姘舵偘椤斿槈鐔煎礂閻撳孩鐎梻浣告啞濞诧箓宕㈣ぐ鎺戠劦妞ゆ巻鍋撻柨鏇ㄤ簻椤繐煤椤忓懎浠梺鍝勵槹鐎笛傜昂濠碉紕鍋戦崐鏍垂閻㈡潌鍥偨缁嬭銉ッ归敐鍛棌婵炵鍔戦弻宥堫檨闁告挾鍠栭悰顕€宕橀妸銏犵墯闂佸壊鍋呯换鍌炴嚀閸喒鏀芥い鏃傜摂濞堟梹淇婇锝庢疁鐎殿噮鍋夐妵鎰板箳閹绢垱瀚藉┑鐐舵彧缂嶁偓婵☆偄瀚板畷銉ㄣ亹閹烘挾鍘遍梺缁樓圭亸娆掑€存繝鐢靛仜濡酣宕归懞銉ょ箚闁兼悂娼х欢鐐测攽閻樻彃顏撮柛鐐垫暬濮婄粯鎷呴懞銉с€婇梺闈╃秶缁犳捇鐛箛娑欐櫢闁跨噦鎷�