====== Depuración del código fuente en el procesador GNOME ====== Con el objetivo de asegurarnos de que el código del procesador GNOME funciona correctamente, se ha integrado un depurador del mismo que se comunica a través del USB de la placa, como un puerto COM Virtual. Este depurador tiene las siguientes características: * Capacidad de introducir puntos de ruptura (''breakpoints''). * Capacidad de ejecutar instrucciones paso a paso (''single-stepping''). * Número máximo de puntos de ruptura configurable (''gnome_config.h''). * Comunicación a traves de UART (''VCP''). //** ADVERTENCIA: **// Mientras el depurador se encuentre activo, será necesario activar síntesis de la UART en la lógica programable. Para ello se debe activar la segunda página del ''TopDesign.cysch''. {{ :pub:psoc_debug_1.png?direct&850 |}} Además, debe modificarse la siguiente línea del fichero ''gnome_config.h'': #define GNOME_DEBUGGING_ON 0x01 ==== Visualizar los datos de depuración en el ordenador ==== //**Una vez programado el PSoC**//, es necesario utilizar un programa como ''Putty'' o ''Minicom'' para obtener una terminal de comunicación con la UART. Para ello, podemos descargar ''Putty'' [[http://www.putty.org|aquí]]. //**Advertencia: Es necesario utilizar Putty bajo Windows, debido a que no se dispone de los drivers del PSoC USB-UART para Linux ni para macOS**//. Necesitaremos comprobar qué puerto virtual se ha asignado al PSoC. Para ello, simplemente abrimos el ''Administrador de dispositivos'' de Windows (Si no sabes cómo hacerlo, búscalo en Internet). Desplegamos la categoría ''Puertos (COM y LPT)'' y veremos el ''KitProg USB-UART'' asignado a un puerto ''COM''. {{ :pub:psoc_devadmin.png?direct&650 |}} Una vez comprobado el puerto, abrimos Putty y lo configuramos tal y como aparece en la imagen: {{ :pub:putty_psoc_config.png?direct&500 |}} Las características que deben estar seleccionadas son: * Serial line: El puerto COM de tu PSOC. * Connection type: Conexión serie (UART). * Speed: 115200 Baud/s. Es el número de bits por segundo al que se comunica la UART. Una vez configurado, hacemos clic en ''Open'' y ya tendremos acceso a la ventana de terminal. ==== Manejo de la interfaz de depuración ==== * ''Esc'': Al presionar escape, se alterna entre el modo Halt y el modo Run. * ''Modo Halt'': El procesador se encuentra parado en una instrucción, y se activa la posibilidad de single-stepping. * ''Modo Run'': El procesador corre con normalidad (hasta que el PC encuentre un punto de ruptura, en cuyo caso, se activa el modo HALT). * ''Barra de espacio'': La barra de espacio permite ejecutar la instrucción actual en el modo ''HALT''. * ''TB=0xZZ'' + ''Enter'': Este comando pone o quita (si ya lo hubiera) un punto de ruptura en la posición indicada por ''ZZ'' (en base hexadecimal). Por ejemplo, ''TB=0x43'' activaría un breakpoint en la instrucción número 43 (hex) si no había uno activo en esa instrucción. En caso de que hubiera un breakpoint activo, simplemente se elimina. * ''LB'' + ''Enter'': Enumera los puntos de ruptura activos. ==== Información disponible en el depurador ==== Cada vez que el depurador salta a la siguiente instrucción en el modo HALT, se comunica al usuario la siguiente información: Normal Context -> Contexto de ejecución de dicha instrucción (Interrupción o Normal). PC = 0x15 -> Posición del contador de programa de la siguiente instrucción a ejecutar Instruccion = 0x18 -> Código de la instrucción que se acaba de ejecutar. Acumulador = 0x08 -> Contenido del acumulador. C, Z = 0, 0 -> Flags del procesador. REG_DIR_INDIRECTO = 0x00 -> Contenido del registro de direccionamiento indirecto. REG[0] = 0x00 -> Contenido de cada registro (memoria o periférico en lectura). REG[1] = 0x00 REG[2] = 0x00 REG[3] = 0x00 REG[4] = 0x00 REG[5] = 0x00 REG[6] = 0x00 REG[7] = 0x00 REG[8] = 0x00 REG[9] = 0x00 REG[10] = 0x0f REG[11] = 0x00 REG[12] = 0x00 REG[13] = 0x00 REG[14] = 0x00 REG[15] = 0x00 STACK[0] = 0x00 -> Contenido de la pila en cada nivel STACK[1] = 0x7f STACK[2] = 0xab STACK[3] = 0xe6 STACK_PTR = 0x00 -> Puntero de la pila