stm: add basic Servo class, and stop and standby functions.
This commit is contained in:
parent
ec643130d0
commit
5285155ef7
115
stm/main.c
115
stm/main.c
@ -1,7 +1,9 @@
|
||||
#include <stdio.h>
|
||||
#include <stm32f4xx.h>
|
||||
#include <stm32f4xx_rcc.h>
|
||||
#include <stm32f4xx_syscfg.h>
|
||||
#include <stm32f4xx_gpio.h>
|
||||
#include <stm32f4xx_exti.h>
|
||||
#include <stm32f4xx_tim.h>
|
||||
#include <stm32f4xx_pwr.h>
|
||||
#include <stm32f4xx_rtc.h>
|
||||
@ -68,6 +70,30 @@ void sw_init(void) {
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
||||
GPIO_Init(PYB_USRSW_PORT, &GPIO_InitStructure);
|
||||
|
||||
// the rest does the EXTI interrupt
|
||||
|
||||
/* Enable SYSCFG clock */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
||||
|
||||
/* Connect EXTI Line13 to PA13 pin */
|
||||
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource13);
|
||||
|
||||
/* Configure EXTI Line13, rising edge */
|
||||
EXTI_InitTypeDef EXTI_InitStructure;
|
||||
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
|
||||
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
||||
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
||||
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||
EXTI_Init(&EXTI_InitStructure);
|
||||
|
||||
/* Enable and set EXTI15_10 Interrupt to the lowest priority */
|
||||
NVIC_InitTypeDef NVIC_InitStructure;
|
||||
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
}
|
||||
|
||||
int sw_get(void) {
|
||||
@ -173,6 +199,34 @@ py_obj_t pyb_sw(void) {
|
||||
}
|
||||
}
|
||||
|
||||
py_obj_t servo_obj_angle(py_obj_t self, py_obj_t angle) {
|
||||
machine_uint_t servo_id;
|
||||
py_user_get_data(self, &servo_id, NULL);
|
||||
machine_int_t v = 152 + 85.0 * py_obj_get_float(angle) / 90.0;
|
||||
if (v < 65) { v = 65; }
|
||||
if (v > 210) { v = 210; }
|
||||
switch (servo_id) {
|
||||
case 1: TIM2->CCR1 = v; break;
|
||||
case 2: TIM2->CCR2 = v; break;
|
||||
case 3: TIM2->CCR3 = v; break;
|
||||
case 4: TIM2->CCR4 = v; break;
|
||||
}
|
||||
return py_const_none;
|
||||
}
|
||||
|
||||
const py_user_info_t servo_obj_info = {
|
||||
"Servo",
|
||||
NULL, // print
|
||||
{
|
||||
{"angle", 1, servo_obj_angle},
|
||||
{NULL, 0, NULL},
|
||||
}
|
||||
};
|
||||
|
||||
py_obj_t pyb_Servo(py_obj_t servo_id) {
|
||||
return py_obj_new_user(&servo_obj_info, (machine_uint_t)py_obj_get_int(servo_id), 0);
|
||||
}
|
||||
|
||||
/*
|
||||
void g(uint i) {
|
||||
printf("g:%d\n", i);
|
||||
@ -272,6 +326,51 @@ static py_obj_t pyb_info(void) {
|
||||
return py_const_none;
|
||||
}
|
||||
|
||||
static void SYSCLKConfig_STOP(void) {
|
||||
/* After wake-up from STOP reconfigure the system clock */
|
||||
/* Enable HSE */
|
||||
RCC_HSEConfig(RCC_HSE_ON);
|
||||
|
||||
/* Wait till HSE is ready */
|
||||
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET) {
|
||||
}
|
||||
|
||||
/* Enable PLL */
|
||||
RCC_PLLCmd(ENABLE);
|
||||
|
||||
/* Wait till PLL is ready */
|
||||
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
|
||||
}
|
||||
|
||||
/* Select PLL as system clock source */
|
||||
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
|
||||
|
||||
/* Wait till PLL is used as system clock source */
|
||||
while (RCC_GetSYSCLKSource() != 0x08) {
|
||||
}
|
||||
}
|
||||
|
||||
static py_obj_t pyb_stop(void) {
|
||||
PWR_EnterSTANDBYMode();
|
||||
//PWR_FlashPowerDownCmd(ENABLE); don't know what the logic is with this
|
||||
|
||||
/* Enter Stop Mode */
|
||||
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
|
||||
|
||||
/* Configures system clock after wake-up from STOP: enable HSE, PLL and select
|
||||
* PLL as system clock source (HSE and PLL are disabled in STOP mode) */
|
||||
SYSCLKConfig_STOP();
|
||||
|
||||
//PWR_FlashPowerDownCmd(DISABLE);
|
||||
|
||||
return py_const_none;
|
||||
}
|
||||
|
||||
static py_obj_t pyb_standby(void) {
|
||||
PWR_EnterSTANDBYMode();
|
||||
return py_const_none;
|
||||
}
|
||||
|
||||
py_obj_t pyb_usart_send(py_obj_t data) {
|
||||
usart_tx_char(py_obj_get_int(data));
|
||||
return py_const_none;
|
||||
@ -322,6 +421,9 @@ int readline(vstr_t *line, const char *prompt) {
|
||||
break;
|
||||
}
|
||||
sys_tick_delay_ms(1);
|
||||
if (storage_needs_flush()) {
|
||||
storage_flush();
|
||||
}
|
||||
}
|
||||
if (escape == 0) {
|
||||
if (c == 4 && vstr_len(line) == len) {
|
||||
@ -422,7 +524,7 @@ void do_repl(void) {
|
||||
rt_call_function_0(module_fun);
|
||||
nlr_pop();
|
||||
uint32_t ticks = sys_tick_counter - start; // TODO implement a function that does this properly
|
||||
printf("(took %lu ms)\n", ticks);
|
||||
//printf("(took %lu ms)\n", ticks);
|
||||
} else {
|
||||
// uncaught exception
|
||||
py_obj_print((py_obj_t)nlr.ret_val);
|
||||
@ -583,8 +685,8 @@ void servo_init(void) {
|
||||
py_obj_t pyb_servo_set(py_obj_t port, py_obj_t value) {
|
||||
int p = py_obj_get_int(port);
|
||||
int v = py_obj_get_int(value);
|
||||
if (v < 100) { v = 100; }
|
||||
if (v > 200) { v = 200; }
|
||||
if (v < 50) { v = 50; }
|
||||
if (v > 250) { v = 250; }
|
||||
switch (p) {
|
||||
case 1: TIM2->CCR1 = v; break;
|
||||
case 2: TIM2->CCR2 = v; break;
|
||||
@ -843,13 +945,13 @@ soft_reset:
|
||||
servo_init();
|
||||
|
||||
// audio
|
||||
audio_init();
|
||||
//audio_init();
|
||||
|
||||
// timer
|
||||
timer_init();
|
||||
|
||||
// RNG
|
||||
{
|
||||
if (0) {
|
||||
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
|
||||
RNG_Cmd(ENABLE);
|
||||
}
|
||||
@ -858,6 +960,8 @@ soft_reset:
|
||||
{
|
||||
py_obj_t m = py_module_new();
|
||||
rt_store_attr(m, qstr_from_str_static("info"), rt_make_function_0(pyb_info));
|
||||
rt_store_attr(m, qstr_from_str_static("stop"), rt_make_function_0(pyb_stop));
|
||||
rt_store_attr(m, qstr_from_str_static("standby"), rt_make_function_0(pyb_standby));
|
||||
rt_store_attr(m, qstr_from_str_static("source_dir"), rt_make_function_1(pyb_source_dir));
|
||||
rt_store_attr(m, qstr_from_str_static("main"), rt_make_function_1(pyb_main));
|
||||
rt_store_attr(m, qstr_from_str_static("sync"), rt_make_function_0(pyb_sync));
|
||||
@ -875,6 +979,7 @@ soft_reset:
|
||||
rt_store_attr(m, qstr_from_str_static("ustat"), rt_make_function_0(pyb_usart_status));
|
||||
rt_store_attr(m, qstr_from_str_static("rng"), rt_make_function_0(pyb_rng_get));
|
||||
rt_store_attr(m, qstr_from_str_static("Led"), rt_make_function_1(pyb_Led));
|
||||
rt_store_attr(m, qstr_from_str_static("Servo"), rt_make_function_1(pyb_Servo));
|
||||
rt_store_name(qstr_from_str_static("pyb"), m);
|
||||
|
||||
rt_store_name(qstr_from_str_static("open"), rt_make_function_2(pyb_io_open));
|
||||
|
@ -1,291 +1,298 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32fxxx_it.c
|
||||
* @author MCD Application Team
|
||||
* @version V1.1.0
|
||||
* @date 19-March-2012
|
||||
* @brief Main Interrupt Service Routines.
|
||||
* This file provides all exceptions handler and peripherals interrupt
|
||||
* service routine.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||
* You may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at:
|
||||
*
|
||||
* http://www.st.com/software_license_agreement_liberty_v2
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32fxxx_it.h"
|
||||
#include "stm32f4xx_exti.h"
|
||||
#include "usb_core.h"
|
||||
//#include "usbd_core.h"
|
||||
|
||||
//#include "usbd_cdc_core.h"
|
||||
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
extern USB_OTG_CORE_HANDLE USB_OTG_dev;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
extern uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
|
||||
#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED
|
||||
extern uint32_t USBD_OTG_EP1IN_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
extern uint32_t USBD_OTG_EP1OUT_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
#endif
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M Processor Exceptions Handlers */
|
||||
/******************************************************************************/
|
||||
|
||||
extern void fatality();
|
||||
|
||||
/**
|
||||
* @brief This function handles NMI exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Hard Fault exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Memory Manage exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Memory Manage exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Bus Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Bus Fault exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Usage Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Usage Fault exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles SVCall exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug Monitor exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles PendSVC exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI15_10_IRQ Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
#ifdef USE_USB_OTG_FS
|
||||
void OTG_FS_WKUP_IRQHandler(void)
|
||||
{
|
||||
if(USB_OTG_dev.cfg.low_power)
|
||||
{
|
||||
*(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ;
|
||||
SystemInit();
|
||||
USB_OTG_UngateClock(&USB_OTG_dev);
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line18);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI15_10_IRQ Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
#ifdef USE_USB_OTG_HS
|
||||
void OTG_HS_WKUP_IRQHandler(void)
|
||||
{
|
||||
if(USB_OTG_dev.cfg.low_power)
|
||||
{
|
||||
*(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ;
|
||||
SystemInit();
|
||||
USB_OTG_UngateClock(&USB_OTG_dev);
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line20);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This function handles OTG_HS Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
#ifdef USE_USB_OTG_HS
|
||||
void OTG_HS_IRQHandler(void)
|
||||
#else
|
||||
void OTG_FS_IRQHandler(void)
|
||||
#endif
|
||||
{
|
||||
USBD_OTG_ISR_Handler (&USB_OTG_dev);
|
||||
}
|
||||
|
||||
#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED
|
||||
/**
|
||||
* @brief This function handles EP1_IN Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void OTG_HS_EP1_IN_IRQHandler(void)
|
||||
{
|
||||
USBD_OTG_EP1IN_ISR_Handler (&USB_OTG_dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles EP1_OUT Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void OTG_HS_EP1_OUT_IRQHandler(void)
|
||||
{
|
||||
USBD_OTG_EP1OUT_ISR_Handler (&USB_OTG_dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This function handles SDIO global interrupt request.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SDIO_IRQHandler(void)
|
||||
{
|
||||
/* Process All SDIO Interrupt Sources */
|
||||
// dpgeorge: i don't think this is used at the moment...
|
||||
extern void SD_ProcessIRQSrc(void);
|
||||
SD_ProcessIRQSrc();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32Fxxx Peripherals Interrupt Handlers */
|
||||
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
|
||||
/* available peripheral interrupt handler's name please refer to the startup */
|
||||
/* file (startup_stm32fxxx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles PPP interrupt request.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
/*void PPP_IRQHandler(void)
|
||||
{
|
||||
}*/
|
||||
|
||||
// TIM6 Update event
|
||||
#include "stm32f4xx_tim.h"
|
||||
void TIM6_DAC_IRQHandler(void) {
|
||||
// work out if it's TIM6 that had the interrupt
|
||||
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) {
|
||||
extern void timer_interrupt(void);
|
||||
timer_interrupt();
|
||||
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
|
||||
} else {
|
||||
// it seems we get 2 calls to this interrupt handler, and only 1 is the TIM_IT_Update...
|
||||
// TODO work out what the other one is, and if we can disable it
|
||||
//printf("unhandled TIM6_DAC\n");
|
||||
}
|
||||
}
|
||||
|
||||
#include "std.h"
|
||||
#include "led.h"
|
||||
// EXTI, for cc3000 on A14
|
||||
void EXTI15_10_IRQHandler(void) {
|
||||
// work out if it's A14 that had the interrupt
|
||||
if (EXTI_GetITStatus(EXTI_Line14) != RESET) {
|
||||
led_toggle(PYB_LED_G2);
|
||||
extern void SpiIntGPIOHandler(void);
|
||||
extern uint32_t exti14_enabled;
|
||||
extern uint32_t exti14_missed;
|
||||
//printf("-> EXTI14 en=%lu miss=%lu\n", exti14_enabled, exti14_missed);
|
||||
if (exti14_enabled) {
|
||||
exti14_missed = 0;
|
||||
SpiIntGPIOHandler(); // CC3000 interrupt
|
||||
} else {
|
||||
exti14_missed = 1;
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line14);
|
||||
//printf("<- EXTI14 done\n");
|
||||
}
|
||||
}
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32fxxx_it.c
|
||||
* @author MCD Application Team
|
||||
* @version V1.1.0
|
||||
* @date 19-March-2012
|
||||
* @brief Main Interrupt Service Routines.
|
||||
* This file provides all exceptions handler and peripherals interrupt
|
||||
* service routine.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||
* You may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at:
|
||||
*
|
||||
* http://www.st.com/software_license_agreement_liberty_v2
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32fxxx_it.h"
|
||||
#include "stm32f4xx_exti.h"
|
||||
#include "usb_core.h"
|
||||
//#include "usbd_core.h"
|
||||
|
||||
//#include "usbd_cdc_core.h"
|
||||
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
extern USB_OTG_CORE_HANDLE USB_OTG_dev;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
extern uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
|
||||
#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED
|
||||
extern uint32_t USBD_OTG_EP1IN_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
extern uint32_t USBD_OTG_EP1OUT_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
#endif
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M Processor Exceptions Handlers */
|
||||
/******************************************************************************/
|
||||
|
||||
extern void fatality();
|
||||
|
||||
/**
|
||||
* @brief This function handles NMI exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Hard Fault exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Memory Manage exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Memory Manage exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Bus Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Bus Fault exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Usage Fault exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Usage Fault exception occurs */
|
||||
fatality();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles SVCall exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug Monitor exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles PendSVC exception.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI15_10_IRQ Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
#ifdef USE_USB_OTG_FS
|
||||
void OTG_FS_WKUP_IRQHandler(void)
|
||||
{
|
||||
if(USB_OTG_dev.cfg.low_power)
|
||||
{
|
||||
*(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ;
|
||||
SystemInit();
|
||||
USB_OTG_UngateClock(&USB_OTG_dev);
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line18);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI15_10_IRQ Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
#ifdef USE_USB_OTG_HS
|
||||
void OTG_HS_WKUP_IRQHandler(void)
|
||||
{
|
||||
if(USB_OTG_dev.cfg.low_power)
|
||||
{
|
||||
*(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ;
|
||||
SystemInit();
|
||||
USB_OTG_UngateClock(&USB_OTG_dev);
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line20);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This function handles OTG_HS Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
#ifdef USE_USB_OTG_HS
|
||||
void OTG_HS_IRQHandler(void)
|
||||
#else
|
||||
void OTG_FS_IRQHandler(void)
|
||||
#endif
|
||||
{
|
||||
USBD_OTG_ISR_Handler (&USB_OTG_dev);
|
||||
}
|
||||
|
||||
#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED
|
||||
/**
|
||||
* @brief This function handles EP1_IN Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void OTG_HS_EP1_IN_IRQHandler(void)
|
||||
{
|
||||
USBD_OTG_EP1IN_ISR_Handler (&USB_OTG_dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles EP1_OUT Handler.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void OTG_HS_EP1_OUT_IRQHandler(void)
|
||||
{
|
||||
USBD_OTG_EP1OUT_ISR_Handler (&USB_OTG_dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This function handles SDIO global interrupt request.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SDIO_IRQHandler(void)
|
||||
{
|
||||
/* Process All SDIO Interrupt Sources */
|
||||
// dpgeorge: i don't think this is used at the moment...
|
||||
extern void SD_ProcessIRQSrc(void);
|
||||
SD_ProcessIRQSrc();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32Fxxx Peripherals Interrupt Handlers */
|
||||
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
|
||||
/* available peripheral interrupt handler's name please refer to the startup */
|
||||
/* file (startup_stm32fxxx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles PPP interrupt request.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
/*void PPP_IRQHandler(void)
|
||||
{
|
||||
}*/
|
||||
|
||||
// TIM6 Update event
|
||||
#include "stm32f4xx_tim.h"
|
||||
void TIM6_DAC_IRQHandler(void) {
|
||||
// work out if it's TIM6 that had the interrupt
|
||||
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) {
|
||||
extern void timer_interrupt(void);
|
||||
timer_interrupt();
|
||||
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
|
||||
} else {
|
||||
// it seems we get 2 calls to this interrupt handler, and only 1 is the TIM_IT_Update...
|
||||
// TODO work out what the other one is, and if we can disable it
|
||||
//printf("unhandled TIM6_DAC\n");
|
||||
}
|
||||
}
|
||||
|
||||
#include "std.h"
|
||||
#include "led.h"
|
||||
// EXTI
|
||||
// for USRSW on A13
|
||||
// for cc3000 on A14
|
||||
void EXTI15_10_IRQHandler(void) {
|
||||
// work out if it's A13 that had the interrupt
|
||||
if (EXTI_GetITStatus(EXTI_Line13) != RESET) {
|
||||
// this is used just to wake the device
|
||||
EXTI_ClearITPendingBit(EXTI_Line13);
|
||||
}
|
||||
// work out if it's A14 that had the interrupt
|
||||
if (EXTI_GetITStatus(EXTI_Line14) != RESET) {
|
||||
led_toggle(PYB_LED_G2);
|
||||
extern void SpiIntGPIOHandler(void);
|
||||
extern uint32_t exti14_enabled;
|
||||
extern uint32_t exti14_missed;
|
||||
//printf("-> EXTI14 en=%lu miss=%lu\n", exti14_enabled, exti14_missed);
|
||||
if (exti14_enabled) {
|
||||
exti14_missed = 0;
|
||||
SpiIntGPIOHandler(); // CC3000 interrupt
|
||||
} else {
|
||||
exti14_missed = 1;
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line14);
|
||||
//printf("<- EXTI14 done\n");
|
||||
}
|
||||
}
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
|
Loading…
x
Reference in New Issue
Block a user