コード例 #1
0
ファイル: startup.c プロジェクト: tzuen208/mini-arm-os-shell
void reset_handler(void)
{
	/* Copy the data segment initializers from flash to SRAM */
	uint32_t *idata_begin = &_sidata;
	uint32_t *data_begin = &_sdata;
	uint32_t *data_end = &_edata;
	while (data_begin < data_end) *data_begin++ = *idata_begin++;

	/* Zero fill the bss segment. */
	uint32_t *bss_begin = &_sbss;
	uint32_t *bss_end = &_ebss;
	while (bss_begin < bss_end) *bss_begin++ = 0;

	/* Clock system intitialization */
	rcc_clock_init();

	main();
}
コード例 #2
0
int main(void)
{
    rcc_clock_init();

    /* Set PA8 for MCO1 function */
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
    GPIOA->MODER = GPIO_MODER8_ALTERNATE;
    GPIOA->OTYPER = GPIO_OTYPER8_PP;
    GPIOA->OSPEED = GPIO_OSPEED8_100MHZ;
    GPIOA->PUPDR = GPIO_PUPDR8_NO;
    GPIOA->AFRH = GPIO_AFRH8_AF0;

    /* Set PC9 as MCO2 function */
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
    GPIOC->MODER = GPIO_MODER9_ALTERNATE;
    GPIOC->OTYPER = GPIO_OTYPER9_PP;
    GPIOC->OSPEED = GPIO_OSPEED9_100MHZ;
    GPIOC->PUPDR = GPIO_PUPDR9_NO;
    GPIOC->AFRH = GPIO_AFRH9_AF0;

    /* Set MCO1, depends on which rcc you used */
    init_mco1();

    /* Set MCO2, select SYSCLK as output source and no division */
    RCC->CFGR &= ~RCC_CFGR_MCO2;
    RCC->CFGR |= RCC_CFGR_MCO2_SYSCLK;
    RCC->CFGR &= ~RCC_CFGR_MCO2_PRE;
    RCC->CFGR |= RCC_CFGR_MCO2_PRE_DIV1;

    /* Set PG13 as general output function(LED) */
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN;
    GPIOG->MODER = GPIO_MODER13_OUTPUT;
    GPIOG->OTYPER = GPIO_OTYPER13_PP;
    GPIOG->OSPEED = GPIO_OSPEED13_100MHZ;
    GPIOG->PUPDR = GPIO_PUPDR13_NO;

    /* Set SysTick, trigger every 500ms */
    init_systick();

    while(1);

    return 0;
}