|

楼主 |
发表于 2013-3-17 12:06:14
|
显示全部楼层
本帖最后由 histamine 于 2013-3-17 12:08 编辑
@pophelix
我的代码是在maple主干上修改的,改完了才发现原来还有个maple-mini的分支
放上bootloader修改patch
- diff --git a/config.h b/config.h
- index def4f99..b35c00b 100644
- --- a/config.h
- +++ b/config.h
- @@ -35,21 +35,21 @@
-
- #include "common.h"
-
- -#define LED_BANK GPIOA
- -#define LED 5
- +#define LED_BANK GPIOB
- +#define LED 1
- #define BLINK_FAST 0x50000
- #define BLINK_SLOW 0x100000
-
- -#define BUTTON_BANK GPIOC
- -#define BUTTON 9
- +#define BUTTON_BANK GPIOB
- +#define BUTTON 8
-
- #define STARTUP_BLINKS 5
- -#define BOOTLOADER_WAIT 6
- +#define BOOTLOADER_WAIT 10
-
- #define USER_CODE_RAM ((u32)0x20000C00)
- #define RAM_END ((u32)0x20005000)
- #define USER_CODE_FLASH ((u32)0x08005000)
- -#define FLASH_END ((u32)0x08020000)
- +#define FLASH_END ((u32)0x08010000)
-
- #define VEND_ID0 0xAF
- #define VEND_ID1 0x1E
- diff --git a/hardware.c b/hardware.c
- index d3d985e..36f0f63 100644
- --- a/hardware.c
- +++ b/hardware.c
- @@ -101,18 +101,16 @@ void setupLED(void) {
-
- /* Setup APB2 (GPIOA) */
- rwmVal = GET_REG(RCC_APB2ENR);
- - rwmVal |= 0x00000004;
- + rwmVal |= 0x00000008;
- SET_REG(RCC_APB2ENR, rwmVal);
-
- /* Setup GPIOA Pin 5 as PP Out */
- - SET_REG(GPIO_CRL(GPIOA), 0x00100000);
- -
- - rwmVal = GET_REG(GPIO_CRL(GPIOA));
- - rwmVal &= 0xFF0FFFFF;
- - rwmVal |= 0x00100000;
- - SET_REG(GPIO_CRL(GPIOA), rwmVal);
- + rwmVal = GET_REG(GPIO_CRL(GPIOB));
- + rwmVal &= 0xFFFFFF0F;
- + rwmVal |= 0x00000010;
- + SET_REG(GPIO_CRL(GPIOB), rwmVal);
-
- - setPin(GPIOA, 5);
- + setPin(GPIOB, 1);
- }
-
- void setupBUTTON(void) {
- @@ -121,14 +119,14 @@ void setupBUTTON(void) {
-
- /* Setup APB2 (GPIOC) */
- rwmVal = GET_REG(RCC_APB2ENR);
- - rwmVal |= 0x00000010;
- + rwmVal |= 0x00000008;
- SET_REG(RCC_APB2ENR, rwmVal);
-
- /* Setup GPIOC Pin 9 as PP Out */
- - rwmVal = GET_REG(GPIO_CRH(GPIOC));
- - rwmVal &= 0xFFFFFF0F;
- - rwmVal |= 0x00000040;
- - SET_REG(GPIO_CRH(GPIOC), rwmVal);
- + rwmVal = GET_REG(GPIO_CRH(GPIOB));
- + rwmVal &= 0xFFFFFFF0;
- + rwmVal |= 0x00000001;
- + SET_REG(GPIO_CRH(GPIOB), rwmVal);
-
- }
-
- diff --git a/hardware.h b/hardware.h
- index 70f06c7..ec447a6 100644
- --- a/hardware.h
- +++ b/hardware.h
- @@ -33,6 +33,7 @@
- #define RCC ((u32)0x40021000)
- #define FLASH ((u32)0x40022000)
- #define GPIOA ((u32)0x40010800)
- +#define GPIOB ((u32)0x40010C00)
- #define GPIOC ((u32)0x40011000)
-
- #define RCC_CR RCC
- diff --git a/stm32_lib/c_only_md.ld b/stm32_lib/c_only_md.ld
- index 43073a7..a301023 100644
- --- a/stm32_lib/c_only_md.ld
- +++ b/stm32_lib/c_only_md.ld
- @@ -24,8 +24,8 @@ _Minimum_Stack_Size = 0x100 ;
-
- MEMORY
- {
- - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
- - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
- + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
- + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
- }
-
- /* higher address of the user mode stack */
- diff --git a/usb.c b/usb.c
- index b6d2a67..f848eaa 100644
- --- a/usb.c
- +++ b/usb.c
- @@ -33,26 +33,47 @@
- #include "usb.h"
- #include "dfu.h"
-
- +static inline void delay_us(u32 us) {
- + us *= 12;
- +
- + /* fudge for function call overhead */
- + us--;
- + asm volatile(" mov r0, %[us] \n\t"
- + "1: subs r0, #1 \n\t"
- + " bhi 1b \n\t"
- + :
- + : [us] "r" (us)
- + : "r0");
- +}
- +
- void setupUSB(void) {
- u32 rwmVal; /* read-write-modify place holder var */
-
- /* Setup the USB DISC Pin */
- rwmVal = GET_REG(RCC_APB2ENR);
- - rwmVal |= 0x00000010;
- + rwmVal |= 0x00000008;
- SET_REG(RCC_APB2ENR, rwmVal);
-
- // todo, macroize usb_disc pin
- /* Setup GPIOC Pin 12 as OD out */
- - rwmVal = GET_REG(GPIO_CRH(GPIOC));
- - rwmVal &= 0xFFF0FFFF;
- - rwmVal |= 0x00050000;
- - setPin(GPIOC, 12);
- - SET_REG(GPIO_CRH(GPIOC), rwmVal);
- + rwmVal = GET_REG(GPIO_CRH(GPIOB));
- + rwmVal &= 0xFFFFFF0F;
- + rwmVal |= 0x00000010;
- + SET_REG(GPIO_CRH(GPIOB), rwmVal);
- + setPin(GPIOB, 9);
-
- + delay_us(200);
- pRCC->APB1ENR |= 0x00800000;
-
- /* initialize the usb application */
- - resetPin(GPIOC, 12); /* present ourselves to the host */
- + resetPin(GPIOB, 9); /* present ourselves to the host */
- + delay_us(100);
- +
- + rwmVal = GET_REG(GPIO_CRH(GPIOB));
- + rwmVal &= 0xFFFFFF0F;
- + rwmVal |= 0x00000040;
- + SET_REG(GPIO_CRH(GPIOB), rwmVal);
- +
- usbAppInit();
-
- }
复制代码 serialusb修改过后的源代码已经包含在上面的固件包里面了
|
|