Ejemplo de Bluegiga BGScript Accelerator. Quiero entender el código de ejemplo

0

Empecé BGScript hace unos días. Tengo muchas preguntas sobre BGScript. Cualquier ayuda será apreciada. Gracias!

* Mi objetivo es anunciar con datos de acelerador a través de BluetoothLE. Voy a utilizar ADXL345 como acelerador.

Podría hacer publicidad con datos de temperatura. El código fuente está aquí (casi igual que el código de referencia) enlace

* Mis preguntas son

1 ¿Cómo leer los datos del puerto?

Según "hardware_io_port_config_direction", la dirección es la configuración de I / O. Por ejemplo, hardware_io_port_config_direction (1, $ 7) significa que Port1_7pin se usa como entrada, ¿no?

2 Quiero comprender el significado del ejemplo del acelerador a continuación.

Temp tenue (10) Dim spiresult canal oscuro dim tlen

event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
    call gap_set_mode(gap_general_discoverable,gap_undirected_connectable)

    call hardware_io_port_write(1,$7,$3)            # Why port 1? The Datasheet shows P1_7 is "DCDC on/bypass control". Why $7?  Just "7" with out "$" is not correct? What $3 means?
    call hardware_io_port_config_direction(1,$7)    # It means Port1 7pin is used as Input? 
    call hardware_io_port_write(1,$7,$7)            # What $7 means?
    call hardware_spi_transfer(0,2,"\x0a\x06")      # The Datasheet shows P0_2 is "UART CTS".  What is "\x0a\x06"? What this lien meaning !?
    call hardware_io_port_write(1,$7,$3)            # This line already called. Why is it nessasary?

    call hardware_set_soft_timer(32768,0,0)
end

event hardware_soft_timer(handle)
    call hardware_io_port_write(1,$7,$7)
    call hardware_spi_transfer(0,2,"\x18\x00")(spiresult,channel,tlen,tmp(0)) # What is \x18\x00? 
    call hardware_io_port_write(1,$7,$3)    
    call attributes_write(x_data,0,2,tmp(0:2))

    call hardware_io_port_write(1,$7,$7)
    call hardware_spi_transfer(0,2,"\x1c\x00")(spiresult,channel,tlen,tmp(0)) # What is \x1c\x00?
    call hardware_io_port_write(1,$7,$3)    
    call attributes_write(y_data,0,2,tmp(0:2))

    call hardware_io_port_write(1,$7,$7)
    call hardware_spi_transfer(0,2,"\x20\x00")(spiresult,channel,tlen,tmp(0)) # What is \x20\x00?
    call hardware_io_port_write(1,$7,$3)    
    call attributes_write(z_data,0,2,tmp(0:2))

end

event connection_disconnected(handle,result)
    call gap_set_mode(gap_general_discoverable,gap_undirected_connectable)
end

3 ¿Qué es cdc.xml. ¿Es necesario?

4 ¿Puedo depurar usando display? Quiero mostrar x, y, z_data en la pantalla.

    
pregunta zono

1 respuesta

1

Está utilizando un lenguaje de front-end para programar un 8051 con un transceptor BLE patentado, cuyas bibliotecas de controladores solo binarios de otro modo solo son compatibles con un compilador de C bastante costoso, poco cooperativo, caro y solo para Windows. Pero la mayoría de sus preguntas pueden entenderse a través de su versión genérica y el hecho de que está interactuando con un periférico bien documentado.

  

Según "hardware_io_port_config_direction", la dirección es la configuración de I / O. Por ejemplo, hardware_io_port_config_direction (1, $ 7) significa que Port1_7pin se usa como entrada, ¿no?

Eso dependería si la documentación de la función dice que toma un pin número de puerto número o una potencia de dos valor de posición . Mi sospecha (casi segura dada la forma en que se usa más adelante en el código y la coincidencia con la forma en que funcionan los puertos de E / S 8051) estaría en este último. Entonces, esto no es una referencia al pin del puerto 7, sino a las combinaciones de los pines del puerto 0, 1 y 2, con valores de 1, 2 y 4 que suman el 7.

call hardware_io_port_write(1,$7,$3)             
  

¿Por qué puerto 1? La hoja de datos muestra que P1_7 es "DCDC on / bypass control". ¿Por qué $ 7? ¿Sólo "7" sin "$" no es correcto? ¿Qué $ 3 significa?

El control de un convertidor de CC / CC es un posible alternate function del puerto 7 pin 7, pero si no está configurado (¿o está controlado por software?) para ese propósito, también puede usarlo como una E / S de propósito general. Sin embargo, la idea de que esta es una referencia al pin 7 del puerto es casi una mala interpretación.

En cambio, 7 es la combinación de los valores de posición de los pines de puerto 0, 1 y 2. Parece que la sintaxis de BGscript usa $ para denotar un valor literal o un posible valor hexadecimal, no podemos decirlo el número dado, pero usted podría leer la documentación. Llegaremos a la razón de los valores específicos en un minuto.

Lo realmente interesante es que hay dos constantes en lugar de una. Puede ser que el primero sea un bit mask que restrinja los valores de los pines del puerto que pueden ser alterados por la llamada, y el segundo establece esos valores. Para asegurarse de que tendría que consultar la documentación de la función.

call hardware_spi_transfer(0,2,"\x0a\x06")      
  

La hoja de datos muestra que P0_2 es "UART CTS". ¿Qué es "\ x0a \ x06"? ¿Qué significa este gravamen?

La documentación le dirá con seguridad, pero esto parece estar escribiendo un conteo de 2 bytes en el motor en serie síncrono SPI 0. O tal vez 0 indica que no debe usar una selección de chip de hardware - verifique la documentación. "\ x0a \ x06" es claramente una carga útil de dos bytes para escribir, valores 0x0a (10 decimal) y 0x06 (6 decimal).

Ahora examinando una secuencia típica:

call hardware_io_port_write(1,$7,$7)
call hardware_spi_transfer(0,2,"\x18\x00")(spiresult,channel,tlen,tmp(0))
call hardware_io_port_write(1,$7,$3)    
call attributes_write(x_data,0,2,tmp(0:2))

Las dos llamadas a io_port establecen el puerto uno en un valor de 7, y luego 3 antes y después de un acceso SPI. Esto parece afirmar el bit con un valor de 4, es decir, el pin 2 del puerto durante la transferencia SPI. Eso es bastante sensato y sugiere que se está utilizando como el pin de selección SPI para el periférico. Lo único extraño es el ordenamiento; por lo general, las selecciones de SPI son active low y, por lo tanto, esperamos verlo escrito en 3 (pin 2 = 0) antes de la transferencia y de vuelta a 7 (pin 2 = 1) después. ¿Tiene el ADXL345 una selección SPI activa alta?

La línea final del bloque aparece como si estuviera escribiendo los datos medidos en algo en el sistema BLE para que la medición pueda obtenerse mediante un dispositivo remoto.

3 What is cdc.xml. Is it necessary?

Esto suena como algo involucrado en la habilitación de las comunicaciones del puerto serie virtual CDC-ACM con una PC a través del puerto USB del CC2540.

4 Can I debug using display? I want to display x,y,z_data on screen.

Sí, posiblemente si tiene una salida en serie virtual a través de USB como anteriormente. Pero tendrías que revisar los documentos de Bluegiga para saber cómo hacerlo.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas