Вт окт 10, 2017 15:58:42
//line timer
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructInit(&TIM_InitStructure); // Инициализация структуры
TIM_InitStructure.TIM_Prescaler = 0; // Предделитель
TIM_InitStructure.TIM_Period = 2050; // Период таймера
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2, &TIM_InitStructure); // Функция настройки таймера
TIM_Cmd(TIM2, ENABLE); // Включение таймера
NVIC_EnableIRQ(TIM2_IRQn);
TIM_ITConfig(TIM2, TIM_DIER_UIE, ENABLE);
//hor sync timer on
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructInit(&TIM_InitStructure);
TIM_InitStructure.TIM_Prescaler = 0;
TIM_InitStructure.TIM_Period = 1600;
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3, &TIM_InitStructure);
NVIC_EnableIRQ(TIM3_IRQn);
TIM_ITConfig(TIM3, TIM_DIER_UIE, ENABLE);
//hor sync timer off
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseStructInit(&TIM_InitStructure);
TIM_InitStructure.TIM_Prescaler = 0;
TIM_InitStructure.TIM_Period = 1752;
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4, &TIM_InitStructure);
NVIC_EnableIRQ(TIM4_IRQn);
TIM_ITConfig(TIM4, TIM_DIER_UIE, ENABLE);
void TIM2_IRQHandler(void){
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_Cmd(TIM3, ENABLE);
TIM_Cmd(TIM4, ENABLE);
vline++;
clr++;
if (vline >= (LINE_COUNT-4)){
VSYNC_ON;
}else{
VSYNC_OFF;
}
int clrsel = clr/40;
int clrsec = GPIO_Pin_0;
if (clrsel%3 == 1) clrsec = GPIO_Pin_2;
if (clrsel%3 == 2) clrsec = GPIO_Pin_4;
if (vline < 600 && (vline%40 == 0 || vline%40 == 1)){
GPIOA->BRR = clrsec;
}else{
GPIOA->BSRR = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
}
if (vline==LINE_COUNT){
vline = 0;
frame++;
clr = 0;
if (frame == 60){
GPIOC->BRR = GPIO_Pin_13;
}
if (frame == 120){
GPIOC->BSRR = GPIO_Pin_13;
frame = 0;
}
}
}
}
void TIM3_IRQHandler(void){
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){
GPIOA->BSRR = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
HSYNC_ON;
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
TIM_Cmd(TIM3, DISABLE);
}
}
void TIM4_IRQHandler(void){
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET){
HSYNC_OFF;
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM_Cmd(TIM4, DISABLE);
}
}