//-------------------------------------------------- void trigger_reset(uint8_t value) { trigger_setPin(TRIGGER_RESET,value); if(value) { trigger_clockCnt = 0; } }
//-------------------------------------------------- void trigger_pulsePin(uint8_t index) { trigger_pulseTimes[index] = systick_ticks + PULSE_LENGTH; trigger_pulseActive[index] = 1; trigger_setPin(index,1); }
//-------------------------------------------------- void trigger_tick() { int i; for(i=0;i<NUM_PINS;i++) { if( (trigger_pulseActive[i]) && (systick_ticks > trigger_pulseTimes[i]) ) { trigger_setPin(i,0); trigger_pulseActive[i] = 0; } } }
//-------------------------------------------------- void trigger_init() { memset(trigger_pulseTimes,0,NUM_PINS); memset(trigger_pulseActive,0,NUM_PINS); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; //trigger output GPIO_InitStructure.GPIO_Pin = PIN_TRACK_1 | PIN_TRACK_2| PIN_TRACK_3 | PIN_TRACK_4 | PIN_TRACK_5 | PIN_TRACK_6 | PIN_TRACK_7 | PIN_CLOCK_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = PIN_CLOCK_2 | PIN_RESET; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); //-------------- trigger input --------------------------------------- EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //---- Reset In (PA8)------------------------------------------------------ GPIO_InitStructure.GPIO_Pin = PIN_RESET_IN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //maybe floating? GPIO_Init(GPIOA, &GPIO_InitStructure); /* Connect EXTI Line8 to PA8 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource8); /* Configure EXTI Line8 */ EXTI_InitStructure.EXTI_Line = EXTI_Line8; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI Line8 Interrupt to the lowest priority */ /*//same irq as below NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); */ //---- Clock In (PC9)------------------------------------------------------ GPIO_InitStructure.GPIO_Pin = PIN_CLOCK_IN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //maybe floating? GPIO_Init(GPIOC, &GPIO_InitStructure); /* Connect EXTI Line9 to PC9 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource9); /* Configure EXTI Line9 */ EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI Line9 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //set trigger outs to low trigger_setPin(0,0); trigger_setPin(1,0); trigger_setPin(2,0); trigger_setPin(3,0); trigger_setPin(4,0); trigger_setPin(5,0); trigger_setPin(6,0); }