Programación Específica > Programación en C

 Inicialización De Registros

<< < (3/3)

Platypus:
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 ©:
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. :)

Bixix:
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:
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:
GRACIAS!!! :smartass:

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa