Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "platform.h"
  3. #include "xparameters.h"
  4. #include "xiomodule.h"
  5.  
  6. // Variable para inicializar la E/S. Se pone global
  7. // para que puedan usarla los manejadores de interrupciones
  8.  
  9. XIOModule iomodule;
  10.  
  11. //Mas variables globales para que puedan usarlas los manejadores
  12. //------------------------------------------------------------------------
  13. u16 rpm;
  14. int temporizador = 0;
  15. int int_ext = 0;
  16. //-------------------------------------------------------------------------
  17.  
  18. // Manejador de interrupciones para el FIT1, programado a 1 segundo
  19. void Manejador_Int_Temporizador1 (void* ref)
  20. {
  21.     if (rpm > 0)
  22.     {
  23.         temporizador = 1;
  24.     }
  25. }
  26.  
  27. void Manejador_INTC (void* ref)
  28.  
  29. {
  30.     int_ext = 1;
  31. }
  32.  
  33. int main()
  34. {
  35.     u32 data;
  36.     u8 temp,hum,dep; temp=hum=dep=0;
  37.     u8 tecla;
  38.     u8 cod_tecla;
  39.  
  40.     // Inicializa el micro
  41.     init_platform();
  42.  
  43.     // Inicializa la E/S para GPI y GPO y el módulo de la UART para obtener la dirección base:
  44.     data = XIOModule_Initialize(&iomodule, XPAR_IOMODULE_0_DEVICE_ID);
  45.     data = XIOModule_Start(&iomodule);
  46.     data = XIOModule_CfgInitialize(&iomodule, NULL, 1);
  47.  
  48.     // Iniciamos el manejador de interrupciones
  49.     microblaze_register_handler(XIOModule_DeviceInterruptHandler, XPAR_IOMODULE_0_DEVICE_ID);
  50.  
  51.     // Registramos el manejador de interrupciones para el FIT1 "Manejador_Int_Temporizador1"
  52.     XIOModule_Connect(&iomodule, XIN_IOMODULE_FIT_1_INTERRUPT_INTR, Manejador_Int_Temporizador1, NULL);
  53.  
  54.     // Activamos la interrupción para FIT1
  55.     XIOModule_Enable(&iomodule, XIN_IOMODULE_FIT_1_INTERRUPT_INTR);
  56.  
  57.     // Registramos el manejador de interrupciones para INTC (Interrupción externa) "Manejador_INTC"
  58.     XIOModule_Connect(&iomodule, XIN_IOMODULE_EXTERNAL_INTERRUPT_INTR, Manejador_INTC, NULL);
  59.  
  60.     // Activamos la interrupción para INTC
  61.     XIOModule_Enable(&iomodule, XIN_IOMODULE_EXTERNAL_INTERRUPT_INTR);
  62.  
  63.     // Activamos Interrupciones
  64.     microblaze_enable_interrupts();
  65.  
  66.     //SIMULACION
  67.     //------------------------------------------------------------------------------------------------------------------------------------
  68.     int i=0; // Declaración de la variable del bucle for
  69.     for (i=0; i<100; i++) // Bucle for que va desde el valor 0 de i hasta el valor 101.
  70.         {
  71.  
  72.             if(i<45) cod_tecla=4; //Si la i es menor que 45, se "pulsa"la tecla,que  4 sube deposito
  73.             else if (i<51) cod_tecla= 5; //tecla  5 sube humedad
  74.             else if(i<60) cod_tecla=6; // tecla 6 sube temperatura
  75.  
  76.             if (temporizador == 1)
  77.             {
  78.                 cod_tecla=5;
  79.                 temporizador = 0;
  80.                 XIOModule_DiscreteWrite(&iomodule, 1, cod_tecla); //enviar codigo de tecla subir humedad
  81.                 XIOModule_DiscreteWrite(&iomodule,2,1); //tecla pulsada = 1
  82.                 XIOModule_DiscreteWrite(&iomodule,2,0);
  83.             }
  84.  
  85.             if (int_ext == 1)
  86.             {
  87.                 int_ext = 0;
  88.                 data = XIOModule_DiscreteRead (&iomodule, 1);
  89.                 rpm = XIOModule_DiscreteRead (&iomodule, 2);
  90.  
  91.                 temp=data&0xFF;
  92.                 hum=(data>>8)&0xFF;
  93.                 dep=(data>>16)&0xFF;
  94.             }
  95.  
  96.                 XIOModule_DiscreteWrite(&iomodule, 1, cod_tecla); //enviar codigo tecla
  97.                 XIOModule_DiscreteWrite(&iomodule,2,1); // tecla pulsada micro
  98.                 XIOModule_DiscreteWrite(&iomodule,2,0);
  99.         }
  100.  
  101.  
  102. //-------------------------------------------------------------------------------------------------------------------------------------
  103.  
  104.     // Esta línea hace que el cursor se vaya arriba a la izquierda y se borre la pantalla
  105.     xil_printf("\033[H\033[J");
  106.     // Imprime unos mensajes de instrucciones de manejo
  107.     xil_printf("Programa de control de un Sistema de Riego\n\r");
  108.     xil_printf("- Si desea subir o bajar el DEPÓSITO pulse 4 ó 1, respectivamente.\n\r");
  109.     xil_printf("- Si desea subir o bajar la HUMEDAD pulse 5 ó 2, respectivamente.\n\r");
  110.     xil_printf("- Si desea subir o bajar la TEMPERATURA pulse 6 ó 3, respectivamente.\n\r");
  111.  
  112.     data = XIOModule_DiscreteRead (&iomodule, 1);
  113.     rpm = XIOModule_DiscreteRead (&iomodule, 2);
  114.  
  115.     temp=data&0xFF;
  116.     hum=(data>>8)&0xFF;
  117.     dep=(data>>16)&0xFF;
  118.  
  119.     xil_printf ("\n\t* Deposito: %d%%    ",dep); //los espacios son necesarios para borrar la "basura" que quedaría si
  120.     xil_printf ("\n\r\t* Humedad: %d%%    ", hum); //los números superan las dos o tres cifras y luego volvemos a escribir
  121.     xil_printf ( "\t\t* Revoluciones: %d    \n\r", rpm); //un número con menor número de cifras
  122.     xil_printf ("\t* Temperatura: %dºC    \r", temp);
  123.     xil_printf("\033[3A");
  124.  
  125.     while(1)
  126.     {
  127.         if (temporizador == 1)
  128.         {
  129.             cod_tecla=5;
  130.             temporizador = 0;
  131.             XIOModule_DiscreteWrite(&iomodule, 1, cod_tecla); //enviar codigo de tecla subir humedad
  132.             XIOModule_DiscreteWrite(&iomodule,2,1); //tecla pulsada = 1
  133.             XIOModule_DiscreteWrite(&iomodule,2,0);
  134.         }
  135.  
  136.         if (int_ext == 1)
  137.         {
  138.             int_ext = 0;
  139.             data = XIOModule_DiscreteRead (&iomodule, 1);
  140.             rpm = XIOModule_DiscreteRead (&iomodule, 2);
  141.  
  142.             temp=data&0xFF;
  143.             hum=(data>>8)&0xFF;
  144.             dep=(data>>16)&0xFF;
  145.  
  146.             xil_printf ("\n\t* Deposito: %d%%    ",dep); //los espacios son necesarios para borrar la "basura" que quedaría si
  147.             xil_printf ("\n\r\t* Humedad: %d%%    ", hum);//los números superan las dos o tres cifras y luego volvemos a escribir
  148.             xil_printf ( "\t\t* Revoluciones: %d    \n\r", rpm);//un número con menor número de cifras
  149.             xil_printf ("\t* Temperatura: %dºC    \r", temp);
  150.             xil_printf("\033[3A");
  151.         }
  152.  
  153.         if ((XIOModule_Recv(&iomodule, &tecla,1))!=0)
  154.         {
  155.             if (tecla >= 49 && tecla <= 54)
  156.             {
  157.                 switch(tecla)
  158.                 {
  159.                     case 49: //pulsacion tecla 1
  160.                         cod_tecla=1;
  161.                         break;
  162.                     case 50: //pulsacion tecla 2
  163.                         cod_tecla=2;
  164.                         break;
  165.                     case 51: //pulsacion tecla 3
  166.                         cod_tecla=3;
  167.                         break;
  168.                     case 52: //pulsacion tecla 4
  169.                         cod_tecla=4;
  170.                         break;
  171.                     case 53: //pulsacion tecla 5
  172.                         cod_tecla=5;
  173.                         break;
  174.                     case 54: //pulsacion tecla 6
  175.                         cod_tecla=6;
  176.                         break;
  177.                 }
  178.                 XIOModule_DiscreteWrite(&iomodule, 1, cod_tecla); //enviar codigo tecla
  179.                 XIOModule_DiscreteWrite(&iomodule,2,1); // tecla pulsada micro
  180.                 XIOModule_DiscreteWrite(&iomodule,2,0);
  181.             }
  182.         }
  183.     }
  184.     cleanup_platform();
  185.     return 0;
  186. }
  187.  
  188. // source ipcore_dir/microblaze_mcs_setup.tcl
  189. //microblaze_mcs_data2mem workspace3/practica4/debug/practica4.elf
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement