У меня есть процессор STM32F4, подключенный к графическому процессору Solomon Systems SSD1963. У графического процессора есть сигнал разрыва (TE), который уведомляет процессор, когда он собирается выполнить вертикальное обновление. Надеюсь, вы сможете использовать этот код в качестве примера и адаптировать его к своему решению.
Сигнал TE подключается к контакту GPIO G7 процессора. Итак, сначала мне нужно настроить вывод GPIO.
//GPIO Pin G7
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOG, &GPIO_InitStructure);
Далее мне нужно настроить прерывание и NVIC.
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG, EXTI_PinSource7);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line7;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
Наконец, я должен создать обработчик прерывания. EXTI9_5_IRQHandler
обрабатывает внешние прерывания в строках 5 ~ 7. Этот метод фактически определен в файле начальной сборки моего процессора как слабая ссылка. Мне просто нужно переопределить метод, а компоновщик сделает все остальное.
extern "C" void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
//Handle the interrupt
EXTI_ClearITPendingBit(EXTI_Line7);
}
}
В качестве набора инструментов я использую Sourcery Codebench Lite от Mentor Graphics.
person
Verax
schedule
08.10.2012