timer.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* ___INGO___ */
  2. #include <arm/NXP/LPC17xx/LPC17xx.h>
  3. #include "bits.h"
  4. #include "config.h"
  5. #include "timer.h"
  6. #include "clock.h"
  7. #include "uart.h"
  8. #include "sdnative.h"
  9. /* bit definitions */
  10. #define RITINT 0
  11. #define RITEN 3
  12. #define PCRIT 16
  13. extern volatile int sd_changed;
  14. volatile tick_t ticks;
  15. volatile int wokefromrit;
  16. void timer_init( void )
  17. {
  18. /* turn on power to RIT */
  19. BITBANG( LPC_SC->PCONP, PCRIT ) = 1;
  20. /* clear RIT mask */
  21. LPC_RIT->RIMASK = 0; /*xffffffff;*/
  22. /* PCLK = CCLK */
  23. BITBANG( LPC_SC->PCLKSEL1, 26 ) = 1;
  24. BITBANG( LPC_SC->PCLKSEL1, PCLK_TIMER3 ) = 1;
  25. }
  26. void delay_us( unsigned int time )
  27. {
  28. /* Prepare RIT */
  29. LPC_RIT->RICOUNTER = 0;
  30. LPC_RIT->RICOMPVAL = ( CONFIG_CPU_FREQUENCY / 1000000 ) * time;
  31. LPC_RIT->RICTRL = BV( RITEN ) | BV( RITINT );
  32. /* Wait until RIT signals an interrupt */
  33. while ( !( BITBANG( LPC_RIT->RICTRL, RITINT ) ) ) ;
  34. /* Disable RIT */
  35. LPC_RIT->RICTRL = 0;
  36. }
  37. void delay_ms( unsigned int time )
  38. {
  39. /* Prepare RIT */
  40. LPC_RIT->RICOUNTER = 0;
  41. LPC_RIT->RICOMPVAL = ( CONFIG_CPU_FREQUENCY / 1000 ) * time;
  42. LPC_RIT->RICTRL = BV( RITEN ) | BV( RITINT );
  43. /* Wait until RIT signals an interrupt */
  44. while ( !( BITBANG( LPC_RIT->RICTRL, RITINT ) ) ) ;
  45. /* Disable RIT */
  46. LPC_RIT->RICTRL = 0;
  47. }