Fixed GMLAN interrupts when used in Tesla safety (#428)

master
robbederks 2020-01-22 15:34:06 -08:00 committed by GitHub
parent f67ec28e3f
commit 186d9dcb3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 4 deletions

View File

@ -122,7 +122,12 @@ int get_bit_message(char *out, CAN_FIFOMailBox_TypeDef *to_bang) {
return len; return len;
} }
void TIM4_IRQ_Handler(void);
void setup_timer4(void) { void setup_timer4(void) {
// register interrupt
REGISTER_INTERRUPT(TIM4_IRQn, TIM4_IRQ_Handler, 40000U, FAULT_INTERRUPT_RATE_GMLAN)
// setup // setup
register_set(&(TIM4->PSC), (48-1), 0xFFFFU); // Tick on 1 us register_set(&(TIM4->PSC), (48-1), 0xFFFFU); // Tick on 1 us
register_set(&(TIM4->CR1), TIM_CR1_CEN, 0x3FU); // Enable register_set(&(TIM4->CR1), TIM_CR1_CEN, 0x3FU); // Enable
@ -236,7 +241,6 @@ void TIM4_IRQ_Handler(void) {
gmlan_sendmax = -1; // exit gmlan_sendmax = -1; // exit
} }
} }
TIM4->SR = 0;
} else if (gmlan_alt_mode == GPIO_SWITCH) { } else if (gmlan_alt_mode == GPIO_SWITCH) {
if ((TIM4->SR & TIM_SR_UIF) && (gmlan_switch_below_timeout != -1)) { if ((TIM4->SR & TIM_SR_UIF) && (gmlan_switch_below_timeout != -1)) {
if ((can_timeout_counter == 0) && gmlan_switch_timeout_enable) { if ((can_timeout_counter == 0) && gmlan_switch_timeout_enable) {
@ -259,10 +263,10 @@ void TIM4_IRQ_Handler(void) {
} }
} }
} }
TIM4->SR = 0;
} else { } else {
puts("invalid gmlan_alt_mode\n"); // Invalid GMLAN mode. Do not put a print statement here, way too fast to keep up with
} }
TIM4->SR = 0;
} }
bool bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) { bool bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
@ -280,7 +284,6 @@ bool bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
set_gpio_mode(GPIOB, 13, MODE_OUTPUT); set_gpio_mode(GPIOB, 13, MODE_OUTPUT);
// 33kbps // 33kbps
REGISTER_INTERRUPT(TIM4_IRQn, TIM4_IRQ_Handler, 40000U, FAULT_INTERRUPT_RATE_GMLAN)
setup_timer4(); setup_timer4();
} }
return gmlan_send_ok; return gmlan_send_ok;