示例#1
0
void usart_send(uint32_t msg) {
#ifdef EVAC_SIM
    sim_log_msg("sending message", msg);
#endif /* EVAC_SIM */
    uint8_t buf[MSG_SIZE];
    msg_make_packet(msg, buf);

    uint8_t i;
    if (usart_is_enabled(USART_SOC)) {
        for (i=0; i<MSG_SIZE; i++) {
            usart_putch(USART_SOC, buf[i]);
        }
    }
    if (usart_is_enabled(USART_DISPLAY)) {
        for (i=0; i<MSG_SIZE; i++) {
            usart_putch(USART_DISPLAY, buf[i]);
        }
    }
}
int main(void)
{
    volatile uint32_t *FLASH_KEYR = (void *)(FLASH_BASE + 0x04);
    volatile uint32_t *FLASH_CR = (void *)(FLASH_BASE + 0x10);
    volatile uint32_t *FMC_SDCR1 = (void *)(FMC_BASE + 0x140);
    volatile uint32_t *FMC_SDCR2 = (void *)(FMC_BASE + 0x144);
    volatile uint32_t *FMC_SDTR1 = (void *)(FMC_BASE + 0x148);
    volatile uint32_t *FMC_SDTR2 = (void *)(FMC_BASE + 0x14C);
    volatile uint32_t *FMC_SDCMR = (void *)(FMC_BASE + 0x150);
    volatile uint32_t *FMC_SDRTR = (void *)(FMC_BASE + 0x154);
    volatile uint32_t *SYSCFG_MEMRMP = (void *)(SYSCFG_BASE + 0x00);
    int i;

    if (*FLASH_CR & FLASH_CR_LOCK) {
        *FLASH_KEYR = 0x45670123;
        *FLASH_KEYR = 0xCDEF89AB;
    }
    *FLASH_CR &= ~(FLASH_CR_ERRIE | FLASH_CR_EOPIE | FLASH_CR_PSIZE_MASK);
    *FLASH_CR |= FLASH_CR_PSIZE_X32;
    *FLASH_CR |= FLASH_CR_LOCK;

    clock_setup();

    gpio_set_fmc('B', 5);
    gpio_set_fmc('B', 6);
    gpio_set_fmc('C', 0);
    gpio_set_fmc('D', 0);
    gpio_set_fmc('D', 1);
    gpio_set_fmc('D', 8);
    gpio_set_fmc('D', 9);
    gpio_set_fmc('D', 10);
    gpio_set_fmc('D', 14);
    gpio_set_fmc('D', 15);
    gpio_set_fmc('E', 0);
    gpio_set_fmc('E', 1);
    gpio_set_fmc('E', 7);
    gpio_set_fmc('E', 8);
    gpio_set_fmc('E', 9);
    gpio_set_fmc('E', 10);
    gpio_set_fmc('E', 11);
    gpio_set_fmc('E', 12);
    gpio_set_fmc('E', 13);
    gpio_set_fmc('E', 14);
    gpio_set_fmc('E', 15);
    gpio_set_fmc('F', 0);
    gpio_set_fmc('F', 1);
    gpio_set_fmc('F', 2);
    gpio_set_fmc('F', 3);
    gpio_set_fmc('F', 4);
    gpio_set_fmc('F', 5);
    gpio_set_fmc('F', 11);
    gpio_set_fmc('F', 12);
    gpio_set_fmc('F', 13);
    gpio_set_fmc('F', 14);
    gpio_set_fmc('F', 15);
    gpio_set_fmc('G', 0);
    gpio_set_fmc('G', 1);
    gpio_set_fmc('G', 4);
    gpio_set_fmc('G', 5);
    gpio_set_fmc('G', 8);
    gpio_set_fmc('G', 15);
    *FMC_SDCR1 = 0x00001800;
    *FMC_SDCR2 = 0x000019D4;
    *FMC_SDTR1 = 0x00106000;
    *FMC_SDTR2 = 0x00010361;

    fmc_wait_busy();
    *FMC_SDCMR = 0x00000009; // clock
    for (i = 0; i < 50000000; i++) { // 10 ms
        asm volatile ("nop");
    }
    fmc_wait_busy();
    *FMC_SDCMR = 0x0000000A; // PALL
    fmc_wait_busy();
    *FMC_SDCMR = 0x000000EB; // auto-refresh
    fmc_wait_busy();
    *FMC_SDCMR = 0x0004600C; // external memory mode
    *FMC_SDRTR = 1386 << 1; // refresh rate
    fmc_wait_busy();

    *SYSCFG_MEMRMP = SYSCFG_MEMRMP_SWP_FMC << 10;

    gpio_set_usart('A', 9);
    gpio_set_usart('A', 10);

    usart_setup(usart_base, PLLCLK_HZ/2);
    usart_putch(usart_base, '.');

    start_kernel();

    return 0;
}
示例#3
0
void usart_putstr(uint8_t usart, const char * s) {
    while (*s != '\0') {
        usart_putch(usart, *s++);
    }
}
static void noop(void)
{
    usart_putch(usart_base, 'E');
    while (1) {
    }
}