mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-07 14:42:08 +08:00
876256a268
9881e6118 Panda for Mazda (#165) 9a15d2f5b fix version newline a8ed7d219 add subaru outback/legacy to subaru safety (#259) bdeb1c953 mazda is #12 14ea4d2e0 merge safety gm in a single file bf1ef875e Add GM passive safety mode (#266) c131fffae fix canflash for pedal (#267) 3397b1527 only allow bootloader entry on debug builds d68356b92 Honda Nidec: fwd stock AEB (#257) 6f532c6d5 Black panda Jenkins (#256) d68508c79 Gpio race condition fix (#263) d69d05fc0 Fixed pedal not initializing (#262) 36067e01c Honda safety: fixed incorrect brake decoding. Due to the specific limit of 255, this change does not affect the safety behavior git-subtree-dir: panda git-subtree-split: 9881e61184ad0417e9e080767f09585a9c777621
66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
#define MODE_INPUT 0
|
|
#define MODE_OUTPUT 1
|
|
#define MODE_ALTERNATE 2
|
|
#define MODE_ANALOG 3
|
|
|
|
#define PULL_NONE 0
|
|
#define PULL_UP 1
|
|
#define PULL_DOWN 2
|
|
|
|
#define OUTPUT_TYPE_PUSH_PULL 0U
|
|
#define OUTPUT_TYPE_OPEN_DRAIN 1U
|
|
|
|
void set_gpio_mode(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int mode) {
|
|
ENTER_CRITICAL();
|
|
uint32_t tmp = GPIO->MODER;
|
|
tmp &= ~(3U << (pin * 2U));
|
|
tmp |= (mode << (pin * 2U));
|
|
GPIO->MODER = tmp;
|
|
EXIT_CRITICAL();
|
|
}
|
|
|
|
void set_gpio_output(GPIO_TypeDef *GPIO, unsigned int pin, bool enabled) {
|
|
ENTER_CRITICAL();
|
|
if (enabled) {
|
|
GPIO->ODR |= (1U << pin);
|
|
} else {
|
|
GPIO->ODR &= ~(1U << pin);
|
|
}
|
|
set_gpio_mode(GPIO, pin, MODE_OUTPUT);
|
|
EXIT_CRITICAL();
|
|
}
|
|
|
|
void set_gpio_output_type(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int output_type){
|
|
ENTER_CRITICAL();
|
|
if(output_type == OUTPUT_TYPE_OPEN_DRAIN) {
|
|
GPIO->OTYPER |= (1U << pin);
|
|
} else {
|
|
GPIO->OTYPER &= ~(1U << pin);
|
|
}
|
|
EXIT_CRITICAL();
|
|
}
|
|
|
|
void set_gpio_alternate(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int mode) {
|
|
ENTER_CRITICAL();
|
|
uint32_t tmp = GPIO->AFR[pin >> 3U];
|
|
tmp &= ~(0xFU << ((pin & 7U) * 4U));
|
|
tmp |= mode << ((pin & 7U) * 4U);
|
|
GPIO->AFR[pin >> 3] = tmp;
|
|
set_gpio_mode(GPIO, pin, MODE_ALTERNATE);
|
|
EXIT_CRITICAL();
|
|
}
|
|
|
|
void set_gpio_pullup(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int mode) {
|
|
ENTER_CRITICAL();
|
|
uint32_t tmp = GPIO->PUPDR;
|
|
tmp &= ~(3U << (pin * 2U));
|
|
tmp |= (mode << (pin * 2U));
|
|
GPIO->PUPDR = tmp;
|
|
EXIT_CRITICAL();
|
|
}
|
|
|
|
int get_gpio_input(GPIO_TypeDef *GPIO, unsigned int pin) {
|
|
return (GPIO->IDR & (1U << pin)) == (1U << pin);
|
|
}
|
|
|