diff --git a/ChangeLog b/ChangeLog index c08b645..4d0b53e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-11-15 NIIBE Yutaka + + * mcu/usb-stm32f103.c (usb_lld_init): Enable USB wake up + by EXTI. + 2017-11-15 NIIBE Yutaka * chopstx.c (chopstx_conf_idle): Call chx_sleep_mode. diff --git a/entry.c b/entry.c index 29d520d..21225de 100644 --- a/entry.c +++ b/entry.c @@ -205,23 +205,23 @@ handler vector_table[] __attribute__ ((section(".startup.vectors"))) = { preempt, /* PendSV */ chx_timer_expired, /* SysTick */ /* 0x40 */ - chx_handle_intr /* WWDG */, chx_handle_intr /* PVD */, - chx_handle_intr /* TAMPER */, chx_handle_intr /* RTC */, - chx_handle_intr /* FLASH */, chx_handle_intr /* RCC */, - chx_handle_intr /* EXTI0 */, chx_handle_intr /* EXTI1 */, + chx_handle_intr /* WWDG */, chx_handle_intr /* PVD */, + chx_handle_intr /* TAMPER */, chx_handle_intr /* RTC */, + chx_handle_intr /* FLASH */, chx_handle_intr /* RCC */, + chx_handle_intr /* EXTI0 */, chx_handle_intr /* EXTI1 */, /* 0x60 */ - chx_handle_intr /* EXTI2 */, chx_handle_intr /* EXTI3 */, - chx_handle_intr /* EXTI4 */, chx_handle_intr /* DMA1 CH1 */, - chx_handle_intr /* DMA1 CH2 */, chx_handle_intr /* DMA1 CH3 */, - chx_handle_intr /* DMA1 CH4 */, chx_handle_intr /* DMA1 CH5 */, + chx_handle_intr /* EXTI2 */, chx_handle_intr /* EXTI3 */, + chx_handle_intr /* EXTI4 */, chx_handle_intr /* DMA1 CH1 */, + chx_handle_intr /* DMA1 CH2 */, chx_handle_intr /* DMA1 CH3 */, + chx_handle_intr /* DMA1 CH4 */, chx_handle_intr /* DMA1 CH5 */, /* 0x80 */ - chx_handle_intr /* DMA1 CH6 */, chx_handle_intr /* DMA1 CH7 */, - chx_handle_intr /* ADC1_2 */, chx_handle_intr /* USB HP */, + chx_handle_intr /* DMA1 CH6 */, chx_handle_intr /* DMA1 CH7 */, + chx_handle_intr /* ADC1_2 */, chx_handle_intr /* USB HP */, /* 0x90 */ - chx_handle_intr /* USB LP */, chx_handle_intr /* CAN */, - /* ... and more. EXT9_5, TIMx, I2C, SPI, USART, EXT15_10 */ - chx_handle_intr, chx_handle_intr, - /* 0xA0 */ + chx_handle_intr /* USB LP */, chx_handle_intr /* CAN RX1 */, + chx_handle_intr /* CAN SCE */, chx_handle_intr /* EXT9_5 */, + /* 0xa0 */ + /* ... and more. TIMx, I2C, SPI, USART... */ chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, /* 0xc0 */ @@ -229,15 +229,16 @@ handler vector_table[] __attribute__ ((section(".startup.vectors"))) = { /* STM32F0 doesn't have more. */ chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, - chx_handle_intr, chx_handle_intr, chx_handle_intr, + /* 0xe0 */ + chx_handle_intr /* EXT15_10 */, chx_handle_intr /* RTCAlarm */, + chx_handle_intr /* USBWakeup */, chx_handle_intr, #endif #if !defined(STM32F10X_MD) - /* High-density chips have more; RTCAlarm, USBWakeup, ... , DMA2_Channel4_5 */ + /* High-density chips have more; ... DMA2_Channel4_5 */ chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, chx_handle_intr, - chx_handle_intr, chx_handle_intr, chx_handle_intr, #endif }; #endif diff --git a/mcu/usb-stm32f103.c b/mcu/usb-stm32f103.c index 648b525..6a8fddf 100644 --- a/mcu/usb-stm32f103.c +++ b/mcu/usb-stm32f103.c @@ -1,7 +1,7 @@ /* * usb-stm32f103.c - USB driver for STM32F103 * - * Copyright (C) 2016 Flying Stone Technology + * Copyright (C) 2016, 2017 Flying Stone Technology * Author: NIIBE Yutaka * * This file is a part of Chopstx, a thread library for embedded. @@ -29,6 +29,7 @@ #include #include +#include "mcu/stm32f103.h" #include "sys-stm32f103.h" #include "usb_lld.h" #include "usb_lld_driver.h" @@ -341,6 +342,11 @@ void usb_lld_init (struct usb_dev *dev, uint8_t feature) st103_set_istr (0); st103_set_cntr (CNTR_CTRM | CNTR_OVRM | CNTR_ERRM | CNTR_WKUPM | CNTR_SUSPM | CNTR_RESETM); + + /* Setting of EXTI wakeup interrupt to break sleep mode. */ + EXTI->RTSR |= (1 << 18); /* Rising trigger selection */ + EXTI->PR |= (1 << 18); /* Clear pending bit */ + EXTI->IMR |= (1 << 18); /* Interrupt mask disabled */ } void usb_lld_prepare_shutdown (void)