hi, i try to make an interruption using the pin 3.5, i modified and checked WIU and VIC registers but it doesn't work
#include<stdio.h> #include<91x_lib.h>
/* Definition structure librairie --------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; WIU_InitTypeDef WIU_InitStructure;
/* Prototypes fonctions ------------------------------------------------------*/ void BoutonsP_IRQ (void) __irq ; void GPIO_Configuration(void);
/* Variables globales ------------------------------------------------------*/ unsigned int u32Time=55u; void wait (void) { int i; for ( i=0 ; i<=1000000 ; i++ ); }
//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // // Function Name : main // // Description : Programme principal // // Input : None // // Output : None // // Return : None // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// int main (void) {
GPIO_Configuration();
/*Configuration Interruption BoutonsP*/
SCU_AHBPeriphClockConfig( __VIC, ENABLE ); SCU_WakeUpLineConfig(5);
/* Autorise l'interruption */ // WIU_DeInit(); // WIU_InitStructure.WIU_Line = WIU_Line3; // WIU_InitStructure.WIU_TriggerEdge = WIU_RisingEdge; // WIU_StructInit(&WIU_InitStructure); // WIU_Cmd(ENABLE); WIU ->CTRL = 0x00000002; WIU ->MR = 0x00000020; WIU ->TR = 0x00000020;
/* Autorise l'interruption Mise du Bit E à 1 */ VIC_DeInit(); VIC_InitDefaultVectors(); VIC_GetIRQStatus(EXTIT0_ITLine); VIC_GetSourceITStatus(EXTIT0_ITLine); VIC_ITCmd(EXTIT0_ITLine, ENABLE); VIC_Config(EXTIT0_ITLine, VIC_IRQ, 0); VIC_GetCurrentISRAdd( VIC1 ); VIC_GetISRVectAdd(EXTIT0_ITLine);
/* Autorise l'interruption */
while (1) {
if( u32Time > 50u ) { GPIO_WriteBit(GPIO7, GPIO_Pin_0 , (BitAction)((1-GPIO_ReadBit(GPIO7, GPIO_Pin_0)))); u32Time++; } // for ( n=1 ; n<=255; n<<=1 )
// { // GPIO7->DR[0x3FC] =n; // wait(); // } // } } }
void BoutonsP_IRQ (void) __irq { int n;
if (GPIO3->DR[0x3FC]== 0x20) /*si INT 5 enfoncé */ { GPIO7->DR[0x3FC] =0x55; for ( n=1 ; n<=10000000 ; n++ ) ; }
WIU_ClearFlag(WIU_Line3);
VIC0->VAR = 0; /* fin de l'interruption*/ VIC1->VAR = 0;
}
//////////////////////////////////////////////////////////////////////////////// // Function Name : GPIO_Configuration // Description : This function configures the different GPIO ports. // Input : None // Output : None // Return : None //////////////////////////////////////////////////////////////////////////////// void GPIO_Configuration(void) { GPIO_DeInit(GPIO3); /* GPIO P3.5 */ GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_IPInputConnected = GPIO_IPInputConnected_Enable; GPIO_Init (GPIO3, &GPIO_InitStructure);
/*configuration Pin 7 pour les leds*/ GPIO_DeInit(GPIO7); /* GPIO pin P7.0 configuration */ GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt1 ; GPIO_Init(GPIO7, &GPIO_InitStructure);