私は次のコードを使用しています。メインテーマは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));
これらのキャストはナンセンスですが、その混乱を取り除くことから始めます。あなたがCでのタイププロモーションの仕組みを推測していることは明らかです。推測ではなく、 "整数昇格"と "平衡化/通常の算術変換"について読んでみたいかもしれません。 – Lundin
すべてのレジスタが正しく設定されています。私の問題は、割り込みが発生したとき、ISRにヒットしないとき、割り込みイネーブルがNVICで確認されたときです。 –
これはドライバコードです。0x21ではなく、変数を配置する必要があります。そのため、キャストが配置されます。テスト目的のために、私は直接値を使用しました。 –