2016-09-26 13 views
0

私は次のコードを使用しています。メインテーマはlpcでピン割り込みを生成することです1837、割り込みに問題があります。 KeilLPCのGPIO PIN割り込みで問題が発生しました1837

/* Configure pin as digital input using GPIO in pin multiplexing */ 

GPIO_SetDir(6,0,GPIO_DIR_INPUT); 
GPIO_SetDir(6,2,GPIO_DIR_INPUT); 

SCU_PinConfigure(0xC,1,(SCU_CFG_MODE_FUNC4 | SCU_SFS_EPUN | SCU_SFS_ZIF)); 
SCU_PinConfigure(0xC,3,(SCU_CFG_MODE_FUNC4 | SCU_SFS_EPUN | SCU_SFS_ZIF)); 


/* enable edge interrupt */ 


LPC_GPIO_PIN_INT->ISEL = 0x00UL; 

/* enable rising edge interrupt */ 

LPC_GPIO_PIN_INT->IENR = (GPIO_PIN_INT_IENR_ENRL0_Msk | 
          GPIO_PIN_INT_IENR_ENRL1_Msk); 

LPC_GPIO_PIN_INT->SIENR = (GPIO_PIN_INT_SIENR_SETENRL0_Msk | 
          GPIO_PIN_INT_SIENR_SETENRL1_Msk); 

/* enable falling edge interrupt */ 

LPC_GPIO_PIN_INT->IENF = (GPIO_PIN_INT_IENF_ENAF0_Msk | 
          GPIO_PIN_INT_IENF_ENAF0_Msk); 

LPC_GPIO_PIN_INT->SIENF = (GPIO_PIN_INT_SIENF_SETENAF0_Msk | 
          GPIO_PIN_INT_SIENF_SETENAF1_Msk); 

/* Clear pending interrupt of pin interrupt 1*/ 

NVIC->ICPR[(((uint32_t)(int32_t)(0x21)) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)(0x21)) & 0x1FUL)); 

/* set priority for pin interrupt 1 */ 


NVIC_SetPriority(0x21, 1); 

/* enable pin interrupt */ 


NVIC->ISER[(((uint32_t)(int32_t)(0x21)) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)(0x21)) & 0x1FUL)); 
+0

これらのキャストはナンセンスですが、その混乱を取り除くことから始めます。あなたがCでのタイププロモーションの仕組みを推測していることは明らかです。推測ではなく、 "整数昇格"と "平衡化/通常の算術変換"について読んでみたいかもしれません。 – Lundin

+0

すべてのレジスタが正しく設定されています。私の問題は、割り込みが発生したとき、ISRにヒットしないとき、割り込みイネーブルがNVICで確認されたときです。 –

+0

これはドライバコードです。0x21ではなく、変数を配置する必要があります。そのため、キャストが配置されます。テスト目的のために、私は直接値を使用しました。 –

答えて

1

すべての混乱の後、入力バッファがあります。 SCU_PinConfigure(0xC、1、(SCU_CFG_MODE_FUNC4 | SCU_SFS_EPUN | SCU_SFS_ZIF | SCU_SFS_EZI));

入力バッファを有効にするためのビットがあります。 このビットをイネーブルにすると、入力リードと割り込みがイネーブルになります。 返信いただきありがとうございます。 この回答はGpio入力の読み込みを解決し、割り込みを有効にするのに役立ちます。

+1

EZIビットが入力バッファイネーブルビットです。 –

0

私は数ヶ月前と同じ問題があったと思います。入力割り込みモードでGPIOを設定しましたが、ISRを設定できませんでした。

  1. 割り込みソース信号を確認してください。それが動作することを確認します。
  2. 重要なバリエーションを印刷して、それが正しいかどうかを観察してください。

2つのステップが両方とも正しい場合は、GPIOが入力割り込みモードであることが証明されます。 ISRを取得できない場合は、ISRがどこにあるかを調べます。ハードウェア割り込みのプロセスで発生するいくつかの問題がある必要があります。プロセスはアセンブリ言語で記述されます。

+0

コードの流れを確認しましたか?外部信号はアクティブLOWです。割り込みが発生したとき –

関連する問題