Professional Documents
Culture Documents
(Advanced Interrupt Controller) ﻪﻔﻗو ﺪﺣاو
(Advanced Interrupt Controller) ﻪﻔﻗو ﺪﺣاو
ﺧﻄﻮط I/O
ﺳﯿﮕﻨﺎل ﻫﺎي وﻗﻔﻪ ﮐﻪ از ﻃﺮﯾﻖ ﭘﯿﻦ ﻫﺎي FIQو IRQnدرﯾﺎﻓﺖ ﻣﯽﺷﻮﻧﺪ ﺑﺎ دﯾﮕﺮ اﺑﺰار ﺟﺎﻧﺒﯽ در واﺣﺪ ﮐﻨﺘﺮﻟﺮ
PIOﻣﺎﻟﺘﯽ ﭘﻠﮑﺲ ﺷﺪه اﻧﺪ و ﺑﺮاي اﺳﺘﻔﺎده از آﻧﻬﺎ ﺑﺎﯾﺪ رﺟﯿﺴﺘﺮ ﻣﺮﺑﻮﻃﻪ را ﭘﺮوﮔﺮام ﻧﻤﺎﯾﯿﻢ.
2
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
ﻣﻨﺎﺑﻊ وﻗﻔﻪ
ﻣﻨﺒﻊ وﻗﻔﻪ ﺻﻔﺮ ﻫﻤﯿﺸﻪ در اﺧﺘﯿﺎر ﭘﯿﻦ FIQاﺳﺖ و اﮔﺮ ﻣﯿﮑﺮو اﯾﻦ ﭘﯿﻦ را ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ اﯾﻦ ﻣﻨﺒﻊ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار
ﻧﻤﯽ ﮔﯿﺮد.
ﻣﻨﺒﻊ ﯾﮏ ﻫﻤﯿﺸﻪ در اﺧﺘﯿﺎر ﺳﯿﺴﺘﻢ اﺳﺖ .اﯾﻦ ﻣﻨﺒﻊ ﺑﺎ orﮐﺮدن ﺧﻄﻮط وﻗﻔﻪ اﺑﺰار ﺟﺎﻧﺒﯽ ﻣﺎﻧﻨﺪ ﺗﺎﯾﻤﺮ و ﮐﻨﺘﺮﻟﺮ
ﺣﺎﻓﻈﻪ و واﺣﺪ PMCو ﻏﯿﺮه ﺣﺎﺻﻞ ﺷﺪه اﺳﺖ .ﻫﺮ ﮔﺎه از ﻃﺮف ﯾﮑﯽ از اﯾﻦ ﻣﻨﺎﺑﻊ وﻗﻔﻪاي رخ دﻫﺪ ﺑﺎﯾﺪ ﺑﺎ ﺧﻮاﻧﺪن
رﺟﺴﯿﺘﺮ) AIC_ISR (Interrupt Status Registerﺗﻌﯿﯿﻦ ﮐﻨﯿﻢ ﮐﺪام ﯾﮏ از ﻣﻨﺎﺑﻊ orﺷﺪه ﺑﺎﻋﺚ اﯾﺠﺎد وﻗﻔﻪ
ﺷﺪه اﺳﺖ .ﻣﻨﺎﺑﻊ ورودي دﯾﮕﺮ از ﺷﻤﺎره 2ﺗﺎ 31ﻣﯽﺗﻮاﻧﺪ ﺑﻪ ﻫﺮﯾﮏ از اﺑﺰار ﺟﺎﻧﺒﯽ و ﯾﺎ وﻗﻔﻪﻫﺎي ﺧﺎرﺟﯽ ﻣﺘﺼﻞ
ﺷﻮﻧﺪ.
ﻧﺎﻣﮕﺬاري ﻣﻨﺎﺑﻊ ﺑﺎ اﺳﺎﻣﯽ SYS , FIQو PID2ﺗﺎ PID31اﻧﺠﺎم ﺷﺪه اﺳﺖ.
ﻓﯿﻠﺪ PRIORدر رﺟﯿﺴﺘﺮﻫﺎي ﺑﺎﻻ ﻣﺸﺨﺺ ﮐﻨﻨﺪه اوﻟﻮﯾﺖ وﻗﻔﻪ اﺳﺖ و از ﺻﻔﺮ ﮐﻪ ﭘﺎﯾﯿﻦ ﺗﺮﯾﻦ اوﻟﻮﯾﺖ را دارد ﺗﺎ 7
ﮐﻪ ﺑﺎﻻ ﺗﺮﯾﻦ اوﻟﻮﯾﺖ را دارد ﻣﯽﺑﺎﺷﺪ .اﯾﻦ ﻓﯿﻠﺪ ﺑﺮاي رﺟﯿﺴﺘﺮ ﻣﺮﺑﻮط ﺑﻪ FIQاﺳﺘﻔﺎده ﻧﻤﯽﺷﻮد ﭼﻮن ﻫﻤﯿﺸﻪ داراي
ﺑﺎﻻﺗﺮﯾﻦ اوﻟﻮﯾﺖ اﺳﺖ .ﺧﻄﻮط وﻗﻔﻪ IRQرا ﺑﻪ ﺟﺰ آﻧﻬﺎﯾﯽ ﮐﻪ ﺑﻪ ﺻﻮرت FAST FORCINGﺗﻌﺮﯾﻒ ﺷﺪه اﻧﺪ ،ﻣﯽ
ﺗﻮان در ﻫﺸﺖ ﺳﻄﺢ اوﻟﻮﯾﺖ ﻣﺨﺘﻠﻒ ﻃﺒﻘﻪ ﺑﻨﺪي ﮐﺮد.
3
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
در دﯾﺘﺎﺷﯿﺖ ﻧﺎمﮔﺬاري اﯾﻦ ﻣﺠﻤﻮﻋﻪ رﺟﯿﺴﺘﺮ ﺑﻪ ﺻﻮرت AIC_SMR0..AIC_SMR31اﺳﺖ ﯾﻌﻨﯽ ﺑﺮاي ﻫﺮ
اﺑﺰار ﺟﺎﻧﺒﯽ ﮐﻪ ﺑﺎ PIDﻫﺎي 0ﺗﺎ 32در ﺟﺪول زﯾﺮ آﻣﺪهاﻧﺪ ،ﯾﮏ رﺟﯿﺴﺘﺮ ، AIC_SMRxﮐﻪ xﻫﻤﺎن ﺷﻤﺎره
PIDاﺳﺖ ،وﺟﻮد دارد.
4
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
5
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
اﮔﺮ وﻗﻔﻪاي رخ دﻫﺪ ﺑﻌﺪ از ﺳﭙﺮي ﺷﺪن ﻣﺮﺣﻠﻪ ﺗﻌﯿﯿﻦ اوﻟﻮﯾﺖ آدرﺳﯽ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺎﯾﺪ ﺑﻪ آن ﭘﺮش ﮐﻨﺪ و ﻗﺒﻼً در
رﺟﯿﺴﺘﺮ ) AIC_SVR0..X (Source Vector Registersﻣﺮﺑﻮط ﺑﻪ آن وﻗﻔﻪ ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ ،در رﺟﯿﺴﺘﺮ
AIC_IVRﮐﭙﯽ ﻣﯽﺷﻮد .ﺷﻤﺎي اﯾﻦ دو رﺟﯿﺴﺘﺮ در زﯾﺮ آﻣﺪه اﺳﺖ.
6
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
ﻣﺸﺨﺺ ﮐﺮد ﺑﺪﯾﻦ ﺻﻮرت ﮐﻪ اﮔﺮ ﺑﯿﺖ ﻣﺘﻨﺎﻇﺮ ﺑﺎ وﻗﻔﻪ ﻣﻮرد ﻧﻈﺮ در اﯾﻦ رﺟﯿﺴﺘﺮ ﺻﻔﺮ ﺑﺎﺷﺪ ﻏﯿﺮ ﻓﻌﺎل واﮔﺮ ﯾﮏ ﺑﺎﺷﺪ
ﻓﻌﺎل اﺳﺖ
ﻫﺮ ﯾﮏ از وﻗﻔﻪﻫﺎي ﺣﺴﺎس ﺑﻪ ﻟﺒﻪ را ﻣﯽﺗﻮان ﺑﺎ ﯾﮏ ﮐﺮدن ﺑﯿﺖ ﻣﺘﻨﺎﻇﺮ در رﺟﯿﺴﺘﺮ AIC_ICCRﮐﻪ در زﯾﺮ
ﻧﻤﺎﯾﺶ داده ﺷﺪه اﺳﺖ ،ﭘﺎك ﮐﺮد .اﯾﻦ ﯾﮏ ﻣﺮﺣﻠﻪ اﺿﺎﻓﯽ ﺑﺮاي وﻗﻔﻪ ﻫﺎي ﺣﺴﺎس ﺑﻪ ﻟﺒﻪ اﺳﺖ ﮐﻪ ﺑﺎﯾﺪ ﺑﻌﺪ از آﺷﮑﺎر
ﺷﺪن وﻗﻔﻪ ﭘﺮﭼﻢ وﻗﻔﻪ را ﺑﺪﯾﻦ ﺻﻮرت ﭘﺎك ﮐﺮد ﺗﺎ دوﺑﺎره ﺑﻪ اﺷﺘﺒﺎه آن را ﯾﮏ وﻗﻔﻪ ﺟﺪﯾﺪ ﺑﻪ ﺣﺴﺎب ﻧﯿﺎورﯾﻢ .وﻟﯽ
ﺑﺮاي وﻗﻔﻪﻫﺎي ﺣﺴﺎس ﺑﻪ ﺳﻄﺢ اﻧﺠﺎم اﯾﻦ ﮐﺎر ﻧﯿﺎزي ﻧﯿﺴﺖ ﭼﻮن ﺑﻌﺪ از ﺧﻮاﻧﺪن از رﺟﯿﺴﺘﺮ AIC_IVRﭘﺮﭼﻢ وﻗﻔﻪ
ﺑﻪ ﺻﻮرت ﺧﻮدﮐﺎر ﭘﺎك ﻣﯽﺷﻮد.
7
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
اﮔﺮ ﯾﮏ ﯾﺎ ﭼﻨﺪ وﻗﻔﻪ رخ دﻫﺪ و ﺑﻪ آن ﻫﺎ رﺳﯿﺪﮔﯽ ﻧﺸﻮد ﻣﯽﺗﻮان آن ﻫﺎ را در رﺟﯿﺴﺘﺮ AIC_IPRﻣﺸﺎﻫﺪه ﮐﺮد.
8
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
ﭘﺎك ﺷﺪن وﻗﻔﻪ ﻣﻨﺎﺑﻊ در رﺟﯿﺴﺘﺮ AIC_ISRﺑﻌﺪ از ﺧﻮاﻧﺪن از رﺟﯿﺴﺘﺮ AIC_IVRﺑﻪ ﺻﻮرت اﺗﻮﻣﺎﺗﯿﮏ اﻧﺠﺎم
ﻣﯽ ﮔﯿﺮد اﯾﻦ وﯾﮋﮔﯽ ﺳﺒﺐ ﮐﺎﻫﺶ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ ﻣﯽﺷﻮد .وﯾﮋﮔﯽ ﭘﺎك ﺷﺪن اﺗﻮﻣﺎﺗﯿﮏ در ﺻﻮرت اﺳﺘﻔﺎده از اﻣﮑﺎن
Fast Forcingاﻣﮑﺎن ﭘﺬﯾﺮ ﻧﯿﺴﺖ.
وﺿﻌﯿﺖ وﻗﻔﻪ ﻫﺎ
ﺑﺎ رﺟﯿﺴﺘﺮ ) AIC_ISR (Interrupt Status Registerﻣﯽﺗﻮان ﺷﻤﺎره IDوﻗﻔﻪ اي ﮐﻪ اﮐﻨﻮن رخ داده را
درﯾﺎﻓﺖ ﮐﺮد.
ﺑﺎ رﺟﯿﺴﺘﺮ) AIC_CISR (Core Interrupt Status Registerﻣﯽﺗﻮان ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ دو ﻓﯿﻠﺪ NIRQو NIFQ
وﺿﻌﯿﺖ ﺧﻄﻮط وﻗﻔﻪ ﭘﺮدازﻧﺪه را ﺑﺮرﺳﯽ ﮐﺮد.
NIRQ
= 0ﺧﻄﻮط IRQﻏﯿﺮ ﻓﻌﺎل ﻫﺴﺘﻨﺪ.
= 1ﺧﻄﻮط IRQﻓﻌﺎل ﻫﺴﺘﻨﺪ.
NFIQ
= 0ﺧﻄﻮط FRQﻏﯿﺮ ﻓﻌﺎل ﻫﺴﺘﻨﺪ.
= 1ﺧﻄﻮط FRQﻓﻌﺎل ﻫﺴﺘﻨﺪ.
ﻫﻤﺎن ﻃﻮر ﮐﻪ ﻗﺒﻼً ﮔﻔﺘﻪ ﺷﺪ ﯾﮑﯽ از ﻧﮑﺎت ﺿﺮوري اﯾﻦ اﺳﺖ ﮐﻪ در ﭘﺎﯾﺎن ﻓﺮآﯾﻨﺪ وﻗﻔﻪ ﺑﺎﯾﺪ ﭘﺎﯾﺎن وﻗﻔﻪ را ﺑﺎ ﻧﻮﺷﺘﻦ
ﻫﺮ ﻣﻘﺪاري در رﺟﯿﺴﺘﺮ )AIC_EOICR (END OF INTERRUPT COMMAND REGISTER
ﻣﺸﺨﺺ ﺷﻮد.
9
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
وﻗﻔﻪ ﺗﻮ در ﺗﻮ
ﺳﺮوﯾﺲ وﻗﻔﻪ ﺗﻮ در ﺗﻮ) (interrupt nestingزﻣﺎﻧﯽ ﺑﻪ ﮐﺎر ﻣﯽرود ﮐﻪ ﺑﺮﻧﺎﻣﻪ در ﺣﺎل اﺟﺮاي روﺗﯿﻦ ﯾﮏ وﻗﻔﻪ ﺑﺎﺷﺪ
و در ﻫﻤﯿﻦ ﺣﯿﻦ ﯾﮏ وﻗﻔﻪ ﺑﺎ اوﻟﻮﯾﺖ ﺑﺎﻻ ﺗﺮ رخ دﻫﺪ )ﺷﮑﻞ زﯾﺮ( .در اﯾﻦ ﻫﻨﮕﺎم ﺧﻄﻮط وﻗﻔﻪ ﭘﺮدازﻧﺪه در اﺧﺘﯿﺎر وﻗﻔﻪ
ﺑﺎ اوﻟﻮﯾﺖ ﺑﺎﻻﺗﺮ ﻗﺮار ﻣﯽﮔﯿﺮد و ﺑﺮﻧﺎﻣﻪ در ﺣﺎل اﺟﺮا ﻣﺘﻮﻗﻒ و رﺟﯿﺴﺘﺮ AIC_IVRﺑﺮاي ﺗﻌﯿﯿﻦ ﻣﻨﺒﻊ وﻗﻔﻪ ﺟﺪﯾﺪ
ﺑﺎﯾﺪ ﺧﻮاﻧﺪه ﺷﻮد .در اﯾﻦ زﻣﺎن ﺷﻤﺎره ﻣﻨﺒﻊ وﻗﻔﻪ ﻗﺒﻠﯽ و اوﻟﻮﯾﺖ آن در ﯾﮏ ﺣﺎﻓﻈﻪ ﭘﺸﺘﻪ ذﺧﯿﺮه ﻣﯽ ﺷﻮد ﺗﺎ ﺑﻌﺪ از
اﺗﻤﺎم روﺗﯿﻦ وﻗﻔﻪ ﺑﺎ اوﻟﻮﯾﺖ ﺑﺎﻻ ﮐﻪ ﺑﺎ ﻧﻮﺷﺘﻦ در رﺟﯿﺴﺘﺮ AIC_EOICMﻣﺸﺨﺺ ﻣﯽ ﺷﻮد ﺑﻪ اداﻣﻪ اﺟﺮاي روﺗﯿﻦ
ﻗﺒﻠﯽ ﺑﭙﺮدازد.
10
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
ﺗﻨﻬﺎ ﻣﻨﺒﻊ وﻗﻔﻪ ﺳﺮﯾﻊ ﻣﻨﺒﻊ ﺷﻤﺎره ﺻﻔﺮ ﻣﯽ ﺑﺎﺷﺪ ﻣﮕﺮ در ﻣﻮاردي ﮐﻪ از ﻣﺪ Fast Forcingاﺳﺘﻔﺎده ﮐﻨﯿﻢ .اﯾﻦ
ﻣﻨﺒﻊ ﺑﻪ ﺻﻮرت وﻗﻔﻪ ﺧﺎرﺟﯽ ﺑﻪ ﺻﻮرت ﻣﺴﺘﻘﯿﻢ ﯾﺎ ﺑﺎ اﺳﺘﻔﺎده از ﮐﻨﺘﺮﻟﺮ PIOﺑﻪ ﯾﮑﯽ از ﭘﯿﻦ ﻫﺎي ﻣﯿﮑﺮو ﻣﺘﺼﻞ
اﺳﺖ.
ﺑﺮاي اﯾﻦ ﻣﻨﺒﻊ ﻫﯿﭻ اوﻟﻮﯾﺘﯽ ﺗﻌﺮﯾﻒ ﻧﺸﺪه اﺳﺖ .ﺑﺮاي ﺗﻌﯿﯿﻦ ﻣﺪ ﮐﺎري اﯾﻦ وﻗﻔﻪ از رﺟﯿﺴﺘﺮ AIC_SMR0اﺳﺘﻔﺎده
ﻣﯽ ﮐﻨﯿﻢ ﮐﻪ ﻓﯿﻠﺪ PRIORآن ﺑﯽ اﻫﻤﯿﺖ اﺳﺖ وﻧﻮع آن در ﻓﯿﻠﺪ SRCTYPEﻣﺸﺨﺺ ﻣﯽ ﺷﻮد.
ﻫﻤﺎن ﮔﻮﻧﻪ ﮐﻪ ﻗﺒﻼ ﺗﻮﺿﯿﺢ داده ﺷﺪ ﺑﺎ ﻧﻮﺷﺘﻦ ﻣﻘﺪار 0x1در رﺟﯿﺴﺘﺮ AIC_IECRاﯾﻦ ﻣﻨﺒﻊ ﻓﻌﺎل ﻣﯽ ﺷﻮد و ﯾﺎ
ﺑﺎ ﻧﻮﺷﺘﻦ در رﺟﯿﺴﺘﺮ AIC_IDCRاﯾﻦ ﻣﻨﺒﻊ ﻏﯿﺮ ﻓﻌﺎل ﻣﯽ ﺷﻮد ﻫﻤﭽﻨﯿﻦ ﺑﺎ ﺧﻮاﻧﺪن ﺑﯿﺖ ﺻﻔﺮم رﺟﯿﺴﺘﺮ
AIC_IMRﻣﺸﺨﺺ ﻣﯽ ﺷﻮد ﮐﻪ آﯾﺎ وﻗﻔﻪ ﺳﺮﯾﻊ ﻓﻌﺎل اﺳﺖ ﯾﺎ ﻧﻪ.
ﻫﻨﮕﺎم وﻗﻮع وﻗﻔﻪ ﺳﺮﯾﻊ ﻣﺤﺘﻮاي AIC_SVR0در AIC_FVRﻗﺎﺑﻞ دﺳﺘﺮس اﺳﺖ وﻫﻨﮕﺎﻣﯽ ﮐﻪ وﻗﻔﻪ اي رخ
ﻧﺪﻫﺪ ﻣﺤﺘﻮاي اﯾﻦ رﺟﯿﺴﺘﺮ ﻣﻘﺪار ذﺧﯿﺮه ﺷﺪه در رﺟﯿﺴﺘﺮ AIC_SPUاﺳﺖ.
11
ﺗﻨﻈﯿﻢ :ﻋﻠﯽ اﺑﺮﯾﺸﻤﯽ ﻣﻘﺪم www.armcenter.ir
periodic interval timer (PIT) , real time timer (RTT) , watchdog timer (WDT) ,
debug-UART (DBGU) , power management controller (PMC), reset controller
(RSTC) ,و ). embedded flash controller (EFC
ﻧﮑﺘﻪ :3
ﻫﻨﮕﺎم وﻗﻮع وﻗﻔﻪ ) (AICﺑﺎﯾﺪ ﻣﻮارد زﯾﺮ را ﺑﺪاﻧﯿﻢ :
آدرﺳﯽ ﮐﻪ ﺑﻪ ان ﭘﺮش ﮐﻨﺪ ,اوﻟﻮﯾﺖ و ﻧﻮع وﻗﻔﻪ )ﺣﺴﺎس ﺑﻪ ﻟﺒﻪ ﯾﺎ ﺣﺴﺎس ﺑﻪ ﺳﻄﺢ(.
ﺑﺮاي ﻣﺸﺨﺺ ﮐﺮدن آدرس 32ﺑﯿﺘﯽ رﺟﯿﺴﺘﺮ AIC_ SVRﺑﺮاي ﻫﺮ وﻗﻔﻪ وﺟﻮد دارد .
ﺑﺮاي ﻓﻬﻤﯿﺪن ﺑﻬﺘﺮ ﻣﻄﺎﻟﺐ اﯾﻦ آﻣﻮزش ﺑﻬﺘﺮ اﺳﺖ ﺑﻪ ﺑﺨﺶ ﭘﺮوژه ﻫﺎ ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ ﺗﺎ ﺑﺎ ﯾﮏ ﻣﺜﺎل ﻋﻤﻠﯽ ﻣﻄﺎﻟﺐ
ﺑﺎﻻ را ﺑﺮرﺳﯽ ﮐﻨﯿﺪ .
www.armcenter.org
12