led.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /* ___DISCLAIMER___ */
  2. #include <arm/NXP/LPC17xx/LPC17xx.h>
  3. #include "bits.h"
  4. #include "timer.h"
  5. #include "led.h"
  6. int led_rdyledstate = 0;
  7. int led_readledstate = 0;
  8. int led_writeledstate = 0;
  9. /* LED connections (Rev.C)
  10. LED color IO PWM
  11. ---------------------------
  12. ready green P2.4 PWM1[5]
  13. read yellow P2.5 PWM1[6]
  14. write red P1.23 PWM1[4]
  15. */
  16. void rdyled( unsigned int state )
  17. {
  18. BITBANG( LPC_GPIO2->FIODIR, 4 ) = state;
  19. led_rdyledstate = state;
  20. }
  21. void readled( unsigned int state )
  22. {
  23. BITBANG( LPC_GPIO2->FIODIR, 5 ) = state;
  24. led_readledstate = state;
  25. }
  26. void writeled( unsigned int state )
  27. {
  28. BITBANG( LPC_GPIO1->FIODIR, 23 ) = state;
  29. led_writeledstate = state;
  30. }
  31. void led_clkout32( uint32_t val )
  32. {
  33. while ( 1 )
  34. {
  35. rdyled( 1 );
  36. delay_ms( 400 );
  37. readled( ( val & BV( 31 ) ) >> 31 );
  38. rdyled( 0 );
  39. val <<= 1;
  40. delay_ms( 400 );
  41. }
  42. }
  43. void toggle_rdy_led()
  44. {
  45. rdyled( ~led_rdyledstate );
  46. }
  47. void toggle_read_led()
  48. {
  49. readled( ~led_readledstate );
  50. }
  51. void toggle_write_led()
  52. {
  53. writeled( ~led_writeledstate );
  54. }
  55. void led_panic()
  56. {
  57. while ( 1 )
  58. {
  59. LPC_GPIO2->FIODIR |= BV( 4 ) | BV( 5 );
  60. LPC_GPIO1->FIODIR |= BV( 23 );
  61. delay_ms( 350 );
  62. LPC_GPIO2->FIODIR &= ~( BV( 4 ) | BV( 5 ) );
  63. LPC_GPIO1->FIODIR &= ~BV( 23 );
  64. delay_ms( 350 );
  65. }
  66. }
  67. void led_std()
  68. {
  69. BITBANG( LPC_PINCON->PINSEL4, 9 ) = 0;
  70. BITBANG( LPC_PINCON->PINSEL4, 8 ) = 0;
  71. BITBANG( LPC_PINCON->PINSEL4, 11 ) = 0;
  72. BITBANG( LPC_PINCON->PINSEL4, 10 ) = 0;
  73. BITBANG( LPC_PINCON->PINSEL3, 15 ) = 0;
  74. BITBANG( LPC_PINCON->PINSEL3, 14 ) = 0;
  75. BITBANG( LPC_PWM1->PCR, 12 ) = 0;
  76. BITBANG( LPC_PWM1->PCR, 13 ) = 0;
  77. BITBANG( LPC_PWM1->PCR, 14 ) = 0;
  78. }
  79. void led_init()
  80. {
  81. /* power is already connected by default */
  82. /* set PCLK divider to 8 */
  83. BITBANG( LPC_SC->PCLKSEL1, 21 ) = 1;
  84. BITBANG( LPC_SC->PCLKSEL1, 20 ) = 1;
  85. }