微波EDA网,见证研发工程师的成长! 2025婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘﹢寮婚悢铏圭<闁靛繒濮甸悘宥夋⒑缁嬪潡顎楁い锔诲灦閳ワ箓宕稿Δ浣告疂闂傚倸鐗婄粙鎴︼綖瀹€鈧槐鎾存媴閸濆嫮褰欓梺鎼炲劀閸滀礁鏅i梻浣筋嚙鐎涒晝绮欓幒鏇熸噷闂佽绻愬ù姘跺储婵傚憡绠掓繝鐢靛Т閿曘倝骞婃惔銏㈩洸闁诡垼鐏旀惔銊ョ倞鐟滄繈鐓鈧埞鎴﹀灳瀹曞洤鐓熼悗瑙勬礈閸犳牠銆佸鈧幃娆忣啅椤旈敮鍋撻幘顔解拻闁稿本鐟чˇ锕傛煙鐠囇呯瘈闁诡喚鍏樻俊鐤槼鐎规洖寮堕幈銊ヮ渻鐠囪弓澹曢柣搴㈩問閸犳牠鈥﹂悜钘夋瀬闁归偊鍘肩欢鐐测攽閻樻彃顏撮柛姘嚇濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐姝岀亱濡炪倖鎸鹃崐锝呪槈閵忕姷顦板銈嗘尵婵兘鏁嶅⿰鍫熲拺缂備焦锚婵箓鏌涢幘瀵告噰鐎规洘绻堟俊鍫曞幢濞嗘埈鍟庣紓浣鸿檸閸欏啴藟閹捐泛濮柍褜鍓熼幃妤€鈻撻崹顔界亪濡炪値鍘鹃崗姗€鐛崘顔碱潊闁靛牆鎳庣粣娑欑節閻㈤潧孝閻庢凹鍠涢崐鎾⒒閸屾艾鈧绮堟笟鈧獮澶愭晸閻樿尙顔囬梺绯曞墲缁嬫垵顔忓┑鍥ヤ簻闁哄啫鍊婚幗鍌炴煕閻旈攱鍣界紒杈ㄦ崌瀹曟帒顫濋钘変壕闁归棿绀佺壕褰掓煟閹达絽袚闁搞倕瀚伴弻銈夊箹娴h閿梺鎼炲妽濮婂綊濡甸崟顖氱闁告鍋熸禒濂告⒑閹肩偛濡奸柛濠傛健瀵鈽夐姀鈺傛櫇闂佹寧绻傚Λ娑⑺囬妷鈺傗拺闁芥ê顦弳鐔兼煕閻樺磭澧电€殿喖顭峰鎾偄閾忚鍟庨梻浣虹帛閸旓箓宕滃鑸靛仧闁哄洢鍨洪埛鎴犵磼鐎n偒鍎ラ柛搴$箲娣囧﹪顢曢敐鍥╃杽閻庢鍠涢褔鍩ユ径濠庢僵妞ゆ劧绲芥刊浼存⒒娴e憡鍟為柟绋挎閸┾偓妞ゆ巻鍋撻崡閬嶆煕椤愶絿绠ユ繛鎾愁煼閺屾洟宕煎┑鍥ф畻闂佺粯绋掔划鎾诲蓟閻旂厧绀勯柕鍫濇椤忥拷04闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙盯姊虹紒妯哄闁稿簺鍊濆畷鎴犫偓锝庡枟閻撶喐淇婇婵嗗惞婵犫偓娴犲鐓冪憸婊堝礂濞戞碍顐芥慨姗嗗墻閸ゆ洟鏌熺紒銏犳灈妞ゎ偄鎳橀弻宥夊煛娴e憡娈查梺缁樼箖濞茬喎顫忕紒妯诲闁芥ê锛嶉幘缁樼叆婵﹩鍘规禍婊堟煥閺冨浂鍤欓柡瀣ㄥ€楃槐鎺撴綇閵婏富妫冮悗娈垮枟閹歌櫕鎱ㄩ埀顒勬煃闁款垰浜鹃梺褰掝棑缁垳鎹㈠☉娆愮秶闁告挆鍛呮艾鈹戦悙鍙夊珔缂佹彃娼″顐︻敊鐏忔牗顫嶉梺闈涢獜缁辨洟宕㈤柆宥嗏拺闁告繂瀚弳濠囨煕鐎n偅灏扮紒缁樼洴閹崇娀顢楅埀顒勫几濞戙垺鐓熸繛鎴濆船濞呭秶鈧鍠曠划娆撱€佸Ο娆炬Ъ闂佸搫鎳忕换鍫濐潖濞差亝顥堟繛鎴炶壘椤e搫鈹戦悙棰濆殝缂佽尪娉曢崚鎺楊敇閻旈绐炴繝鐢靛Т鐎涒晝鈧潧鐭傚娲濞戞艾顣哄┑鈽嗗亝缁嬫帡寮查崼鏇熺劶鐎广儱妫涢崢閬嶆煟鎼搭垳绉甸柛鎾寸懄缁傛帡鏌嗗鍡欏幍濡炪倖娲栧Λ娑氬姬閳ь剚绻濈喊澶岀?闁稿繑锕㈠畷娲晸閻樿尙锛滃┑鐘诧工閸燁偆绮诲ú顏呪拻闁稿本鐟чˇ锕傛煙绾板崬浜滈悡銈夋煏婵炵偓娅呯痪鍓х帛缁绘盯骞嬪▎蹇曚患闂佺粯甯掗悘姘跺Φ閸曨垰绠抽柛鈩冦仦婢规洘绻濋悽闈浶涢柛瀣崌濮婃椽顢楅埀顒傜矓閹绢喗鍊块柛顭戝亖娴滄粓鏌熼崫鍕ラ柛蹇撶焸閺屾盯鎮㈤崫銉ュ绩闂佸搫鐬奸崰鏍х暦濞嗘挸围闁糕剝顨忔导锟�22闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙盯姊虹紒妯哄闁稿簺鍊濆畷鎴犫偓锝庡枟閻撶喐淇婇婵嗗惞婵犫偓娴犲鐓冪憸婊堝礂濞戞碍顐芥慨姗嗗墻閸ゆ洟鏌熺紒銏犳灈妞ゎ偄鎳橀弻宥夊煛娴e憡娈查梺缁樼箖閻楃姴顫忕紒妯肩懝闁逞屽墴閸┾偓妞ゆ帒鍊告禒婊堟煠濞茶鐏¢柡鍛埣楠炲秹顢欓崜褝绱叉俊鐐€栧ú鏍涘☉銏犵濞寸厧鐡ㄩ幊姘舵煛瀹ュ海浜圭憸鐗堝笚閺呮煡鏌涢銈呮珡濞寸姭鏅涢—鍐Χ閸℃ǚ鎷瑰┑鐐跺皺閸犲酣锝炶箛鎾佹椽顢旈崨顓濈敾闂備浇顫夐鏍窗濡ゅ懎绠熷┑鍌氭啞閳锋垿鏌ゆ慨鎰偓鏇㈠几閸岀偞鐓曢幖杈剧稻閺嗩剚顨ラ悙鎻掓殭妞ゎ偅绮撻崺鈧い鎺戝閺勩儵鏌ㄩ悢鍝勑㈢紒鈧崘鈹夸簻闊洦鎸婚敍鏃傜磼鏉堛劎鍙€婵﹦绮幏鍛存惞閻熸壆顐奸梻浣藉吹閸犲棝宕归挊澶屾殾闁硅揪绠戠粻鑽ょ磽娴h疮缂氶柛姗€浜跺娲濞淬劌缍婂畷鏇㈠箮閽樺妲梺鎸庣箓濞茬娀宕戦幘鏂ユ灁闁割煈鍠楅悘鍫濐渻閵堝骸寮柡鈧潏銊р攳濠电姴娲ょ粻鐟懊归敐鍛喐闁告ɑ鎮傚铏圭矙閹稿孩鎷遍梺娲诲弾閸犳岸鎳炴潏銊ь浄閻庯綆鍋€閹风粯绻涙潏鍓у埌闁硅櫕鐟ㄩ妵鎰板箳閹存繄褰夋俊鐐€栫敮鎺楀磹婵犳碍鍎楁繛鍡樻尰閻撴瑩寮堕崼鐔峰姢闁伙附绮撻弻鈩冩媴缁嬪簱鍋撻崸妤€钃熼柕濞炬櫆閸嬪棝鏌涚仦鍓р槈妞ゅ骏鎷� 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙盯姊虹紒妯哄闁稿簺鍊濆畷鎴犫偓锝庡枟閻撶喐淇婇婵嗗惞婵犫偓娴犲鐓冪憸婊堝礂濞戞碍顐芥慨姗嗗墻閸ゆ洟鏌熺紒銏犳灈妞ゎ偄鎳橀弻锝呂熼懡銈呯仼闂佹悶鍎崝搴ㄥ储闁秵鐓熼煫鍥ㄦ礀娴犳粌顭胯缁瑩骞冮敓鐙€鏁嶆慨妯垮亹閸炵敻鏌i悢鍝ユ噧閻庢凹鍘剧划鍫ュ焵椤掑嫭鈷戦悗鍦濞兼劙鏌涢妸銉﹀仴闁靛棔绀侀埢搴ㄥ箣閻樼绱查梻浣筋潐閸庤櫕鏅舵惔锝囩幓婵°倕鎳忛埛鎺懨归敐鍛暈闁哥喓鍋為妵鍕敇閻愭惌妫﹂悗瑙勬礃閿曘垽寮幇鏉垮耿婵炲棗鑻禍鐐箾瀹割喕绨奸柛濠傜仛椤ㄣ儵鎮欓懠顑胯檸闂佸憡姊圭喊宥囨崲濞戙垺鍤戞い鎺嗗亾闁宠鐗忛埀顒冾潐濞叉﹢宕归崸妤冨祦婵せ鍋撻柟铏矒濡啫鈽夊▎鎴斿亾椤撱垺鈷掑ù锝呮啞閸熺偞绻涚拠褏鐣电€规洘绮岄埥澶愬閳╁啯鐝繝鐢靛仦閸垶宕瑰ú顏勭厱闁硅揪闄勯悡鏇熺箾閹寸們姘舵儑鐎n偆绠鹃柛顐ゅ枑缁€鈧梺瀹狀潐閸ㄥ潡骞冨▎鎴炲珰鐟滄垿宕ラ锔解拺閻犲洠鈧櫕鐏嗛梺鍛婎殕婵炲﹪濡存担鍓叉僵閻犻缚娅i崝锕€顪冮妶鍡楀潑闁稿鎹囬弻锝夋晲閸パ冨箣閻庤娲栭妶绋款嚕閹绢喖惟闁挎棁濮ら悵婊勭節閻㈤潧袨闁搞劎鍘ч埢鏂库槈閵忊晜鏅為梺绯曞墲閵囨盯寮稿澶嬪€堕柣鎰礋閹烘缁╁ù鐘差儐閻撶喐淇婇婵囶仩濞寸姵鐩弻锟犲幢韫囨梹鐝旈梺瀹狀潐閸ㄥ潡銆佸▎鎾村殟闁靛鍎遍弨顓熶繆閵堝洤啸闁稿鐩弫鍐Ψ閵夘喖娈梺鍛婃处閸ㄦ壆绮诲☉娆嶄簻闁圭儤鍨垫禍鎵磼闁秳鎲炬慨濠勭帛閹峰懐绮电€n偆绉烽柣搴ゎ潐濞叉﹢鏁冮姀銈冣偓浣割潩閹颁焦鈻岄梻浣告惈鐞氼偊宕濋幋鐐扮箚闁割偅娲栭獮銏ゆ煛閸モ晛啸闁伙綁绠栧缁樼瑹閳ь剙岣胯閹囧幢濞嗗苯浜炬慨妯煎帶閻忥妇鈧娲橀〃鍛存偩濠靛绀嬫い鎺戝€搁獮鍫熺節閻㈤潧浠滄俊顐n殘閹广垽骞嬩綅婢舵劕顫呴柍鈺佸暙瀵寧绻濋悽闈浶㈤柟鍐茬箻椤㈡棃鎮╅悽鐢碉紲闁哄鐗勯崝宀€绮幒妤佹嚉闁挎繂顦伴悡鐘测攽椤旇棄濮囬柍褜鍏欓崐鏇炲祫濡炪倖甯掔€氼參鍩涢幒鎳ㄥ綊鏁愰崨顔兼畼閻熸粎澧楃敮妤呭疾濠靛鐓忛柛顐g箖鐎氬懘鏌ら弶鎸庡仴婵﹥妞介、妤呭焵椤掑倻鐭撻柟缁㈠枟閸婂潡鏌涢…鎴濅簴濞存粍绮撻弻鐔煎传閸曨厜銉╂煕韫囨挾鐒搁柡灞剧洴閹垽宕妷銉ョ哗闂備礁鎼惉濂稿窗閺嵮呮殾婵炲棙鎸稿洿闂佺硶鍓濋〃蹇斿閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮诲☉妯锋婵鐗婇弫楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鏁愭径濠勵吅闂佹寧绻傚Λ顓炍涢崟顖涒拺闁告繂瀚烽崕搴g磼閼搁潧鍝虹€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱缂傚倷绶¢崳顕€宕归幎钘夌闁靛繒濮Σ鍫ユ煏韫囨洖啸妞ゆ挸鎼埞鎴︽倷閸欏妫炵紓浣虹帛鐢绮嬮幒鎾卞亝闁告劏鏂侀幏铏圭磽娴e壊鍎愭い鎴炵懇瀹曟洖顓兼径瀣幈婵犵數濮撮崯鎵不閻愮鍋撳▓鍨灈妞ゎ厼鍢查锝夊箻椤旇棄浜滈梺鎯х箺椤曟牠宕惔銊︾厽闁绘柨鎽滈惌濠勭磼婢跺本鍤€闁伙絿鍏橀、娑㈡倻閸℃ɑ娅囬梻浣瑰濡礁螞閸曨垰鐒垫い鎺戝暞绾箖鏌嶇憴鍕伌闁诡喒鏅犲畷锝嗗緞婵犲孩袩闂傚倷鐒︽繛濠囧绩闁秴鍨傞柛褎顨呴拑鐔兼煟閺冨洦顏犻柣顓熺懇閺岀喓绮欓崹顕呭妷閻庤娲栫壕顓犳閹惧瓨濯撮柛婵嗗珔閿濆鐓欑紒瀣儥閻撶厧鈹戦敍鍕毈鐎规洜鍠栭、娑樷槈濞嗘劗褰嗛梻浣藉吹婵潙煤閳哄啩鐒婃繛鍡樺姉椤╅攱銇勯弽銊х煂缁炬崘妫勯妴鎺戭潩椤掍焦鎮欓梺鍝勵儐缁嬫帡濡甸崟顖f晣闁绘ɑ褰冮獮瀣⒑闂堟稒顥欑紒鈧笟鈧崺銉﹀緞閹邦剦娼婇梺鐐藉劜閺嬪ジ宕戦幘缁樺€婚柤鎭掑劚閳ь剛鏁婚弻锝夊閵忊槅浠梺鑽ゅ枛閸嬪﹪宕甸弴銏$厵闁诡垱婢樿闂佹娊鏀辩敮鎺楁箒闂佹寧绻傞悧濠囶敂閻樼粯鍋ㄦい鏍ㄧ〒閳洜绱掔紒妯兼创鐎规洩绲惧鍕沪鐟欙絾瀚查梺璇叉唉椤煤濮椻偓瀹曟繂鈻庤箛鏇熸闂佺粯鍨归悺鏃堝极閸ャ劎绠鹃柟瀵镐紳閸忚偐鐝堕柡鍥╁亹閺€鑺ャ亜閺冨倻娉㈢紓鍌涘哺閺屾稓鈧綆鍋呯亸鐢告煃瑜滈崜姘舵偄椤掑嫬绠柨鐕傛嫹
首页 > 硬件设计 > 嵌入式设计 > LPC2292的伪中断与伪中断处理

LPC2292的伪中断与伪中断处理

时间:03-25 来源:单片机与嵌入式系统应用 点击:
引言
  工业以太网具有比现场总线更好的性能,正处于不断发展完善当中,因此研制基于工业以太网的设备具有很好的市场前景。本文设计的嵌入式控制器采用了基于ARM7TDMIS的微控制器LPC2292[12]。控制器的底层与现场总线CAN相连,向上与Ethernet/IP工业以太网相连。为提高可靠性,应用了冗余控制技术,备有一个一模一样的冗余控制器。通过LVDS接口,控制器与冗余控制器相连,并相互在线监测。同时,本文采用了嵌入式实时操作系统μC/OS-II[3]。
  嵌入式控制器采用高性能的32位单片机LPC2292。但是LPC2292在正常工作中存在产生伪中断的可能性。如果不进行正确处理的话,可能产生严重的后果。本文对此进行了全面的分析,针对不同的情况,灵活地进行了处理;最后彻底解决了伪中断问题,消除了嵌入式控制器中的隐患。
  本文用到的LPC2292的资源有看门狗、定时器TIMIER0、UART0、UART1、CAN1,通过外部总线与以太网控制器芯片RTL8019AS相连。把CAN1的接收数据Rx设为快中断,它是唯一的快中断。UART1与LVDS芯片相连,UART0通过RS232转换芯片与外部设备进行通信。
1 伪中断产生的原因
  由于异步中断处理,伪中断可能出现在基于ARM7TDMIS 的微控制器LPC2292中。如果不进行正确处理,有可能引起严重的后果。中断处理的异步特性来源于内核和向量中断控制器(VIC)的相互作用。如果在内核中检测到中断和内核真正开始处理中断的过程中VIC 的状态发生改变,则产生中断的异步特性[4]。
  应用中可能经过以下步骤:
  ① VIC 判断是否有IRQ 中断。若有,则向内核发送IRQ 信号。
  ② 内核保存IRQ 状态。
  ③ 执行流水线的多个周期的处理。
  ④ 内核从VIC 中装入IRQ 地址。
  如果在执行到步骤③时向量中断控制器的状态有所改变,那么就要发生伪中断。所以,在以下两种情况下会发生伪中断。
  ◆ 在步骤③时执行了关中断指令。
  ◆ 向向量中断控制器发送IRQ信号的中断的中断标志丢失。当UART0/UART1的RDA/CTI中断允许时就可能发生这种情况[5]。
  进入伪中断时,VIC 不能清楚地识别产生中断请求的中断,最后只能返回到VicDefVectAddr (0xFFFFF034)默认中断进行处理。因此,如果不正确处理伪中断,就可能导致严重的后果。
