• Domingo 28 de Abril de 2024, 21:59

Autor Tema:  Inicialización De Registros  (Leído 5318 veces)

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Inicialización De Registros
« en: Jueves 27 de Enero de 2005, 14:54 »
0
Hola jente!!

Esta vez tengo una prgunta sobre el código..
DCICON1 y DCICON2 son registros, que contienen 16 bits. y aquí les está dando un valor para iniciarlos..0 o 1.
Eso es lo que no entiendo...
Qué hace con el &???

A qué valor están inicializados??

DCICON1value =  DCI_FSM_MULTI &    /* multichannel frame sync */
                        DCI_DJST_OFF &     /* data begins 1 clock after Fs */
                        DCI_SDO_TRISTAT &  /* CSDO pin will be tri-stated */
                        DCI_TX_ZERO_UNF &  /* transmit zero during underflow */
                        DCI_FSD_OUP &      /* COFS pin is an output */
                        DCI_SAMP_CLK_FAL & /* sample data on falling clock edge */
                        DCI_SCKD_OUP &     /* CSCK pin is an output */
                        DCI_DIGI_LPBACK_DIS & /* loopback mode is disabled */
                        DCI_IDLE_CON &     /* DCI will continue in CPU IDLE mode */
                        DCI_DIS;           /* DCI is disabled for now */
                       
        DCICON2value =  DCI_DATA_WORD_16 & /* data word size is 16 bits */
                        DCI_FRAME_LEN_8 &  /* data frame is 8 words */
                        DCI_BUFF_LEN_2;    /* 2 words buffered per interrupt */

                                           /* calculate DCI bit clock control */
                                           

Gracias..

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Inicialización De Registros
« Respuesta #1 en: Viernes 28 de Enero de 2005, 04:04 »
0
Código: Text
  1.  
  2. DCICON1value = DCI_FSM_MULTI & DCI_DJST_OFF & DCI_SDO_TRISTAT & CI_TX_ZERO_UNF & DCI_FSD_OUP & DCI_SAMP_CLK_FAL & DCI_SCKD_OUP & DCI_DIGI_LPBACK_DIS & DCI_IDLE_CON & DCI_DIS;
  3.  
  4. DCICON2value = DCI_DATA_WORD_16 & DCI_FRAME_LEN_8 & DCI_BUFF_LEN_2;
  5.  
  6.  

   Hola, el simbolo "&" en C se lee como AND osea "Y" ..  en el codigo anterior se diria que DCICON1value es igual a cada uno de las variables que le siguen hasta el ";" ... no entiendo si eso se suma y juntos hacen el valor total del registro de 16 bits o como quedaria ... yo creeria que eso suma los valores de :

Código: Text
  1. DCI_FSM_MULTI & DCI_DJST_OFF & DCI_SDO_TRISTAT & CI_TX_ZERO_UNF & DCI_FSD_OUP & DCI_SAMP_CLK_FAL & DCI_SCKD_OUP & DCI_DIGI_LPBACK_DIS & DCI_IDLE_CON & DCI_DIS
  2.  

y los deposita dentro de: DCICON1value formando en este un valor de 16 bits el cual sera la configuracion asignada al registro.

   Analizalo y si sabes la respuesta pasame el dato, talves este delirando  :blink:. Saludos!  ;)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #2 en: Viernes 28 de Enero de 2005, 09:11 »
0
Una vez más, creo que tienes razón!!!
Al igual que con DCICON1 hace lo mismo con DCICON2..

Al tener menos "sumas" es más fácil de analizarlo..


 DCICON2value =  DCI_DATA_WORD_16 & /* data word size is 16 bits */
                        DCI_FRAME_LEN_8 &  /* data frame is 8 words */
                        DCI_BUFF_LEN_2;    /* 2 words buffered per interrupt */

