12-Channel LED Driver With Gray scale Adaptive Pulse Density Modulation Control IC Library. maker MY-Semi
MY9221.cpp
- Committer:
- suupen
- Date:
- 2017-10-22
- Revision:
- 1:60440eb16f81
- Parent:
- 0:3a18655ada14
- Child:
- 2:4d9aee0bd724
File content as of revision 1:60440eb16f81:
/** * MY9221 Library */ #define _MY9221_C #include "mbed.h" #include "MY9221.h" /** * */ MY9221::MY9221(PinName di, PinName dcki, uint8_t number ) : _di(di), _dcki(dcki), _number(number) { // 変数初期化 ,マイコン機能の設定 _di = 0; _dcki = 0; } /** send one word data * @param uint16_t data : send data * @param return none */ void MY9221::sendWord(uint16_t data) { uint16_t temp = data; uint8_t count = 8; __disable_irq(); // 禁止 _dcki = 0; wait_us(1); do { _di = ((temp & 0x8000) == 0x8000) ? 1 : 0; temp <<= 1; wait_us(1); _dcki = 1; wait_us(1); _di = ((temp & 0x8000) == 0x8000) ? 1 : 0; temp <<= 1; wait_us(1); _dcki = 0; wait_us(1); } while(--count > 0); _di = 0; _dcki = 0; __enable_irq(); // 許可 } /** data latch & display * @param none * @param return none */ void MY9221::latch(void) { __disable_irq(); // 禁止 _dcki = 0; wait_us(1); _di = 1; wait_us(1); _di = 0; wait_us(1); _di = 1; wait_us(1); _di = 0; wait_us(1); _di = 1; wait_us(1); _di = 0; wait_us(1); _di = 1; wait_us(1); _di = 0; wait_us(1); _dcki = 0; __enable_irq(); // 許可 } /** send brock data * @param commandData_t *data : MY9221 Data * @param uint8_t number : connection number (min=1) * @param none */ void MY9221::sendBrock(commandData_t *data, uint8_t number) { for(uint8_t i = 0; i < number; i++) { sendWord((data + i)->CMD); sendWord((data + i)->D[0].DA); sendWord((data + i)->D[0].DB); sendWord((data + i)->D[0].DC); sendWord((data + i)->D[1].DA); sendWord((data + i)->D[1].DB); sendWord((data + i)->D[1].DC); sendWord((data + i)->D[2].DA); sendWord((data + i)->D[2].DB); sendWord((data + i)->D[2].DC); sendWord((data + i)->D[3].DA); sendWord((data + i)->D[3].DB); sendWord((data + i)->D[3].DC); } latch(); } void MY9221::initialTest(void) { MY9221::MY9221_data[0].CMD = 0; MY9221_data[0].CMD = LOUT_FAST_MODE | GRAYSCALE_16BIT | ORIGINAL_FREQ1 | WAVE_APDM | GCLOCK_INTERNAL | WORK_LED | COUNTER_FREE | SHOT_REPEAT; MY9221_data[0].D[OUT0].DA = 0x0002; MY9221_data[0].D[OUT0].DB = 0x0004; MY9221_data[0].D[OUT0].DC = 0x0008; MY9221_data[0].D[OUT1].DA = 0x0020; MY9221_data[0].D[OUT1].DB = 0x0040; MY9221_data[0].D[OUT1].DC = 0x0080; MY9221_data[0].D[OUT2].DA = 0x0200; MY9221_data[0].D[OUT2].DB = 0x0400; MY9221_data[0].D[OUT2].DC = 0x0800; MY9221_data[0].D[OUT3].DA = 0x2000; MY9221_data[0].D[OUT3].DB = 0x4000; MY9221_data[0].D[OUT3].DC = 0x8000; } void MY9221::test(void) { MY9221_data[0].D[OUT0].DA += 0x0002; MY9221_data[0].D[OUT0].DB += 0x0004; MY9221_data[0].D[OUT0].DC += 0x0008; MY9221_data[0].D[OUT1].DA += 0x0020; MY9221_data[0].D[OUT1].DB += 0x0040; MY9221_data[0].D[OUT1].DC += 0x0080; MY9221_data[0].D[OUT2].DA += 0x0200; MY9221_data[0].D[OUT2].DB += 0x0400; MY9221_data[0].D[OUT2].DC += 0x0800; MY9221_data[0].D[OUT3].DA += 0x2000; MY9221_data[0].D[OUT3].DB += 0x4000; MY9221_data[0].D[OUT3].DC += 0x8000; sendBrock(MY9221_data, 1); }