Niveau Bas 2
Niveau Bas 2
Chap 4: interruptions
// Configurer les lignes EXTI 0 et 4 en mode interruption sur front montant
EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line4;
EXTI0 & EXTI4 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init ( &EXTI_InitStructure);
// Initialiser la structure (registres) relative au module EXTI
//Configuration NVIC
NVIC_InitTypeDef NVIC_InitStruct ;
// Déclarartion d’une structure de type NVIC_InitTypeDef
NVIC_InitStruct .NVIC_IRQChannel = FLASH_IRQn; // L’identifiant de l’interruption générée par le Flash. NVIC_InitStruct.
NVIC_IRQChannelPreemptionPriority = 15; // Le groupe ayant la priorité la plus basse.
NVIC_InitStruct. NVIC_IRQChannelSubPriority = 0; // un seul niveau d’interruption est disponible (0).
NVIC_InitStruct. NVIC_IRQChannelCmd = ENABLE; // autoriser l’interruption.
NVIC_Init (&NVIC_InitStruct); // Initialiser le NVIC avec les nouveaux paramètres
Chap 6: DMA
// LES REGISTRES DMA1 …
DMA_Init(DMA1_Channel5, &DMA_InitStructure);
// /* Enable DMAx Channely Transfer Complete/ Half Transfer interrupts */
DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE);
/* Enable DMA1 Channelx transfer */
DMA_Cmd(DMA1_Channel5, ENABLE);
// /* Enable and set DMAx Channel y Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int i;
int txcount = 0; extern char Receive_Buffer[20];
extern char Transmit_Buffer[]; extern char Compare_Buffer[20];
void USART2_IRQHandler(void) void DMA1_Channel5_IRQHandler(void)
{ {
// Test on USART2 TX Interrupt /* Test on DMAx Channely Transfer Complete interrupt */
if (USART_GetITStatus(USART2, USART_IT_TXE)) if (DMA_GetITStatus(DMA1_IT_TC5))
{ {
// Code a ajouter pour assurer le fonctionnement désiré /* Code a ajouter pour assurer le fonctionnement désiré */
if (txcount < 8) if (stringCompare(Receive_Buffer, Compare_Buffer, 20))
{ {
USART_SendData(USART2, Transmit_Buffer[txcount]); GPIO_SetBits(GPIOA, GPIO_Pin_5);
txcount++; USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
} }
else else
{ {
USART_ITConfig(USART1, USART_IT_TXE, DISABLE); GPIO_SetBits(GPIOA, GPIO_Pin_5);
} Delay(0xFFFFF);
} GPIO_ResetBits(GPIOA, GPIO_Pin_5);
} Delay(0xFFFFF);
GPIO_SetBits(GPIOA, GPIO_Pin_5);
Delay(0xFFFFF);
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
Delay(0xFFFFF);
}
/* Clear DMAx Channely TC interrupt pending bit */
DMA_ClearITPendingBit(DMA1_IT_TC5);
}
}
Chap 6 POO
Exemple Code