Re: [Sdcc-user] Getting started with C8051F120 problem

2016-12-29 Thread Philipp Klaus Krause
While LED blinking and timer interrupts re working now, I wasn't able to
get serial I/O to work yet. I only see garbage (all received bytes are
either 0x00 or 0x80).
I tried to port my "Hello, world!" that I already got working for many
other mcs51 variants:

#include 

#include 

int putchar(int c)
{
while(!(SCON0 & 0x02));
SCON0 &= ~0x02;
SBUF0 = c;
return (c);
}

unsigned char _sdcc_external_startup(void)
{
// Disable watchdog timer
WDTCN = 0xde;
WDTCN = 0xad;

return 0; // perform normal initialization
}

void main(void)
{
unsigned long int i = 0;

// Initialize I/O pins
SFRPAGE = 0xf;
XBR0 = 0x04;// UART0 on P0.0 and P0.1
P0MDOUT = 0x01; // Set port P0.0 (Uart tx) to 
push-pull
XBR2 = 0x40;// Enable crossbar

// Configure UART for 300 baud, 8 data bits, 1 stop bit.
SFRPAGE = 0x0;
TMOD = 0x20;
SCON0 = 0x40;
TH1 = 45;
TCON |= 0x40;
SCON0 |= 0x02;  // Tell putchar() the UART is 
ready to send.

for(;;)
{
printf("Hello World!\n");
for(i = 0; i < 147456; i++); // Sleep
}
}

I've tried to different serial-to-usb converters (one attached to the
R232 header on the board, the other directly to the Tx pin) and multiple
baudrates.

Philipp


--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user


Re: [Sdcc-user] Getting started with C8051F120 problem

2016-12-29 Thread Philipp Klaus Krause
It seems the tolerances in baudrate variation are quite low in the board
/ serial converter combination used. I wasn't able to get the UART
working at the default SYSCLK, not even at 300 baud (1.54% deviation in
baudrate). Using a 24.5 Mhz SYSCLK, it works fine at 300 baud (0.15%
deviation in baudrate) and 1200 baud (0.32% deviation in baudrate).

Philipp


--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user


Re: [Sdcc-user] Getting started with C8051F120 problem

2016-12-29 Thread Maarten Brock
> While LED blinking and timer interrupts re working now, I wasn't able to
> get serial I/O to work yet. I only see garbage (all received bytes are
> either 0x00 or 0x80).
> I tried to port my "Hello, world!" that I already got working for many
> other mcs51 variants:
>
> #include 
>
> #include 
>
> int putchar(int c)
> {
>   while(!(SCON0 & 0x02));
>   SCON0 &= ~0x02;
>   SBUF0 = c;
>   return (c);
> }
>
> unsigned char _sdcc_external_startup(void)
> {
>   // Disable watchdog timer
>   WDTCN = 0xde;
>   WDTCN = 0xad;
>
>   return 0; // perform normal initialization
> }
>
> void main(void)
> {
>   unsigned long int i = 0;
>
>   // Initialize I/O pins
>   SFRPAGE = 0xf;
>   XBR0 = 0x04;// UART0 on P0.0 and P0.1
>   P0MDOUT = 0x01; // Set port P0.0 (Uart tx) to 
> push-pull
>   XBR2 = 0x40;// Enable crossbar
>
>   // Configure UART for 300 baud, 8 data bits, 1 stop bit.
>   SFRPAGE = 0x0;
>   TMOD = 0x20;
>   SCON0 = 0x40;
>   TH1 = 45;
>   TCON |= 0x40;
>   SCON0 |= 0x02;  // Tell putchar() the UART is 
> ready to send.
>
>   for(;;)
>   {
>   printf("Hello World!\n");
>   for(i = 0; i < 147456; i++); // Sleep
>   }
> }
>
> I've tried to different serial-to-usb converters (one attached to the
> R232 header on the board, the other directly to the Tx pin) and multiple
> baudrates.
>
> Philipp

These values get you a 453 baudrate:
24.5MHz / 8 / (256-45) / 32 = 453

300 baud is really low and impossible to achieve with T1 in 8-bit
autoreload. Most USB-UARTs even have this as their lower level limit.

Further, to get to know the SiLabs chips, it's always instructive to run
their (windows) Configuration tool.

Maarten

--
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user