[[FrontPage]]

*外部割込み/イベントコントローラ(EXTI) [#hccbc89a]
各GPIOの0はEXTIの0に、GPIOの1はEXTIの1にといった具合に、15まで対応する形でつながっています。
#contents
**クロックの供給とGPIOの初期化 [#l304b88c]
 /* Enable Button GPIO clock */
 RCC_APB2PeriphClockCmd(GPIOX_RCC | RCC_APB2Periph_AFIO, ENABLE);
 
 /* Configure Button pin as input floating */
 GPIO_InitStructure.GPIO_Pin = OB_SW_PIN;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(OB_SW_PORT, &GPIO_InitStructure);

**EXTIとして使用するGPIOの指定 [#nfd9d55c]
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOx , GPIO_PinSourcex);
:GPIO_PortSource|使用するGPIOポートをGPIO_PortSourceGPIO&color(blue){x};として指定します。&color(blue){x};にはAからGまでが入ります。
:GPIO_PinSource|使用するGPIOピンを、GPIO_PinSource&color(blue){x};として指定します。&color(blue){x};には0から15まで入ります。

**EXTIの初期化 [#q92979b5]

 EXTI_InitStructure.EXTI_Line = EXTI_Line0;
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
 EXTI_Init(&EXTI_InitStructure);

**NVICの設定 [#w2101e73]
 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);

-NVIC_PriorityGroup_0から4の5個
-pre-emptionの数字が低いの方が優先順位が高い、例えば:0が1より優先が高い。
-pre-emptionは同じの場合、subpriorityの数字を確認する、小さいの方が高い。

**EXTI割込み(ライン0-4) [#v8cf930c]
***EXTI0_IRQHandler() [#t2ccbc25]
 void EXTI0_IRQHandler(void)
 {
 	/* Clear the Key Button EXTI line pending bit */
 	EXTI_ClearITPendingBit(EXTI_Line0);
 
 	処理();
 } 
***EXTI_ClearITPendingBit(EXTI_Linex) [#tdea1be4]
-EXTI割込みの割込みペンディングビットをクリアします。
:EXTI_Linex|クリアする対象のEXTIラインをEXTI_Line&color(blue){x};の組み合わせで指定します。&color(blue){x};には0から19までの数値が入ります。

**EXTI割込み(ライン5-9) [#c47eaf0d]
***EXTI9_5_IRQHandler() [#t5623178]
 void EXTI9_5_IRQHandler(void)
 {
 	if(EXTI_GetITStatus(EXTI_Line5) != RESET)
 	{
 		処理();
 	}
 }
**EXTI割込み(ライン15-10) [#wc882e0e]


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS