[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Syncronous serial ports. Strange clock behaviour (3x)



Hi all,

After my (unanswered) request for help with the asynchronous serial ports, 
we have experimented a bit with the synchronous serial ports.

For the moment we have just opened the port and tried some speeds, but we 
have obtained some strange results.

When using the 150Hz. speed (UART speed) everything works correctly. The 
problem is that when we try to set the speed from the CODEC clock we get 3 
times the expected speed:

with FREQ_1MHz we get 3.124 MHz
with FREQ_512kHz we get 1.562 MHz
with FREQ_256kHz we get 781 kHz.

Any idea why? Thanks a lot.

Here is the source code. The program changes the speed after you press a key.
------------------------------------------------------------
#include <asm/sync_serial.h>
#include <stdio.h>
#include <fcntl.h>

#define DEBUG(x) x

int main()
{ int  spi_fd, intResultCode, i, res;
   char TB1[2], RB1[20];
   TB1[0] = 0xE7;
   TB1[1] = 0xAA;                /* howto write only one byte to syncser0 
(0xff) ?? */

   if ((spi_fd = open("/dev/syncser0", O_RDWR)) < 0)
   { perror("No se pudo abrir el puerto sincrono 0\n");
     exit(1);
   }
   else
     printf("puerto sincrono 0 abierto.\n");

   if (ioctl(spi_fd,SSP_MODE,MASTER_OUTPUT) < 0) // configuro como master 
salida
     perror("puerto sincrono no inicializado como master de salida\n");
   else
     perror("puerto sincrono inicializado correctamente como master de 
salida\n");

   printf ("pulsa una tecla");
   getchar();
   if (ioctl(spi_fd,SSP_SPEED,SSP150) < 0) // configuro la velocidad a 150 Hz.
     perror("Error al cambiar la frecuencia a 150Hz.\n");
   else
     perror("frecuencia de 150 Hz establecida correctamente\n");

   printf ("pulsa una tecla");
   getchar();
   if (ioctl(spi_fd,SSP_SPEED,CODEC_VAL(FREQ_1MHz,WORD_SIZE_8, WORD_SYNC)) 
< 0)
     perror("Error al cambiar la frecuencia a 1MHz\n");
   else
     perror("frecuencia de 1MHz establecida correctamente\n");

   printf ("pulsa una tecla");
   getchar();
   if (ioctl(spi_fd,SSP_SPEED,CODEC_VAL(FREQ_512kHz,WORD_SIZE_8, 
WORD_SYNC)) < 0)
     perror("Error al cambiar la frecuencia a 512kHz\n");
   else
     perror("frecuencia de 512kHz establecida correctamente\n");

   printf ("pulsa una tecla");
   getchar();
   if (ioctl(spi_fd,SSP_SPEED,CODEC_VAL(FREQ_256kHz,WORD_SIZE_8, 
WORD_SYNC)) < 0)
     perror("Error al cambiar la frecuencia a 256kHz\n");
   else
     perror("frecuencia de 256kHz establecida correctamente\n");
}