looks like the bootload needs a character delay to work reliably ---

harcoded 1ms delay.
This commit is contained in:
Mariano Alvira 2009-03-30 15:48:11 -04:00
parent 952b9b5b7e
commit ffcae0d070
2 changed files with 15 additions and 14 deletions

View file

@ -64,6 +64,7 @@ if (defined $filename) {
print unpack('H',$c) . unpack('h',$c) if $verbose; print unpack('H',$c) . unpack('h',$c) if $verbose;
print "\n" if ($verbose && ($i%4==0)); print "\n" if ($verbose && ($i%4==0));
$i++; $i++;
select undef, undef, undef, 0.001;
$ob->write($c); $ob->write($c);
} }
} }

View file

@ -12,26 +12,31 @@
#include "embedded_types.h" #include "embedded_types.h"
#define DELAY 1000 #define DELAY 100000
void main(void) { void main(void) {
volatile uint32_t i; /* Restore UART regs. to default */
/* in case there is still bootloader state leftover */
*(volatile uint32_t *)GPIO_FUNC_SEL0 = (0x01 << (14*2)); /* set GPIO14 to UART (UART1 TX)*/ *(volatile uint32_t *)UART1_CON = 0x0000c800; /* mask interrupts, 16 bit sample --- helps explain the baud rate */
// *(volatile uint32_t *)GPIO_FUNC_SEL0 = ( (0x01 << (14*2)) || (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/
/* INC = 76; MOD = 1000 */ /* INC = 76; MOD = 1000 */
*(volatile uint32_t *)UART1_BR = 0x004C03E8; /* Baud rate: (INC<<16 || MOD) */ /* is 115200 @ 24 MHz --- unexplained */ *(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 *)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) { while(1) {
for(i=0; i<DELAY; i++) { continue; } for(i=0; i<DELAY; i++) { continue; }
*(volatile uint32_t *)UART1_DATA = 'H'; *(volatile uint32_t *)UART1_DATA = 'H';
/* for(i=0; i<DELAY; i++) { continue; } for(i=0; i<DELAY; i++) { continue; }
*(volatile uint32_t *)UART1_DATA = 'e'; *(volatile uint32_t *)UART1_DATA = 'e';
for(i=0; i<DELAY; i++) { continue; } for(i=0; i<DELAY; i++) { continue; }
*(volatile uint32_t *)UART1_DATA = 'l'; *(volatile uint32_t *)UART1_DATA = 'l';
@ -40,14 +45,9 @@ void main(void) {
for(i=0; i<DELAY; i++) { continue; } for(i=0; i<DELAY; i++) { continue; }
*(volatile uint32_t *)UART1_DATA = 'o'; *(volatile uint32_t *)UART1_DATA = 'o';
for(i=0; i<DELAY; i++) { continue; } for(i=0; i<DELAY; i++) { continue; }
*(volatile uint32_t *)UART1_DATA = ' ';
*(volatile uint32_t *)UART1_DATA = 'W';
*(volatile uint32_t *)UART1_DATA = 'o';
*(volatile uint32_t *)UART1_DATA = 'r';
*(volatile uint32_t *)UART1_DATA = 'l';
*(volatile uint32_t *)UART1_DATA = 'd';
*(volatile uint32_t *)UART1_DATA = '\n'; *(volatile uint32_t *)UART1_DATA = '\n';
*(volatile uint32_t *)UART1_DATA = '\r';*/ for(i=0; i<DELAY; i++) { continue; }
*(volatile uint32_t *)UART1_DATA = '\r';
} }
/* while(1) { */ /* while(1) { */