Programación Específica > Programación en C
Inicialización De Registros
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
[*] Página Anterior
Ir a la versión completa