123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /* ___DISCLAIMER___ */
- #include <arm/NXP/LPC17xx/LPC17xx.h>
- #include "bits.h"
- #include "timer.h"
- #include "led.h"
- #include "cli.h"
- static uint8_t led_bright[16] = {255, 253, 252, 251, 249, 247, 244, 239, 232, 223, 210, 191, 165, 127, 74, 0};
- int led_rdyledstate = 0;
- int led_readledstate = 0;
- int led_writeledstate = 0;
- int led_pwmstate = 0;
- /* LED connections (Rev.C)
- LED color IO PWM
- ---------------------------
- ready green P2.4 PWM1[5]
- read yellow P2.5 PWM1[6]
- write red P1.23 PWM1[4]
- */
- void rdyled( unsigned int state )
- {
- if ( led_pwmstate )
- {
- rdybright( state ? 15 : 0 );
- }
- else
- {
- BITBAND( LPC_GPIO2->FIODIR, 4 ) = state;
- }
- led_rdyledstate = state;
- }
- void readled( unsigned int state )
- {
- if ( led_pwmstate )
- {
- readbright( state ? 15 : 0 );
- }
- else
- {
- BITBAND( LPC_GPIO2->FIODIR, 5 ) = state;
- }
- led_readledstate = state;
- }
- void writeled( unsigned int state )
- {
- if ( led_pwmstate )
- {
- writebright( state ? 15 : 0 );
- }
- else
- {
- BITBAND( LPC_GPIO1->FIODIR, 23 ) = state;
- }
- led_writeledstate = state;
- }
- void rdybright( uint8_t bright )
- {
- LPC_PWM1->MR5 = led_bright[( bright & 15 )];
- BITBAND( LPC_PWM1->LER, 5 ) = 1;
- }
- void readbright( uint8_t bright )
- {
- LPC_PWM1->MR6 = led_bright[( bright & 15 )];
- BITBAND( LPC_PWM1->LER, 6 ) = 1;
- }
- void writebright( uint8_t bright )
- {
- LPC_PWM1->MR4 = led_bright[( bright & 15 )];
- BITBAND( LPC_PWM1->LER, 4 ) = 1;
- }
- void led_clkout32( uint32_t val )
- {
- while ( 1 )
- {
- rdyled( 1 );
- delay_ms( 400 );
- readled( ( val & BV( 31 ) ) >> 31 );
- rdyled( 0 );
- val <<= 1;
- delay_ms( 400 );
- }
- }
- void toggle_rdy_led()
- {
- rdyled( ~led_rdyledstate );
- }
- void toggle_read_led()
- {
- readled( ~led_readledstate );
- }
- void toggle_write_led()
- {
- writeled( ~led_writeledstate );
- }
- void led_panic()
- {
- led_std();
- while ( 1 )
- {
- rdyled( 1 );
- readled( 1 );
- writeled( 1 );
- delay_ms( 100 );
- rdyled( 0 );
- readled( 0 );
- writeled( 0 );
- delay_ms( 100 );
- cli_entrycheck();
- }
- }
- void led_pwm()
- {
- /* Rev.C P2.4, P2.5, P1.23 */
- BITBAND( LPC_PINCON->PINSEL4, 9 ) = 0;
- BITBAND( LPC_PINCON->PINSEL4, 8 ) = 1;
- BITBAND( LPC_PINCON->PINSEL4, 11 ) = 0;
- BITBAND( LPC_PINCON->PINSEL4, 10 ) = 1;
- BITBAND( LPC_PINCON->PINSEL3, 15 ) = 1;
- BITBAND( LPC_PINCON->PINSEL3, 14 ) = 0;
- BITBAND( LPC_PWM1->PCR, 12 ) = 1;
- BITBAND( LPC_PWM1->PCR, 13 ) = 1;
- BITBAND( LPC_PWM1->PCR, 14 ) = 1;
- led_pwmstate = 1;
- }
- void led_std()
- {
- BITBAND( LPC_PINCON->PINSEL4, 9 ) = 0;
- BITBAND( LPC_PINCON->PINSEL4, 8 ) = 0;
- BITBAND( LPC_PINCON->PINSEL4, 11 ) = 0;
- BITBAND( LPC_PINCON->PINSEL4, 10 ) = 0;
- BITBAND( LPC_PINCON->PINSEL3, 15 ) = 0;
- BITBAND( LPC_PINCON->PINSEL3, 14 ) = 0;
- BITBAND( LPC_PWM1->PCR, 12 ) = 0;
- BITBAND( LPC_PWM1->PCR, 13 ) = 0;
- BITBAND( LPC_PWM1->PCR, 14 ) = 0;
- led_pwmstate = 0;
- }
- void led_init()
- {
- /* power is already connected by default */
- /* set PCLK divider to 8 */
- BITBAND( LPC_SC->PCLKSEL0, 13 ) = 1;
- BITBAND( LPC_SC->PCLKSEL0, 12 ) = 1;
- LPC_PWM1->MR0 = 255;
- BITBAND( LPC_PWM1->LER, 0 ) = 1;
- BITBAND( LPC_PWM1->TCR, 0 ) = 1;
- BITBAND( LPC_PWM1->TCR, 3 ) = 1;
- BITBAND( LPC_PWM1->MCR, 1 ) = 1;
- }
|