Autor Tema: Comunicacion SPI con HARMONY PIC32  (Leído 2880 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mayk888

  • PIC10
  • *
  • Mensajes: 6
Comunicacion SPI con HARMONY PIC32
« en: 25 de Octubre de 2016, 05:32:35 »
 Buenas gente,

estoy realizando un proyecto en el que necesito realizar una comunicación mediante un puerto SPI de mi PIC32MX460F512L y necesito ayuda.
Estoy utilizando la herramienta harmony de microchip pero me gustaría aprender a manejarla con las librerías dinamicas e lugar de las static qque he venido utilizando hasta ahora.
La verdad es que no encuentro mucha información por internet, así que si alguién conoce la herramienta le agradecería que contestara.

hasta el momento siguiendo las instrucciones que se dan dentro de la librería que se incluye en el proyecto de forma automática al general el código con harmony he llegado a inicializar el puerto y abrirlo.

sysObj.spiObjectIdx0 = DRV_SPI_Initialize(DRV_SPI_INDEX_0, (const SYS_MODULE_INIT  * const)&drvSpi0InitData);

DRV_HANDLE  handle;

            handle = DRV_SPI_Open( DRV_SPI_INDEX_0, DRV_IO_INTENT_WRITE );
           
            if( DRV_HANDLE_INVALID == handle )
            {
                // Unable to open the driver
                Lcd_envia(1,1);
                Lcd_Out(2,1,"ERROR FATAL");
                delay_ms(300);
            }

Pero a la hora de compilar el siguiente paso que se supone sería realizar la escritura en el puerto para realizar un envío, utilizando el código que da la librería aparecen varios errores.

#define     MY_BUFFER_SIZE  5

            char   myReadBuffer[MY_BUFFER_SIZE], myWriteBuffer[MY_BUFFER_SIZE], state = 0;
           
            DRV_SPI_BUFFER_HANDLE bufferHandle;

            switch ( state )
            {
                case 0:
                    // PUT API returns data in any case, it is up to the user to use it
                    bufferHandle = DRV_SPI_BufferAddWriteRead( handle, myWriteBuffer, 5,
                        myReadBuffer, 5, NULL, NULL );

                    state++;
                    break;
                case 1:
                    if(DRV_SPI_BUFFER_STATUS_SUCCESS & DRV_SPI_BufferStatus( bufferHandle ) )
                    {
                        state++;
                        Lcd_envia(1,1);
                        Lcd_Out(2,1,"todo enviado");
                        delay_ms(300);
                        // All transmitter data has been sent.
                    }
                    break;
            }
La etiqueta DRV_SPI_BUFFER_STATUS_SUCCESS no se encuenra definida y no encuentro el valor que debería tener, estoy suponiendo que debería ser un 1 pero no veo que funcione. De todas formas no estoy seguro de que ejecutando únicamente esta instrucción se produzca el envío. Creo que se debe utilizar otra que es DRV_SPI_Tasks ( object );

La verdad es que ando algo perdido, agradecería cualquier información.

Un saludo



« Última modificación: 27 de Octubre de 2016, 04:49:37 por mayk888 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion SPI con HARMONY PIC32
« Respuesta #1 en: 25 de Octubre de 2016, 08:54:42 »
Si decis que la etiqueta no esta definida, es por que tenes un problema con las rutas de include, o le esta errando el harmony. Si pusieras los errores seria mas facil saber cual es. Aun asi, imagino que debe ser por eso.

Por otro lado, no se que te referis con dinamicas y static ¿?¿?

Desconectado mayk888

  • PIC10
  • *
  • Mensajes: 6
Re:Comunicacion SPI con HARMONY PIC32
« Respuesta #2 en: 26 de Octubre de 2016, 08:32:05 »
Si decis que la etiqueta no esta definida, es por que tenes un problema con las rutas de include, o le esta errando el harmony. Si pusieras los errores seria mas facil saber cual es. Aun asi, imagino que debe ser por eso.

Por otro lado, no se que te referis con dinámicas y static ¿?¿?

Gracias por interesarte.

Al final he conseguido enviar una trama por el puerto SPI pero utilizando la librería static que proporciona harmony. Adjunto una imagen del menú de harmony para que veas donde se selecciona el tipo de librería que se utiliza.

Me interesaría aprender a manejar las librerías dinámicas así que seguiré mirando de resolverlo. Pero más orientado a el control de una tarjeta SD y la creación de archivos que almacenen datos.

Creé otro hilo con ese tema de los archivos asi que daré por resulto este, gracias otra vez.



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion SPI con HARMONY PIC32
« Respuesta #3 en: 26 de Octubre de 2016, 14:51:16 »
No se que diferencia existira entre uno y otro.

Pero debo imaginar que el dinamic debe funcionar estilo un sistema operativo, es decir lo que hace la funcion no es enviar y esperar, sino que debe implementar una especie de pila, en la que vos envias envias y envias, el programa guarda todo lo que envias es una especie de Ring Buffer. Y luego en la interrupcion a medida que se termina de enviar uno, toma automaticamente de ese buffer y envia. Sin bloquear la ejecucion.

Mientras que las static, no hace uso de eso, sino que deberias implementarlo vos a la parte de la interrupcion (Si es que es eso lo que queres). Sino las lecturas/escrituras tendras funciones para usar algunas bloqueantes y otras no bloqueantes.

Desconectado mayk888

  • PIC10
  • *
  • Mensajes: 6
Re:Comunicacion SPI con HARMONY PIC32
« Respuesta #4 en: 27 de Octubre de 2016, 04:49:12 »
No se que diferencia existira entre uno y otro.

Pero debo imaginar que el dinamic debe funcionar estilo un sistema operativo, es decir lo que hace la funcion no es enviar y esperar, sino que debe implementar una especie de pila, en la que vos envias envias y envias, el programa guarda todo lo que envias es una especie de Ring Buffer. Y luego en la interrupcion a medida que se termina de enviar uno, toma automaticamente de ese buffer y envia. Sin bloquear la ejecucion.

Mientras que las static, no hace uso de eso, sino que deberias implementarlo vos a la parte de la interrupcion (Si es que es eso lo que queres). Sino las lecturas/escrituras tendras funciones para usar algunas bloqueantes y otras no bloqueantes.


Gracias por la información.

En principio lo que yo había entendido es que mediante las librerías dinámicas se tenía un control del estado en el que se encuentra la operación.
Cada función de la librería dinámica devuelve una variable que indica el estado en el que se encuentra dicha función.
Por su lado las funciones que se utilizan con su librería static únicamente ejecutan una instrucción detrás de otra sin tener en cuenta el estado en el que se encuentre.

De todas formas como te decía me interesa la forma de crear archivos en una SD con el manager file del harmony. Tengo otro hilo abierto con ese tema, sin mucho éxito  :? , pero bueno ya saldrá.

Gracias de nuevo.


 

anything