Mary_99

pit final

Nov 29th, 2020 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.63 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <stdbool.h>
  3. #include "include/AT91SAM9263.h"
  4.  
  5. #define PIOB_CODR AT91C_PIOB_CODR //clean output data register//turn on
  6. #define PIOB_PER AT91C_PIOB_PER //setting IO port in IO mode //Controller PIO Enable Register//write only
  7. #define PIOB_OER AT91C_PIOB_OER //setting the direction of IO port //  Controller Output Enable Register// write only
  8. #define PIOB_SODR AT91C_PIOB_SODR //forcing the required state on port output // Controller Set Output Data Register//write only
  9.  
  10. #define PIOC_SODR AT91C_PIOC_SODR //forcing the required state on port output
  11. #define PIOC_PDSR AT91C_PIOC_PDSR //read input state/./PIO Controller Pin Data Status Register//read only
  12. #define PIOC_PER AT91C_PIOC_PER //setting IO port in IO mode
  13. #define PIOC_OER AT91C_PIOC_OER //setting the direction of IO port
  14. #define PIOC_CODR AT91C_PIOC_CODR //Controller Clear Output Data Register
  15. #define PIOC_ODR AT91C_PIOC_ODR //PIO Controller Output Disable Register
  16. #define PIOC_PUER AT91C_PIOC_PPUER//PIO Pull Up Enable Register
  17.  
  18. #define PITC_PIVR AT91C_PITC_PIVR //Periodic Interval Timer Value Register /read-only
  19. //Reading this register clears PITS in PIT_SR.
  20. #define PITC_MR AT91C_PITC_PIMR //read-write / Periodic Interval Timer Mode Register
  21. #define PITC_SR AT91C_PITC_PISR //real-time status register -
  22. // check if counter was reset  (bit PITS)
  23. //periodic Interval Timer Status Register//flag
  24. #define PITC_PIIR AT91C_PITC_PIVR//Periodic Interval Timer Image Register
  25. //Returns the current value of the periodic interval time
  26.  
  27. #define PMC_PCER  AT91C_PMC_PCER //send clock state to peripherals devices
  28.  
  29. #define DELAY 1000
  30. #define DELAY_STEP DELAY / 10
  31.  
  32. #define LED1 AT91C_PIO_PB8
  33. #define LED2 AT91C_PIO_PC29
  34.  
  35. #define B1 AT91C_PIO_PC5 //left  click
  36. #define B2 AT91C_PIO_PC4// right click
  37. #define PID4 1 << 4
  38.  
  39. #define DISABLE_TIMER ~AT91C_PITC_PITEN //PIT_MR
  40. #define ENABLE_TIMER AT91C_PITC_PITEN //PIT_MR
  41. #define DISABLE_INTERUPTS  ~AT91C_PITC_PITIEN//PIT_MR
  42.  
  43. #define PIV 6249
  44.  
  45. void pitInit (void)
  46. {
  47.   volatile unsigned int read;
  48.   *PITC_MR &= DISABLE_TIMER; //disable timer
  49.   *PITC_MR &= DISABLE_INTERUPTS; //disable interupts
  50.   *PITC_MR = PIV; //init PIV
  51.   read = *PITC_PIVR ; //to read and clear
  52.  
  53. }
  54.  
  55.  
  56. void pitDelayMs (unsigned int delay)
  57. {
  58.   volatile unsigned int read;
  59.   int time = 0;
  60.   while(time < delay)
  61.   {
  62.     time++;
  63.     volatile unsigned int flag = *PITC_SR;
  64.     *PITC_MR |= ENABLE_TIMER ; //enable timer start timer
  65.     while (*PITC_SR == 0) {}
  66.     flag = *PITC_SR;
  67.     read = *PITC_PIVR; //clerars PITS in PIT_SR
  68.   }
  69.  
  70. }
  71. void configureButtons(void)
  72. {
  73.     *PIOC_PER = B1| B2;
  74.     *PIOC_ODR = B1 | B2 ;
  75.     *PIOC_PUER = B1| B2 ;
  76. }
  77.  
  78. void configureClock(void)
  79. {
  80.     *PMC_PCER = PID4;
  81. }
  82.  
  83. void configureLEDs(void)
  84. {
  85.     *PIOB_PER = LED1;
  86.     *PIOB_OER = LED1;
  87.     *PIOC_PER = LED2;
  88.     *PIOC_OER = LED2;
  89. }
  90.  
  91.  
  92. void delayMs (volatile unsigned int delay)
  93. {
  94.   volatile int time;
  95.   for(time = 0; time < 80000*delay; time++);
  96. }
  97.  
  98.  
  99. int buttonState(int state)
  100. {
  101.   return ((*PIOC_PDSR & state) == 0);
  102. }
  103.  
  104.  
  105. int main(void)
  106. {
  107.     pitInit ();
  108.     configureLEDs();
  109.     configureButtons();
  110.     configureClock();
  111.    *PIOB_CODR = LED1;   // Turn on
  112.    *PIOB_SODR = LED1; // Turn off
  113.  
  114.   while(1)
  115.   {
  116.     int iterrator;
  117.     for(iterrator = 0; iterrator < DELAY_STEP; iterrator++)
  118.     {
  119.       pitDelayMs(DELAY);
  120.       *PIOB_CODR = LED1;     // Turn on
  121.  
  122.       pitDelayMs(DELAY);
  123.       *PIOB_SODR = LED1; // Turn off
  124.  
  125.       if(buttonState(B1))
  126.         {
  127.             *PIOC_CODR = LED2;
  128.         }
  129.  
  130.       if(buttonState(B2))
  131.         {
  132.               *PIOC_SODR = LED2;
  133.         }
  134.  
  135.   }
  136.  
  137. }
  138.  
  139.   return 0;
  140.  
  141. }
  142.  
Advertisement
Add Comment
Please, Sign In to add comment