He mirado en el fitxero .h y me aparecen estos valores para ;
DCI_DATA_WORD_16 = 0xFFFF;
DCI_FRAME_LEN_8 =0xFEFF;
DCI_BUFF_LEN_2=0xF7FF;

Creo que es muy posible que le dé un valor a DCICON2 por medio de sumas de estos valores...
Te adjunto el registro DCICON2.

Creo que tengo problemas para hacer estas sumas dado que mi resultado no tiene mucho sentido en este registro, porque cambia bits que no nos interesan...

mi resultado(igual te desesperas...): 0101 1010 0101 0101

gracias...

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #3 en: Viernes 28 de Enero de 2005, 11:12 »
0
una pequeña cuestión de hardware...

he estado leyendo la conversación entre jonathan y reptil sobre el reset y el oscillator...

me pregunto si sabriais decirme cual es la finalidad de poner dos pequeños condensadores en las dos partes del cristal...
y si sabríais si r=10k es un valor de resistencia común para todos los micros en el reset...
en mi placa también usa r=10k en el reset..(dsPIC30f6014)

os adjunto vuestra  imagen...gracias
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Inicialización De Registros
« Respuesta #4 en: Sábado 29 de Enero de 2005, 02:58 »
0
Holas

Código: Text
  1. He mirado en el fitxero .h y me aparecen estos valores para&#59;
  2. DCI_DATA_WORD_16 = 0xFFFF;
  3. DCI_FRAME_LEN_8 =0xFEFF;
  4. DCI_BUFF_LEN_2=0xF7FF;
  5.  

Pues no estoy seguro que sume los valores, aunque no creo que haga otra cosa con los mismos, lo raro es que DCI_DATA_WORD_16 = 0xFFFF y si le suma otro valor hay un desborde, ya que los registros son de 16 bits limite, no entiendo para que utilizar tantas variables para dar valores solo a una, debe ser por facilidad y comodidad, pero y el error de desborde??  :unsure:  .. si alguien sabe y tiene alguna explicacion logica le pido encaresidamente que la comparta conmigo. :)

Código: Text
  1. me pregunto si sabriais decirme cual es la finalidad de poner dos pequeños condensadores en las dos partes del cristal...
  2.  
  3.  

Se ponen esos 2 capacitores para fijar una frecuencia al cristal, el cristal vibra a muy alta frecuencia y las pequeñas variaciones de tension hacen que esta frecuencia aumente o disminuya, el capacitor logra que este valor no sea variante, no estoy super seguro ya que es una respuesta por deducion, fijate que el valor del capacitor puede ser desde 15pf hasta 33pf ... Microchip, para 5v recomienda 30pf. Corrijan si estoy equivocado :)

Código: Text
  1. y si sabríais si r=10k es un valor de resistencia común para todos los micros en el reset...
  2. en mi placa también usa r=10k en el reset..(dsPIC30f6014)
  3.  

Es un Valor comun para todos los microcontroladores que trabajen a 5v ...  todos trabajan entre 3 - 5v de ahi que todos lleven este valor. Esta calculado el valor ohmmico segun la tension de alimentacion.

   Espero haber eliminado tus dudas. Saludos! ;)

PD: Me quedo picando lo de los registros, si quieres detallarme un poco mas, talves pueda encontrar una respuesta logica. :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #5 en: Lunes 31 de Enero de 2005, 09:55 »
0
Te adjunto el proyecto entero.
Es un programa, que simplemente coge una señal de la entrada de micro y despues de pasar por el codec lo manda al dsPIC, este simplemente devuelve la señal al codec y se exterioriza por el speaker.

Creo que multiplicando los valores llena el registro, y alomejor da igual el overflow... ya que simplemente el uno que le sobra lo omite... :unsure: .





Por otra parte me han dicho que  en el codec.c :
 while (!DCISTATbits.TMPTY);         /* wait until TXBUF0 and TXBUF1 have been
                                         moved to their shadow registers for
                                         transmission */
  TXBUF0 = 0x7FFF;
  TXBUF1 = 0x2300;











