diff --git a/usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin b/usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin index db404a7..19edd89 100644 Binary files a/usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin and b/usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin differ diff --git a/usb_bootloader/STM32F1/hardware.c b/usb_bootloader/STM32F1/hardware.c index edafbab..81223a1 100644 --- a/usb_bootloader/STM32F1/hardware.c +++ b/usb_bootloader/STM32F1/hardware.c @@ -31,7 +31,7 @@ */ #include "hardware.h" - +/* void setPin(u32 bank, u8 pin) { u32 pinMask = 0x1 << (pin); SET_REG(GPIO_BSRR(bank), pinMask); @@ -41,6 +41,11 @@ void resetPin(u32 bank, u8 pin) { u32 pinMask = 0x1 << (16 + pin); SET_REG(GPIO_BSRR(bank), pinMask); } +*/ +void gpio_write_bit(u32 bank, u8 pin, u8 val) { + val = !val; /* "set" bits are lower than "reset" bits */ + SET_REG(GPIO_BSRR(bank), (1U << pin) << (16 * val)); +} bool readPin(u32 bank, u8 pin) { // todo, implement read @@ -52,18 +57,18 @@ bool readPin(u32 bank, u8 pin) { } void strobePin(u32 bank, u8 pin, u8 count, u32 rate) { - resetPin(bank, pin); + gpio_write_bit( bank,pin,0); u32 c; while (count-- > 0) { for (c = rate; c > 0; c--) { asm volatile("nop"); } - setPin(bank, pin); + gpio_write_bit( bank,pin,1); for (c = rate; c > 0; c--) { asm volatile("nop"); } - resetPin(bank, pin); + gpio_write_bit( bank,pin,0); } } @@ -101,7 +106,7 @@ void setupLED (void) { /* Setup LED pin as output open drain */ SET_REG(LED_BANK_CR,(GET_REG(LED_BANK_CR) & LED_CR_MASK) | LED_CR_MODE); - setPin(LED_BANK, LED); + gpio_write_bit(LED_BANK, LED,1); } void setupBUTTON (void) { @@ -110,7 +115,7 @@ void setupBUTTON (void) { /* Setup button pin as floating input */ SET_REG(BUT_BANK_CR,(GET_REG(BUT_BANK_CR) & BUT_CR_MASK) | BUT_CR_OUTPUT_IN); - setPin(BUTTON_BANK, BUTTON); + gpio_write_bit(BUTTON_BANK, BUTTON,1); } void setupFLASH() { diff --git a/usb_bootloader/STM32F1/hardware.h b/usb_bootloader/STM32F1/hardware.h index 12615e4..bcc9747 100644 --- a/usb_bootloader/STM32F1/hardware.h +++ b/usb_bootloader/STM32F1/hardware.h @@ -169,8 +169,10 @@ typedef struct { } SCB_TypeDef; -void setPin(u32 bank, u8 pin); -void resetPin(u32 bank, u8 pin); +//void setPin(u32 bank, u8 pin); +//void resetPin(u32 bank, u8 pin); +void gpio_write_bit(u32 bank, u8 pin, u8 val); + bool readPin(u32 bank, u8 pin); void strobePin(u32 bank, u8 pin, u8 count, u32 rate); diff --git a/usb_bootloader/STM32F1/usb.c b/usb_bootloader/STM32F1/usb.c index 62c4234..cd4a925 100644 --- a/usb_bootloader/STM32F1/usb.c +++ b/usb_bootloader/STM32F1/usb.c @@ -40,20 +40,20 @@ void setupUSB (void) { /* Setup USB DISC pin as output open drain */ SET_REG(USB_DISC_CR, (GET_REG(USB_DISC_CR) & USB_DISC_CR_MASK) | USB_DISC_CR_OUTPUT_OD); - setPin (USB_DISC_BANK,USB_DISC); + gpio_write_bit(USB_DISC_BANK,USB_DISC,1); /* turn on the USB clock */ pRCC->APB1ENR |= RCC_APB1ENR_USB_CLK; /* initialize the usb application */ - resetPin (USB_DISC_BANK,USB_DISC); /* present ourselves to the host */ + gpio_write_bit(USB_DISC_BANK,USB_DISC,0); /* present ourselves to the host */ usbAppInit(); } #if 0 void usbDsbBus(void) { - setPin(USB_DISC_BANK,USB_DISC); + gpio_write_bit(USB_DISC_BANK,USB_DISC,1); } #endif