filip710

Brojac gore/dolje

Jan 29th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.29 KB | None | 0 0
  1. #include <stdio.h>
  2. //***********************************************TO DO 1*************************************************//
  3. //*******************Uključiti datoteke xparameters.h, xtmrctr.h, xintc.h i xgpio.h**********************//
  4. #include "xparameters.h"
  5. #include "xtmrctr.h"
  6. #include "xintc.h"
  7. #include "xgpio.h"
  8.  
  9.  
  10.  
  11. //******************************************************************************************************//
  12.  
  13. //definiranje konstante za redni broj timera koji se koristi (unutar timer komponente postoje dva timera)
  14. #define TIMER_CNTR_0 0
  15.  
  16. //***********************************************TO DO 2************************************************//
  17. //*****************************Postaviti vrijednost konstante RESET_VALUE*******************************//
  18.  
  19. #define RESET_VALUE 99999998
  20. //******************************************************************************************************//
  21.  
  22. /********************* Prototipi funkcija *************************/
  23. int TmrCtrIntrInit(XIntc* IntcInstancePtr,
  24.  XTmrCtr* TmrInstancePtr,
  25.  u16 TimerDeviceId,
  26.  u16 IntcDeviceId,
  27.  u16 IntrSourceId,
  28.  u8 TmrCtrNumber);
  29.  
  30. void TimerCounterHandler(void *CallBackRef, u8 TmrCtrNumber);
  31.  
  32. //***********************************************TO DO 3*************************************************//
  33. //*****Deklarirati varijable InterruptController (XIntc), TimerCounterInst (XTmrCtr) i leds (XGpio)******//
  34.  
  35. XIntc InterruptController;
  36. XTmrCtr TimerCounterInst;
  37. XGpio prekidac,button;
  38. int brojac=0;
  39.  
  40.  
  41. //******************************************************************************************************//
  42.  
  43. //***********************************************TO DO 4************************************************//
  44. //***************************Deklarirati globalnu varijablu TimerExpired********************************//
  45.  
  46. //******************************************************************************************************//
  47.  
  48. int main(void)
  49. {
  50.     print("-- Start of the program! --\r\n");
  51.  
  52.     int Status;
  53.  
  54.     //***********************************************TO DO 5************************************************//
  55.     //************************Inicijalizirati kontroler za komunikaciju s LE diodama************************//
  56.     XGpio_Initialize(&button, XPAR_PUSH_BUTTONS_4BITS_DEVICE_ID);
  57.     XGpio_SetDataDirection(&button,1,0xf);
  58.     XGpio_Initialize(&prekidac, XPAR_DIP_SWITCHES_8BITS_DEVICE_ID);
  59.     XGpio_SetDataDirection(&prekidac,1,0xff);
  60.  
  61.     int btnVal;
  62.  
  63.     //******************************************************************************************************//
  64.  
  65.     //Poziv funkcije za inicijalizaciju timera i upravljača prekidima
  66.     Status = TmrCtrIntrInit(&InterruptController,
  67.                             &TimerCounterInst,
  68.                             XPAR_DELAY_DEVICE_ID,
  69.                             XPAR_INTC_0_DEVICE_ID,
  70.                             XPAR_INTC_0_TMRCTR_0_VEC_ID,
  71.                             TIMER_CNTR_0);
  72.  
  73.     if (Status != XST_SUCCESS){
  74.         return XST_FAILURE;
  75.     }
  76.  
  77.     //***********************************************TO DO 6***********************************************//
  78.     //******************************************Pokrenuti timer********************************************//
  79.     XTmrCtr_Start(&TimerCounterInst, TIMER_CNTR_0);
  80.  
  81.     //*****************************************************************************************************//
  82.  
  83.     while (1) {
  84.         btnVal = XGpio_DiscreteRead(&button, 1);
  85.         if(btnVal == 0b0100)
  86.         {
  87.             brojac=0;
  88.         }
  89.     }
  90.  
  91.     print("-- End of the program! --\r\n");
  92.     return XST_SUCCESS;
  93. }
  94.  
  95. /********************************************************************/
  96. /**
  97. * Inicijalizacija timera i upravljača prekidima.
  98. * Funkcija prima sljedeće parametre:
  99. *
  100. * @paramIntcInstancePtr - pokazivač na varijablu tipa XIntc,
  101. * @paramTmrCtrInstancePtr - pokazivač na varijablu tipa XTmrCtr,
  102. * @paramTimerDeviceId - vrijednost konstante XPAR_<TmrCtr_instance>_DEVICE_ID iz datoteke xparameters.h,
  103. * @paramIntcDeviceId - vrijednost konstante XPAR_<Intc_instance>_DEVICE_ID iz datoteke xparameters.h,
  104. * @paramIntrSourceId - vrijednost konstante XPAR_<INTC_instance>_<TmrCtr_instance>_INTERRUPT_INTR iz datoteke xparameters.h,
  105. * @paramTmrCtrNumber - redni broj timera koji se inicijalizira.
  106. *
  107. * @returnXST_SUCCESS ako je inicijalizacija uspješna, a u suprotno funkcija vraća XST_FAILURE
  108. *
  109. *********************************************************************/
  110. int TmrCtrIntrInit(XIntc* IntcInstancePtr,
  111.  XTmrCtr* TmrCtrInstancePtr,
  112.  u16 TimerDeviceId,
  113.  u16 IntcDeviceId,
  114.  u16 IntrSourceId,
  115.  u8 TmrCtrNumber)
  116. {
  117.     int Status;
  118.  
  119.     print("Init STARTED\r\n");
  120.  
  121.     //***********************************************TO DO 7************************************************//
  122.     //**********Inicijalizirati timer, povratnu vrijednost funkcije spremiti u varijablu Status************//
  123.  
  124.     Status = XTmrCtr_Initialize(TmrCtrInstancePtr,TimerDeviceId );
  125.     //*****************************************************************************************************//
  126.     if (Status != XST_SUCCESS) {
  127.         print("Timer Initialize FAILED\r\n");
  128.         return XST_FAILURE;
  129.     }
  130.     print("Timer Initialize SUCCESS\r\n");
  131.  
  132.     //**********************************************TO DO 8*************************************************//
  133.     //****Inicijalizirati upravljač prekidima, povratnu vrijednost funkcije spremiti u varijablu Status****//
  134.  
  135. Status=XIntc_Initialize(IntcInstancePtr,IntcDeviceId);
  136.     //*****************************************************************************************************//
  137.     if (Status != XST_SUCCESS) {
  138.         print("Intc Initialize FAILED\r\n");
  139.         return XST_FAILURE;
  140.     }
  141.     print("Intc Initialize SUCCESS\r\n");
  142.  
  143.     /*
  144.      * Povezivanje upravljača prekida s rukovateljem prekida koji se
  145.      * poziva kada se dogodi prekid. Rukovatelj prekida obavlja
  146.      * specifične zadatke vezane za rukovanje prekidima.
  147.      */
  148.     Status = XIntc_Connect(IntcInstancePtr, IntrSourceId,
  149.      (XInterruptHandler)XTmrCtr_InterruptHandler,
  150.      (void *)TmrCtrInstancePtr);
  151.  
  152.     if (Status != XST_SUCCESS) {
  153.         print("Intc Connect FAILED\r\n");
  154.         return XST_FAILURE;
  155.     }
  156.     print("Intc Connect SUCCESS\r\n");
  157.  
  158.     //***********************************************TO DO 9******************************+****************//
  159.     //***Postaviti mod rada upravljača prekida, povratnu vrijednost funkcije spremiti u varijablu Status***//
  160. XIntc_Start(IntcInstancePtr, XIN_REAL_MODE);
  161.  
  162.     //*****************************************************************************************************//
  163.     if (Status != XST_SUCCESS) {
  164.         print("Intc Start FAILED\r\n");
  165.         return XST_FAILURE;
  166.     }
  167.     print("Intc Start SUCCESS\r\n");
  168.  
  169.     //**********************************************TO DO 10******************************+****************//
  170.     //*********************************Omogućiti rad upravljača prekidima**********************************//
  171.  
  172. XIntc_Enable(IntcInstancePtr,IntrSourceId);
  173.     //*****************************************************************************************************//
  174.  
  175.     //Omogućavanje microblaze prekida.
  176.     microblaze_enable_interrupts();
  177.  
  178.     /*
  179.      * Postavljanje prekidne rutine koja će biti pozvana kada se dogodi prekid
  180.      * od strane timera. Kao parametri predaju se pokazivač na komponentu za
  181.      * koju se postavlja prekidna rutina, naziv prekidne rutine (funkcije)
  182.      * i pointer na timer, kako bi prekidna rutina mogla pristupiti timeru.
  183.      */
  184.     XTmrCtr_SetHandler(TmrCtrInstancePtr,
  185.      TimerCounterHandler,
  186.      TmrCtrInstancePtr);
  187.  
  188.     //**********************************************TO DO 11******************************+****************//
  189.     //*************************************Postaviti postavke timera***************************************//
  190.     //************Omogućiti prekide, omogućiti auto reload, odabrati brojanje prema dolje******************//
  191.  
  192. XTmrCtr_SetOptions(TmrCtrInstancePtr,TmrCtrNumber,XTC_DOWN_COUNT_OPTION|XTC_AUTO_RELOAD_OPTION|XTC_INT_MODE_OPTION);
  193.     //*****************************************************************************************************//
  194.  
  195.     //**********************************************TO DO 12******************************+****************//
  196.     //********************************Postaviti početnu vrijednost timera**********************************//
  197.  
  198. XTmrCtr_SetResetValue(TmrCtrInstancePtr,TmrCtrNumber,RESET_VALUE);
  199.     //*****************************************************************************************************//
  200.  
  201.     print("Init FINISHED\r\n");
  202.     return XST_SUCCESS;
  203. }
  204.  
  205. /*
  206.  * Prekidna rutina koja se poziva kada timer generira prekid.
  207.  * Funkcija prima pokazivač na void parametar CallBackRef
  208.  * koji se cast-a na pokazivač tipa XTmrCtr.
  209.  * Ovaj parametar je napravljen kako bi se pokazao način na
  210.  * koji se unutar prekidne rutine može pristupiti timer
  211.  * komponenti i njenim funkcijama.
  212. */
  213. void TimerCounterHandler(void *CallBackRef, u8 TmrCtrNumber)
  214. {
  215.     print("Interrupt Handler!\r\n");
  216.  
  217.     XTmrCtr *InstancePtr = (XTmrCtr *)CallBackRef;
  218.     u8 ucount;
  219.     int vrijednostsklopki, timeMS;
  220.     //**********************************************TO DO 13***********************************************//
  221.     //*************************Deklarirati varijable timeMS (int) i uCount (uint)**************************//
  222.  
  223.     //npr brojanje gore/dolje samo za sklopku sw3
  224.     //if(vrijednostsklopki == 0b00000000)
  225.     //else if (vrijdnostsklioki==0b00001000)
  226.     //************************************************************************************+****************//
  227.  
  228.     //**********************************************TO DO 14***********************************************//
  229.     //*****************Brojati prekide i vrijednost prikazati na LE diodama razvojnog sustava**************//
  230.     vrijednostsklopki=XGpio_DiscreteRead(&prekidac,1);
  231.     if(vrijednostsklopki==0)
  232.     {
  233.         brojac++;
  234.         if(brojac>24)
  235.         {
  236.             brojac=0;
  237.         }
  238.         xil_printf("vrijednost brojaca prema gore: %d\n", brojac);
  239.     }
  240.     if(vrijednostsklopki==1)
  241.     {
  242.         brojac--;
  243.         if(brojac<0)
  244.         {
  245.             brojac=24;
  246.         }
  247.         xil_printf("vrijednost brojaca prema dolje: %d\n", brojac);
  248.     }
  249. }
Add Comment
Please, Sign In to add comment