while (!DCISTATbits.TMPTY);         Esta condición mira si el registro de enviar está vacio.(Lo pone en el datasheet.)

El TXBUF0 = 0x7FFF; significa que le avisa al codec, que en vez de información audio se le va a mandar información de inicialización...
y que con
TXBUF1 = 0x2300; se le dice la información para inicializarlo.



Mi pregunta...


Donde puedo encontrar cual es la informacion que se le envia cuando dice;
TXBUF1 = 0x2300???

Y de donde ha sabido que al darle el valor 0x7FFF se le avisa al codec que le va información de inicializar???

En el datasheet no  tengo esa información, y no se donde encontrar...



Gracias jonathan por mostrar este interés desinteresadamente.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Inicialización De Registros
« Respuesta #6 en: Miércoles 2 de Febrero de 2005, 06:26 »
0
Hola compa, bueno, lamento informarte que el archivo que me has adjuntado no me ha sido util para nada :( ... ese archivo es el index de tu proyecto en Mplab, no tiene los archivos que realmente contienen el codigo, debes adjuntar el archivo correspondiente al drama con extension ".c" ...  el adjunto es solo el archivo del proyecto en Mplab el cual contiene solo datos para el programa, nada util para chequear.

Código: Text
  1.  
  2. Donde puedo encontrar cual es la informacion que se le envia cuando dice;
  3. TXBUF1 = 0x2300???
  4.  
  5. Y de donde ha sabido que al darle el valor 0x7FFF se le avisa al codec que le va información de inicializar???
  6.  
  7. En el datasheet no tengo esa información, y no se donde encontrar...
  8.  
  9.  

   En este momento me encuentro buscando la informacion que necesitas, si es posible te pediria que me adjuntes el datasheet del si3000.
   Espero tus comentarios y el archivo para hacer en el un profundo analisis. Mientras estare buscando informacion relacionada a la variable TXBUF1. Saludos :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #7 en: Miércoles 2 de Febrero de 2005, 09:28 »
0
GRAXIAX!!

Te adjunto el datasheet del Si3000 y una pequeña sintesis de lo que me interesa...
 
(no se adjuntar más de un archivo-...)

Página 15:
Trabajo en el modo2: In slave mode.
La información digital se traspasa entre el DSP y el Codec mediante dos Frames:
Primary frame:16bit. Se usan para mandar información audio y siempre se manda.
Secondary frame:16 bit.Es para acceder a registros internos del Si(3000 en nuestro caso).
En mode2:LSB=0.
(No especifica los registros del Si3000)
Página 20 :

Tabla de registros. Sin especificación del uso de caca uno...(eso es lo que me moskea..)

No he podido adjuntarte pero lo puedes encontrar sin ningun problema pinchando aqui.


http://www.datasheetarchive.com/datasheet/pdf/22/225334.html

  No me deja adjuntar este tipo de archivo...(el PDF...)


GRAXIAS

Te mando el .c en el proximo mensaje...
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #8 en: Miércoles 2 de Febrero de 2005, 09:46 »
0
PERDONADME!!!

Eske me salía un error de flood o algo así y no me he dado cuenta que en realidad si me había mandado el mensaje...
LO SIENTO........ :o  :(

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Inicialización De Registros
« Respuesta #9 en: Miércoles 2 de Febrero de 2005, 09:57 »
0
No te preocupes, ya esta solucionado el error.. si que me has hecho trabajar  :blink: ... Mirare el codigo e intentare responderte lo antes posible. Saludos ;)

PD: Para adjuntar mas de un archivo solo debes comprimirlos en un ZIP :P
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #10 en: Jueves 3 de Febrero de 2005, 05:21 »
0
Hola, si he entendido bien la pregunta tal vez esto os pueda
servir de ayuda:

Por ejemplo:

DCICON2value = DCI_DATA_WORD_16 & /* data word size is 16 bits */
DCI_FRAME_LEN_8 & /* data frame is 8 words */
DCI_BUFF_LEN_2; /* 2 words buffered per interrupt */

en realidad lo que hace con los valores de:

DCI_DATA_WORD_16 = 0xFFFF;
DCI_FRAME_LEN_8 =0xFEFF;
DCI_BUFF_LEN_2=0xF7FF;

como ha dicho JONATHAN es una operación lógica AND (&) de los
valores correspondientes, así, si lo pasáis a binario os queda:

DCI_DATA_WORD_16 =  b 1111 1111 1111 1111;
DCI_FRAME_LEN_8 =      b 1111 1110 1111 1111;
DCI_BUFF_LEN_2 =        b 1111 0111 1111 1111;

y entonces a DCICON2 se le asigna el valor:

DCICON2value =     b 1111 0110 1111 1111;

que es en hexadecimal:

DCICON2value = 0xF6FF;

Si observas las columnas de bits en las que hay un cero verás que el
resultado de la AND lógica es "0", y "1" si todos los bits son unos.

Este resultado se envía al registro de control DCICON2 configurándolo así
como deseas. Como ves el numero sigue siendo de 16 bits y no hay overflow.

Espero que os sea útil, un saludo.

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Inicialización De Registros
« Respuesta #11 en: Jueves 3 de Febrero de 2005, 05:59 »
0
Esta respuesta es correcta y corrije el error mio de pensar que las variables se sumaban .. ahora me pongo a pensar y no puedo creer que haya sido tan descuidado  :blink: ... Gracias Platypus por corregir mi error. :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #12 en: Jueves 3 de Febrero de 2005, 09:10 »
0
Me ha sido muy util gracias... :lol:

Esa era la primera duda...

Yo sigo con mis infinitas dudas-.....
Y la que más me persigue es..

Qué estoy configurando cuando escribo TXBUF1=0x3000??
Cómo sabe el programador que escribiendo TXBUF0=0x7FFF abisa al Si3000 que le manda información de registros y no audio data?


GRACIAS!!!
Jonathan tranquilo, ;)  como dicen en mi casa... al que anda le pasa!
GRACIAS!!

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #13 en: Jueves 3 de Febrero de 2005, 16:56 »
0
Hola de nuevo, ahí va tú segunda duda según mi interpretación:

TXBUF0 = 0x7FFF;
TXBUF1 = 0x2300;

En este caso no se envía información al Si3000, sino que se lee. Bueno iremos por pasos. En TXBUF0 siempre se envía información de audio en los 15 bits más significativos, y se indica si hay segunda trama en el bit menos significativo (si es cero no habrá segunda trama, si es uno como en este caso si habrá segunda trama).

TXBUF1 =   b   (b15) 0010 0011 0000 0000 (b0)

Por otro lado el bit 13 de la segunda trama (TXBUF1) es el que determina si se envía/lee información a/de algún registro de control, y los siguientes 5 bits direcciónan el regitro que se quiere escribir/leer. En este caso se direcciona el registro numero 3 llamado PLL1 Divide N1 (ver pág. 20 de Datasheet Si3000) y se lee su contenido.

Tal vez con esto lo veas más claro (he quitado los comentarios porque no me fio de ellos) y posiblemente te aclares más si lo pasas a binario:

A continiuación escribe en el regitro 4 (PLL1 Multiply M1) el valor 0x13

TXBUF0 = 0x7FFF;
TXBUF1 = 0x0413;
while (!DCISTATbits.TMPTY);

y ahora lee el registro 4 para verificar la información:

TXBUF0 = 0x7FFF;
TXBUF1 = 0x2400;
while (!DCISTATbits.TMPTY);

Espero que solvente tú duda. Un saludo. :lol:

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Inicialización De Registros
« Respuesta #14 en: Viernes 4 de Febrero de 2005, 12:06 »
0
GRACIAS!!! :smartass: