FrontPage

外部割込み/イベントコントローラ(EXTI)

各GPIOの0はEXTIの0に、GPIOの1はEXTIの1にといった具合に、15まで対応する形でつながっています。

クロックの供給とGPIOの初期化

/* 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の指定

GPIO_EXTILineConfig(GPIO_PortSourceGPIOx , GPIO_PinSourcex);
GPIO_PortSource
使用するGPIOポートをGPIO_PortSourceGPIOxとして指定します。xにはAからGまでが入ります。
GPIO_PinSource
使用するGPIOピンを、GPIO_PinSourcexとして指定します。xには0から15まで入ります。

EXTIの初期化

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の設定

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)

EXTI0_IRQHandler()

void EXTI0_IRQHandler(void)
{
	/* Clear the Key Button EXTI line pending bit */
	EXTI_ClearITPendingBit(EXTI_Line0);

	処理();
} 

EXTI_ClearITPendingBit(EXTI_Linex)

  • EXTI割込みの割込みペンディングビットをクリアします。
EXTI_Linex
クリアする対象のEXTIラインをEXTI_Linexの組み合わせで指定します。xには0から19までの数値が入ります。

EXTI割込み(ライン5-9)

EXTI9_5_IRQHandler()

void EXTI9_5_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line5) != RESET)
	{
		処理();
	}
}

EXTI割込み(ライン15-10)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-02-28 (月) 00:18:58