2 伪中断的处理
  本控制器中,可能出现伪中断的地方是:关中断、喂看门狗、UART0通信和UART1通信。本文的设计思路是:尽量避免产生伪中断;实在避不开的话,则写好相应的处理程序。
2.1 关中断指令的处理
  μC/OS-II中的关中断指令OS_ENTER_CRITICAL()不采用直接关中断,而是先进入管理模式中,设置好寄存器SPSR,退出时关掉IRQ中断。这样就消除了由关中断而引起伪中断的可能性。
2.2 看门狗的处理
  喂看门狗时必须先关闭IRQ和FIQ,否则可能发生意外的复位,导致控制器不能工作。在周期性的时钟节拍中断程序中第一件事就是喂看门狗。如果在进入时钟节拍中断时IRQ已关闭,就可避免伪中断的出现。当然,在喂狗指令前必须先关闭FIQ,喂狗指令后再打开FIQ。关闭FIQ是不会引起伪中断的[1]。
2.3 UART0和UART1的处理
  在UART0中(UART1同理),当UART0 Rx FIFO到达寄存器U0FCR7∶6 所定义的触发点(比如接收4个字符)时,发生RDA 中断。当UART0 Rx FIFO 的深度低于触发点时,RDA 中断标志被清除。
  当UART0 Rx FIFO 包含至少1 个字符,且在接收3.5~4.5 字符的时间内没有发生UART0 Rx FIFO 动作时,产生CTI中断。当UART0 Rx FIFO 的任何动作(读或写UART0 RSR)都将清除CTI中断标志。
  CTI伪中断是这样发生的:比如UART0 Rx FIFO已接收2字符,且超过了3.5~4.5 字符的时间,发生CTI中断;但是这时又有字符进来,于是CTI中断标志被清除。向量中断控制器无法识别是谁产生了中断,伪中断就发生了。
  RDA伪中断是这样发生的:以接收4字符发生RDA中断为例,比如UART0 Rx FIFO已接收3字符,且超过了3.5~4.5 字符的时间,发生CTI中断。在系统正确处理CTI中断时,恰好有一个字符进来,使得UART0 Rx FIFO中的字符数正好为4,于是发生RDA中断。但是由于先处理CTI中断,CTI中断程序先读取了其中的字符,使UART0 Rx FIFO内的字符数小于4,因此RDA中断标志就被清除了。等到系统处理RDA中断时,伪中断就发生了。
  可以看出,CTI中断的存在是产生UART0和UART1伪中断的罪魁祸首。UART1与LVDS接口相连,用于控制器和冗余控制器的在线互相监测。采用每次只发一个字符的方法,使得CTI中断不可能发生,这样就彻底消除了UART1产生伪中断的可能性。
  本控制器只在UART0中断中存在产生伪中断的可能性。发生伪中断时,系统会把默认中断地址寄存器VICDefVectAddr中的地址拷贝到向量地址寄存器VICVectAddr中,系统执行该地址处的程序。所以,要编写相应的处理伪中断程序,把其首地址放入VICDefVectAddr中。在处理伪中断的程序中,要尽快读出UART0 Rx FIFO中的字符,以免丢失[5]。
参考文献
[1] NXP Semiconductors. LPC2292 USER MANUAL, 2004.
[2] NXP Semiconductors. LPC2292 ERRATA SHEET, 2006.
[3] Labrosse Jean J. 嵌入式实时操作系统μC/OS-II[M]. 邵贝贝,等译. 北京:北京航空航天大学出版社, 2003.
[4] 广州周立功单片机发展有限公司. PHILIPS 单片16/32 位微控制器--LPC2292/LPC2294,2005.
[5] NXP Semiconductors. Handling of spurious interrupts in the LPC2000, 2006.
张斌(硕士研究生),主要研究方向为单片机与嵌入式控制系统。
灏勯涓撲笟鍩硅鏁欑▼鎺ㄨ崘

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top