Fix PD IRQ
This commit is contained in:
@@ -13,10 +13,13 @@
|
|||||||
*/
|
*/
|
||||||
const uint16_t USB_PD_Desired_Levels[] = {
|
const uint16_t USB_PD_Desired_Levels[] = {
|
||||||
//mV desired input, mA minimum required current
|
//mV desired input, mA minimum required current
|
||||||
12000, 2400, //12V @ 2.4A
|
//Tip is ~ 7.5 ohms
|
||||||
9000, 2000, //9V @ 2A
|
20000, 2666, // 20V, 2.6A
|
||||||
|
15000, 2000, // 15V 2A
|
||||||
|
12000, 1600, //12V @ 1.6A
|
||||||
|
9000, 1200, //9V @ 1.2A
|
||||||
5000, 100, //5V @ whatever
|
5000, 100, //5V @ whatever
|
||||||
|
|
||||||
};
|
};
|
||||||
const uint8_t USB_PD_Desired_Levels_Len = 3;
|
const uint8_t USB_PD_Desired_Levels_Len = 5;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "IRQ.h"
|
#include "IRQ.h"
|
||||||
|
#include "Pins.h"
|
||||||
|
#include "int_n.h"
|
||||||
void ADC0_1_IRQHandler(void) {
|
void ADC0_1_IRQHandler(void) {
|
||||||
|
|
||||||
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||||
@@ -51,3 +52,17 @@ void setTipPWM(uint8_t pulse) {
|
|||||||
|
|
||||||
pendingPWM = pulse;
|
pendingPWM = pulse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EXTI5_9_IRQHandler(void)
|
||||||
|
{
|
||||||
|
#ifdef POW_PD
|
||||||
|
if (RESET != exti_interrupt_flag_get(EXTI_5)){
|
||||||
|
exti_interrupt_flag_clear(EXTI_5);
|
||||||
|
|
||||||
|
if(RESET == gpio_input_bit_get(FUSB302_IRQ_GPIO_Port, FUSB302_IRQ_Pin)){
|
||||||
|
InterruptHandler::irqCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
void ADC0_1_IRQHandler(void);
|
void ADC0_1_IRQHandler(void);
|
||||||
void TIMER1_IRQHandler(void);
|
void TIMER1_IRQHandler(void);
|
||||||
|
void EXTI5_9_IRQHandler(void);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -35,4 +35,7 @@
|
|||||||
#define SDA_Pin BIT(7)
|
#define SDA_Pin BIT(7)
|
||||||
#define SDA_GPIO_Port GPIOB
|
#define SDA_GPIO_Port GPIOB
|
||||||
|
|
||||||
|
#define FUSB302_IRQ_Pin BIT(5)
|
||||||
|
#define FUSB302_IRQ_GPIO_Port GPIOB
|
||||||
|
|
||||||
#endif /* BSP_MINIWARE_PINS_H_ */
|
#endif /* BSP_MINIWARE_PINS_H_ */
|
||||||
|
|||||||
@@ -35,11 +35,12 @@ void hardware_init() {
|
|||||||
//Timers
|
//Timers
|
||||||
setup_timers();
|
setup_timers();
|
||||||
//Watchdog
|
//Watchdog
|
||||||
// setup_iwdg();
|
setup_iwdg();
|
||||||
|
|
||||||
/* enable TIMER1 - PWM control timing*/
|
/* enable TIMER1 - PWM control timing*/
|
||||||
timer_enable(TIMER1);
|
timer_enable(TIMER1);
|
||||||
timer_enable(TIMER2);
|
timer_enable(TIMER2);
|
||||||
|
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL4_PRIO0);
|
||||||
eclic_global_interrupt_enable();
|
eclic_global_interrupt_enable();
|
||||||
}
|
}
|
||||||
// channel 0 -> temperature sensor, 1-> VIN
|
// channel 0 -> temperature sensor, 1-> VIN
|
||||||
@@ -64,8 +65,8 @@ void setup_gpio() {
|
|||||||
gpio_init(OLED_RESET_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,
|
gpio_init(OLED_RESET_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ,
|
||||||
OLED_RESET_Pin);
|
OLED_RESET_Pin);
|
||||||
//I2C as AF Open Drain
|
//I2C as AF Open Drain
|
||||||
gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_2MHZ, SDA_Pin);
|
gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin);
|
||||||
gpio_init(SCL_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_2MHZ, SCL_Pin);
|
gpio_init(SCL_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SCL_Pin);
|
||||||
//PWM output as AF Push Pull
|
//PWM output as AF Push Pull
|
||||||
gpio_init(PWM_Out_GPIO_Port, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,
|
gpio_init(PWM_Out_GPIO_Port, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,
|
||||||
PWM_Out_Pin);
|
PWM_Out_Pin);
|
||||||
@@ -78,6 +79,16 @@ void setup_gpio() {
|
|||||||
|
|
||||||
//Remap PB4 away from JTAG NJRST
|
//Remap PB4 away from JTAG NJRST
|
||||||
gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);
|
gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);
|
||||||
|
//Setup IRQ for USB-PD
|
||||||
|
gpio_init(FUSB302_IRQ_GPIO_Port, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, FUSB302_IRQ_Pin);
|
||||||
|
eclic_irq_enable(EXTI5_9_IRQn, 1, 1);
|
||||||
|
/* connect key EXTI line to key GPIO pin */
|
||||||
|
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_5);
|
||||||
|
|
||||||
|
/* configure key EXTI line */
|
||||||
|
exti_init(EXTI_5, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
|
||||||
|
exti_interrupt_flag_clear(EXTI_5);
|
||||||
|
|
||||||
//TODO - rest of pins as floating
|
//TODO - rest of pins as floating
|
||||||
}
|
}
|
||||||
void setup_dma() {
|
void setup_dma() {
|
||||||
@@ -114,7 +125,7 @@ void setup_i2c() {
|
|||||||
//TODO - DMA
|
//TODO - DMA
|
||||||
/* enable I2C0 clock */
|
/* enable I2C0 clock */
|
||||||
rcu_periph_clock_enable(RCU_I2C0);
|
rcu_periph_clock_enable(RCU_I2C0);
|
||||||
//Setup I20 at 100kHz with DMA?
|
//Setup I20 at 400kHz
|
||||||
i2c_clock_config(I2C0, 100 * 1000, I2C_DTCY_16_9);
|
i2c_clock_config(I2C0, 100 * 1000, I2C_DTCY_16_9);
|
||||||
i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x00);
|
i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x00);
|
||||||
i2c_enable(I2C0);
|
i2c_enable(I2C0);
|
||||||
@@ -189,8 +200,8 @@ void setup_adc() {
|
|||||||
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||||
adc_interrupt_enable(ADC0, ADC_INT_EOIC);
|
adc_interrupt_enable(ADC0, ADC_INT_EOIC);
|
||||||
eclic_irq_enable(ADC0_1_IRQn, 2, 0);
|
eclic_irq_enable(ADC0_1_IRQn, 2, 0);
|
||||||
// adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
||||||
// adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
|
adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
|
||||||
adc_tempsensor_vrefint_disable();
|
adc_tempsensor_vrefint_disable();
|
||||||
}
|
}
|
||||||
void setup_timers() {
|
void setup_timers() {
|
||||||
@@ -266,7 +277,6 @@ void setup_timers() {
|
|||||||
timer_ocintpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW;
|
timer_ocintpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW;
|
||||||
timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
|
timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
|
||||||
timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_ocintpara);
|
timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_ocintpara);
|
||||||
//todo
|
|
||||||
timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 50);
|
timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 50);
|
||||||
timer_channel_output_mode_config(TIMER2, TIMER_CH_0,
|
timer_channel_output_mode_config(TIMER2, TIMER_CH_0,
|
||||||
TIMER_OC_MODE_PWM0);
|
TIMER_OC_MODE_PWM0);
|
||||||
|
|||||||
@@ -70,9 +70,11 @@ void InterruptHandler::Thread(const void *arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
void InterruptHandler::irqCallback() {
|
void InterruptHandler::irqCallback() {
|
||||||
if (TaskHandle != NULL) {
|
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
|
||||||
BaseType_t taskWoke = pdFALSE;
|
if (TaskHandle != NULL) {
|
||||||
xTaskNotifyFromISR(TaskHandle, 0x01, eNotifyAction::eSetBits, &taskWoke);
|
BaseType_t taskWoke = pdFALSE;
|
||||||
portYIELD_FROM_ISR(taskWoke);
|
xTaskNotifyFromISR(TaskHandle, 0x01, eNotifyAction::eSetBits, &taskWoke);
|
||||||
|
portYIELD_FROM_ISR(taskWoke);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user