int main() { cpuSetup(); #if USE_DEBUG_PIN GpioPin_ConfigureOut(&DEBUG_PIN, 0); #endif SettingsStore_Init(); // intiailize sub-modules MIDI_Init(); Panel_Init(); // FIXME: panel must be configured first at the moment, // as LPC1343CodeBase SPI driver reconfigures PIO0.2 Keyboard_Init(); // enable TMR16B0 clock SCB_SYSAHBCLKCTRL |= SCB_SYSAHBCLKCTRL_CT16B0; // configure TMR16B0 to kick at 10kHz TMR_TMR16B0MR0 = TIMER16_CCLK_100US; TMR_TMR16B0MCR = TMR_TMR16B0MCR_MR0_INT_ENABLED | TMR_TMR16B0MCR_MR0_RESET_ENABLED; // Enable the TIMER0 interrupt, end eventually enable the timer itself NVIC_EnableIRQ(TIMER_16_0_IRQn); TMR_TMR16B0TCR = TMR_TMR16B0TCR_COUNTERENABLE_ENABLED; // keyboard and panel handling is performed in the timer interrupt context // all we need to do in the main code is to send any pendind MIDI data // and go to sleep until next interrupt while (1) { MIDI_SendQueued(); // Wait For Interrupt __asm volatile ("wfi"); } return 0; }
//------------------------------------------------------------------------------------------------------------------------------------------------------ void Hardware_Init(void) { HAL_Init(); SystemClock_Config(); __GPIOA_CLK_ENABLE(); __GPIOB_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __GPIOF_CLK_ENABLE(); __GPIOG_CLK_ENABLE(); __DMA1_CLK_ENABLE(); // Для DAC1 (бикалка) __TIM7_CLK_ENABLE(); // Для DAC1 (бикалка) __DAC_CLK_ENABLE(); // Для бикалки __PWR_CLK_ENABLE(); __SYSCFG_CLK_ENABLE(); HAL_NVIC_SetPriority(SysTick_IRQn, PRIORITY_SYS_TICK); // Timer ///////////////////////////////////////////////////////////////// //RCC_PCLK1Config(RCC_HCLK_Div1); // Таймер для мс HAL_NVIC_SetPriority(TIM6_DAC_IRQn, PRIORITY_TIMER_TIM6); HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); Timer_Init(); Panel_Init(); FSMC_Init(); FSMC_SetMode(ModeFSMC_FPGA); FDrive_Init(); }
void Hardware_Init() { HAL_Init(); SystemClock_Config(); __GPIOA_CLK_ENABLE(); __GPIOB_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __GPIOF_CLK_ENABLE(); __GPIOG_CLK_ENABLE(); __DMA1_CLK_ENABLE(); // Для DAC1 (бикалка) __TIM6_CLK_ENABLE(); // Для отсчёта миллисекунд __TIM2_CLK_ENABLE(); // Для тиков __TIM7_CLK_ENABLE(); // Для DAC1 (бикалка) __DAC_CLK_ENABLE(); // Для бикалки __PWR_CLK_ENABLE(); __SYSCFG_CLK_ENABLE(); HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); // Timer ///////////////////////////////////////////////////////////////// //RCC_PCLK1Config(RCC_HCLK_Div1); // Таймер для мс HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 2, 0); HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); if (HAL_TIM_Base_Init(&handleTIM6forTimer) != HAL_OK) { HARDWARE_ERROR } if (HAL_TIM_Base_Start_IT(&handleTIM6forTimer) != HAL_OK) { HARDWARE_ERROR } // Таймер для тиков TIM_HandleTypeDef tim2handle = { TIM2, { 0, TIM_COUNTERMODE_UP, 0xffffffff, TIM_CLOCKDIVISION_DIV1 } }; if (HAL_TIM_Base_Init(&tim2handle) != HAL_OK) { HARDWARE_ERROR } if (HAL_TIM_Base_Start(&tim2handle) != HAL_OK) { HARDWARE_ERROR } Sound_Init(); #ifdef SPI_ENABLE Panel_Init(); #endif FSMC_Init(); ADC_Init(); FDrive_Init(); // Analog and DAC programmable SPI //////////////////////////////////////// GPIO_InitTypeDef isGPIOG = { GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_7, // GPIO_PIN_1 - для работы с дисплеем GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_HIGH, GPIO_AF0_MCO }; HAL_GPIO_Init(GPIOG, &isGPIOG); isGPIOG.Pin = GPIO_PIN_1; isGPIOG.Mode = GPIO_MODE_OUTPUT_PP; isGPIOG.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOG, &isGPIOG); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_1, GPIO_PIN_RESET); // PG1 - когда равен 1, чтение дисплея, в остальных случаях 0 RTC_Init(); }
//------------------------------------------------------------------------------------------------------------------------------------------------------ void Hardware_Init(void) { HAL_Init(); SystemClock_Config(); #ifndef _MS_VS __GPIOA_CLK_ENABLE(); __GPIOB_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __GPIOF_CLK_ENABLE(); __GPIOG_CLK_ENABLE(); __DMA1_CLK_ENABLE(); // Для DAC1 (бикалка) __TIM7_CLK_ENABLE(); // Для DAC1 (бикалка) __DAC_CLK_ENABLE(); // Для бикалки __PWR_CLK_ENABLE(); __SYSCFG_CLK_ENABLE(); #endif HAL_NVIC_SetPriority(SysTick_IRQn, PRIORITY_SYS_TICK); // Timer ///////////////////////////////////////////////////////////////// //RCC_PCLK1Config(RCC_HCLK_Div1); // Таймер для мс HAL_NVIC_SetPriority(TIM6_DAC_IRQn, PRIORITY_TIMER_TIM6); HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); Timer_Init(); Sound_Init(); Panel_Init(); FSMC_Init(); FSMC_SetMode(ModeFSMC_FPGA); RAM_Init(); FDrive_Init(); // Analog and DAC programmable SPI //////////////////////////////////////// GPIO_InitTypeDef isGPIO = { GPIO_PIN_10 | GPIO_PIN_12, // SPI SCLK, DATA GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_HIGH, GPIO_AF0_MCO }; HAL_GPIO_Init(GPIOC, &isGPIO); isGPIO.Pin = GPIO_PIN_3 | GPIO_PIN_6; // SPI select1, select2 HAL_GPIO_Init(GPIOD, &isGPIO); isGPIO.Pin = GPIO_PIN_10 | GPIO_PIN_15; // SPI select3, select4 HAL_GPIO_Init(GPIOG, &isGPIO); RTC_Init(); }