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; }
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) { } }