Suga koubou
/
LEDTape_UCS1903
UCS1903 tape led
Embed:
(wiki syntax)
Show/hide line numbers
LEDTape.cpp
00001 /* 00002 * UCS1903 tape led IC 00003 */ 00004 #include "mbed.h" 00005 #include "LEDTape.h" 00006 00007 SPI tape(p11, p12, p13); 00008 00009 //#define tape_write(d) tape.write(d) 00010 #ifndef tape_write 00011 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00012 void tape_write (int d) { 00013 while (! (LPC_SSP0->SR & (1<<1))); // TNF 00014 LPC_SSP0->DR = d; 00015 } 00016 #elif defined(TARGET_LPC11U24) 00017 void tape_write (int d) { 00018 while (! (LPC_SSP1->SR & (1<<1))); // TNF 00019 LPC_SSP1->DR = d; 00020 } 00021 #endif 00022 #endif 00023 00024 void tapeReset (int flag) { 00025 int i; 00026 00027 __disable_irq(); 00028 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00029 if (flag) { 00030 while ((LPC_SSP0->SR & ((1<<4)|(1<<0))) != (1<<0)); // BSY, TFE 00031 LPC_PINCON->PINSEL1 &= ~(0x03<<4); // GPIO 00032 LPC_GPIO0->FIODIR0 |= (1<<18); 00033 LPC_GPIO0->FIOSET0 = (1<<18); 00034 } else { 00035 for (i = 0; i < 4; i ++) { 00036 tape_write(0x1f); 00037 } 00038 LPC_PINCON->PINSEL1 &= ~(0x03<<4); 00039 LPC_PINCON->PINSEL1 |= (0x02<<4); // SSP MOSI 00040 } 00041 #elif defined(TARGET_LPC11U24) 00042 if (flag) { 00043 while ((LPC_SSP1->SR & ((1<<4)|(1<<0))) != (1<<0)); // BSY, TFE 00044 LPC_IOCON->PIO1_22 &= ~0x07; // GPIO 00045 LPC_GPIO->DIR[1] |= (1<<22); 00046 LPC_GPIO->SET[1] |= (1<<22); 00047 } else { 00048 for (i = 0; i < 4; i ++) { 00049 tape_write(0x1f); 00050 } 00051 LPC_IOCON->PIO1_22 &= ~0x07; 00052 LPC_IOCON->PIO1_22 |= 0x02; // SSP MOSI 00053 } 00054 #endif 00055 __enable_irq(); 00056 } 00057 00058 void tapeSend (int dat) { 00059 int b; 00060 00061 __disable_irq(); 00062 for (b = 0x800000; b; b = b >> 1) { 00063 if (dat & b) { 00064 // 1 00065 tape_write(0x01); 00066 } else { 00067 // 0 00068 tape_write(0x0f); 00069 } 00070 } 00071 __enable_irq(); 00072 } 00073 00074 void tapeInit (int freq) { 00075 tape.format(5, 1); 00076 if (freq) { 00077 tape.frequency(freq * 1000); 00078 } else { 00079 // high speed (800kbps) 00080 tape.frequency(4000000); 00081 } 00082 tapeReset(1); 00083 }
Generated on Sun Jul 24 2022 15:30:52 by 1.7.2