中斷是程式定義事件,通過中斷編號識別。中斷發生在中斷條件為真時。中斷不同於其他錯誤,前者與特定訊息號位置無直接關係(不同步)。中斷會導致正常程式執行過程暫停,跳過控制,進入軟中斷程式。
即使機械臂可快速識別中斷事件(僅因硬體速度延遲),但也只會在特定程式位置才會作出反應,即呼叫相應的軟中斷程式,其中特定位置如下所示:
這通常會導致在識別出中斷後要延遲2ms到30ms才能作出反應,具體延時取決於中斷時所進行的運動型別。
可禁用和啟用中斷。若禁用中斷,則可將發生的所有中斷列入等待佇列,到再次啟用中斷前都不會再出現。注意中斷佇列可能包含不止一起待中斷事件。使列隊的中斷按fifo順序(先進先出)發生。在軟中斷程式執行期間通常禁用中斷。
按步驟執行期間,在程式停止的情況下,不處理任何中斷。停止時將捨棄佇列中的所有中斷,同時也不會處理停止時發生的任何中斷,但安全中斷例外。
任意一次確定的最高中斷次數限於每個程式任務100次。
賦予每次中斷乙個中斷識別號。通過建立變數(資料型別intnum)並與軟中斷程式相連,獲取該識別號。
隨用可用中斷識別號(變數)發出中斷命令,也就是明確中斷原因。原因可能是如下任一事件:
下達中斷命令的同時,會自動啟用中斷,但會臨時禁用。在兩種情況下會發生這種情況:
連線中斷於軟中斷程式
connect
連線變數(中斷識別號)與軟中斷程式
下達中斷指令
isignaldi
中斷數碼訊號輸入訊號
isignaldo
中斷數碼訊號輸出訊號
isignalgi
中斷一組數碼訊號輸入訊號
isignalgo
中斷一組數碼訊號輸出訊號
isignalai
中斷模擬訊號輸入訊號
isignalao
中斷模擬訊號輸出訊號
itimer
定時中斷
triggint
固定位置中斷(運動(motion)拾取列表)
ipers
變更永久資料物件時中斷
ierror
出現錯誤時下達中斷指令並啟用中斷
irmqmessage i
rapid語言訊息佇列收到指定資料型別時中斷
取消中斷
idelete
取消(刪除)中斷
啟用/禁用中斷
isleep
使個別中斷失效
iwatch
使個別中斷生效
idisable
禁用所有中斷
ienable
啟用所有中斷
中斷資料
gettrapdata
用於軟中斷程式,以獲取導致軟中斷程式被執行的中斷的所有資訊。
readerrdata
用於軟中斷程式,以獲取導致軟中斷程式被執行的錯誤、狀態變化或警告的數值資訊(域、型別和編號)。
中斷的資料型別
intnum
確定中斷的識別號。
trapdata
包含導致當前軟中斷程式被執行的中斷資料。
errtype
指定錯誤型別(嚴重性)
errdomain
出現錯誤時下達中斷指令並啟用中斷。
errdomain
指定錯誤域。
某些指令(如itimer和isignaldi)可與安全中斷結合用。安全中斷是指停止或按步驟執行期間發生時被列入等待佇列的所有中斷。在啟動持續執行過程時,按fifo順序盡快處理所有列入等待佇列的中斷。另外,停止時列隊的中斷也要予以處理。指令isleep不能與安全中斷結合用。
對中斷的定義可幫助系統了解此中斷。定義將明確中斷條件,啟用並啟用中斷。
例子:var intnum sig1int;
isignaldi di1, high, sig1int;
但啟用的中斷也可能失效,當然反過來也有可能。
在失效期間,無軟中斷執行的情況下,可捨棄產生的任何指定型別的中斷。
例子:! deactivate
isleep sig1int;
! activate
iwatch sig1int;
已啟用的中斷也可能被禁用,反過來也有可能。
在禁用期間,將產生的所有指定型別的中斷列入等待佇列,待再次啟用中斷時,使其首先出現。
例子:! disable
idisable sig1int;
1 enable
ienable sig1int;
刪除中斷也就意味著取消其定義。沒有必要直接取消中斷定義,但只有當前乙個中斷定義被取消後才能將新出現的中斷定義為中斷變數。
例子:idelete sig1int;
軟中斷程式提供了一種中斷處理方式。可用connect指令將軟中斷程式與特定中斷相連。發生中斷時,立即將控制符傳到相應的軟中斷程式(若有)。若此時沒有任何可連線的軟中斷程式,則將中斷當做乙個嚴重錯誤(即,導致程式執行立即終止)來處理。
例子:var intnum empty;
var intnum full;
! 定義中斷識別號
proc main()
! 例行程式main
! connect trap routines
connect empty with etrap;
connect full with ftrap;
! 將中斷(empty、full)與軟中斷程式(etrap、ftrap)相連
! define feeder interrupts
isignaldi di1, high, empty;
isignaldi di3, high, full;
! 數字輸入訊號(di1、di3)的數值(high)發生改變時執行中斷(empty—>etrap、full—>ftrap)。
...! delete interrupts
idelete empty;
idelete full;
! 取消(刪除)中斷(empty、full)
endproc
! responds to 「feeder empty」 interrupt
trap etrap
open_valve;
return;
! 完成程式的執行
endtrap
! 中斷程式etrap
! responds to 「feeder full」 interrupt
trap ftrap
close_valve;
return;
! 完成程式的執行
endtrap
! 中斷程式ftrap
同一軟中斷程式可連線多個中斷。系統變數intno包含中斷次數,可供軟中斷程式用於識別中斷。在採取必要行動後,可用return指令結束軟中斷程式,也可等到到達軟中斷程式結尾(endtrap或error)處自然結束軟中斷程式。隨後,將從中斷處繼續執行。
2 9 2 設定時鐘中斷
2.9.2 設定時鐘中斷 接下來就對時鐘中斷進行設定。時鐘中斷是程序0及其他由它建立的程序輪轉的基礎。對時鐘中斷進行設定的過程具體分為如下三個步驟。1 對支援輪詢的8253定時器進行設定。這一步操作如圖2 20中的第一步所示,其中latch最關鍵。latch是通過乙個巨集定義的,通過它在sched....
設定中斷流程
中斷分組設定 1.往scb aircr暫存器中寫入分組資訊,注意要寫入鑰匙0x05fa0000 分組號 具體中斷配置 建議寫成函式,引數為搶占優先順序,響應優先順序,在向量表中的名字,分組,原子提供的函式名是my nvic init 1.設定分組 和上一段一樣 2.將優先順序組合成4位 3.使能中斷...
瑞典ABB之行
瑞典abb之行 may.27 今天早上起床,大概5點吧,吃完早飯,到山上去轉了一轉。這裡人的生活真的很愜意,環境非常幽靜。照了幾張hotel後面的 8 00出發去abb,9點見到了abb接待人員 處理後勤的 簡單做了一下交待,就直接去c13,見到了abb的專案負責人,接著就開始talking。中午1...