From ffcae0d070b407e900051692f19d565eaee00c85 Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Mon, 30 Mar 2009 15:48:11 -0400 Subject: [PATCH] looks like the bootload needs a character delay to work reliably --- harcoded 1ms delay. --- mc1322x-load.pl | 1 + tests/uart1-loopback.c | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/mc1322x-load.pl b/mc1322x-load.pl index ba6e02ad9..5a04ac3de 100755 --- a/mc1322x-load.pl +++ b/mc1322x-load.pl @@ -64,6 +64,7 @@ if (defined $filename) { print unpack('H',$c) . unpack('h',$c) if $verbose; print "\n" if ($verbose && ($i%4==0)); $i++; + select undef, undef, undef, 0.001; $ob->write($c); } } diff --git a/tests/uart1-loopback.c b/tests/uart1-loopback.c index f98fa6dc2..9a90b1dbc 100644 --- a/tests/uart1-loopback.c +++ b/tests/uart1-loopback.c @@ -12,26 +12,31 @@ #include "embedded_types.h" -#define DELAY 1000 +#define DELAY 100000 void main(void) { - - volatile uint32_t i; - *(volatile uint32_t *)GPIO_FUNC_SEL0 = (0x01 << (14*2)); /* set GPIO14 to UART (UART1 TX)*/ -// *(volatile uint32_t *)GPIO_FUNC_SEL0 = ( (0x01 << (14*2)) || (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/ + /* Restore UART regs. to default */ + /* in case there is still bootloader state leftover */ + + *(volatile uint32_t *)UART1_CON = 0x0000c800; /* mask interrupts, 16 bit sample --- helps explain the baud rate */ /* INC = 76; MOD = 1000 */ *(volatile uint32_t *)UART1_BR = 0x004C03E8; /* Baud rate: (INC<<16 || MOD) */ /* is 115200 @ 24 MHz --- unexplained */ - + /* see Section 11.5.1.2 Alternate Modes */ + /* you must enable the peripheral first BEFORE setting the function in GPIO_FUNC_SEL */ + /* From the datasheet: "The peripheral function will control operation of the pad IF */ + /* THE PERIPHERAL IS ENABLED. */ *(volatile uint32_t *)UART1_CON = 0x00000003; /* enable receive and transmit */ + *(volatile uint32_t *)GPIO_FUNC_SEL0 = ( (0x01 << (14*2)) | (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/ + uint32_t i; while(1) { for(i=0; i