void cliFunc_ledReset( char* args ) { print( NL ); // No \r\n by default after the command is entered // Reset I2C bus #if ISSI_Chip_31FL3733_define == 1 || ISSI_Chip_31FL3736_define == 1 GPIO_Ctrl( iirst_pin, GPIO_Type_DriveSetup, GPIO_Config_Pullup ); GPIO_Ctrl( iirst_pin, GPIO_Type_DriveHigh, GPIO_Config_Pullup ); delay_us(50); GPIO_Ctrl( iirst_pin, GPIO_Type_DriveLow, GPIO_Config_Pullup ); #endif i2c_reset(); // Clear control registers LED_zeroControlPages(); // Clear buffers for ( uint8_t buf = 0; buf < ISSI_Chips_define; buf++ ) { memset( (void*)LED_pageBuffer[ buf ].buffer, 0, LED_BufferLength * 2 ); } // Reset LEDs LED_reset(); }
void cliFunc_ledReset( char* args ) { print( NL ); // No \r\n by default after the command is entered // Reset I2C bus GPIOC_PSOR |= (1<<5); delay_us(50); GPIOC_PCOR |= (1<<5); i2c_reset(); // Clear control registers LED_zeroControlPages(); // Clear buffers for ( uint8_t buf = 0; buf < ISSI_Chips_define; buf++ ) { memset( (void*)LED_pageBuffer[ buf ].buffer, 0, LED_BufferLength * 2 ); } // Reset LEDs LED_reset(); }
// Setup inline void LED_setup() { // Register Scan CLI dictionary CLI_registerDictionary( ledCLIDict, ledCLIDictName ); #if Storage_Enable_define == 1 Storage_registerModule(&LedStorage); #endif // Zero out FPS time LED_timePrev = Time_now(); // Initialize framerate LED_framerate = ISSI_FrameRate_ms_define; // Global brightness setting LED_brightness = ISSI_Global_Brightness_define; // Initialize I2C error counters i2c_initial(); // Initialize I2C i2c_setup(); // Setup LED_pageBuffer addresses and brightness section LED_pageBuffer[0].i2c_addr = LED_MapCh1_Addr_define; LED_pageBuffer[0].reg_addr = ISSI_LEDPwmRegStart; #if ISSI_Chips_define >= 2 LED_pageBuffer[1].i2c_addr = LED_MapCh2_Addr_define; LED_pageBuffer[1].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 3 LED_pageBuffer[2].i2c_addr = LED_MapCh3_Addr_define; LED_pageBuffer[2].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 4 LED_pageBuffer[3].i2c_addr = LED_MapCh4_Addr_define; LED_pageBuffer[3].reg_addr = ISSI_LEDPwmRegStart; #endif // Brightness emulation #if ISSI_Chip_31FL3731_define // Setup LED_pageBuffer addresses and brightness section LED_pageBuffer_brightness[0].i2c_addr = LED_MapCh1_Addr_define; LED_pageBuffer_brightness[0].reg_addr = ISSI_LEDPwmRegStart; #if ISSI_Chips_define >= 2 LED_pageBuffer_brightness[1].i2c_addr = LED_MapCh2_Addr_define; LED_pageBuffer_brightness[1].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 3 LED_pageBuffer_brightness[2].i2c_addr = LED_MapCh3_Addr_define; LED_pageBuffer_brightness[2].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 4 LED_pageBuffer_brightness[3].i2c_addr = LED_MapCh4_Addr_define; LED_pageBuffer_brightness[3].reg_addr = ISSI_LEDPwmRegStart; #endif #endif // LED default setting LED_enable = ISSI_Enable_define; LED_enable_current = ISSI_Enable_define; // Needs a default setting, almost always unset immediately // Enable Hardware shutdown (pull low) GPIO_Ctrl( hardware_shutdown_pin, GPIO_Type_DriveSetup, GPIO_Config_Pullup ); GPIO_Ctrl( hardware_shutdown_pin, GPIO_Type_DriveLow, GPIO_Config_Pullup ); #if ISSI_Chip_31FL3733_define == 1 || ISSI_Chip_31FL3736_define == 1 // Reset I2C bus (pull high, then low) // NOTE: This GPIO may be shared with the debug LED GPIO_Ctrl( iirst_pin, GPIO_Type_DriveSetup, GPIO_Config_Pullup ); GPIO_Ctrl( iirst_pin, GPIO_Type_DriveHigh, GPIO_Config_Pullup ); delay_us(50); GPIO_Ctrl( iirst_pin, GPIO_Type_DriveLow, GPIO_Config_Pullup ); #endif // Zero out Frame Registers // This needs to be done before disabling the hardware shutdown (or the leds will do undefined things) LED_zeroControlPages(); // Disable Hardware shutdown of ISSI chips (pull high) if ( LED_enable && LED_enable_current ) { GPIO_Ctrl( hardware_shutdown_pin, GPIO_Type_DriveHigh, GPIO_Config_Pullup ); } // Reset LED sequencing LED_reset(); // Allocate latency resource ledLatencyResource = Latency_add_resource("ISSILed", LatencyOption_Ticks); }
// Detect short or open circuit in Matrix // Only works with IS31FL3733 void LED_shortOpenDetect() { #if ISSI_Chip_31FL3733_define == 1 || ISSI_Chip_31FL3736_define == 1 // Pause ISSI processing LED_pause = 1; for ( uint8_t ch = 0; ch < ISSI_Chips_define; ch++ ) { uint8_t addr = LED_ChannelMapping[ ch ].addr; uint8_t bus = LED_ChannelMapping[ ch ].bus; // Set Global Current Control (needed for accurate reading) LED_writeReg( bus, addr, 0x01, 0x01, ISSI_ConfigPage ); // Enable master sync for the first chip and disable software shutdown // Also enable OSD (Open/Short Detect) if ( ch == 0 ) { LED_writeReg( bus, addr, 0x00, 0x45, ISSI_ConfigPage ); } // Slave sync for the rest and disable software shutdown // Also enable OSD (Open/Short Detect) else { LED_writeReg( bus, addr, 0x00, 0x85, ISSI_ConfigPage ); } // Wait for 3.3 ms before reading the value // Needs at least 3.264 ms to query the information delay_us(3300); // Read registers info_msg("Bus: "); printHex( bus ); print(" Addr: "); printHex( addr ); print(" - 0x18 -> 0x2F + 0x30 -> 0x47"); print(NL); // Validate open detection // TODO for ( uint8_t reg = 0x18; reg < 0x30; reg++ ) { uint8_t val = LED_readReg( bus, addr, reg, ISSI_LEDControlPage ); printHex_op( val, 2 ); print(" "); } print(NL); // Validate short detection // TODO for ( uint8_t reg = 0x30; reg < 0x48; reg++ ) { uint8_t val = LED_readReg( bus, addr, reg, ISSI_LEDControlPage ); printHex_op( val, 2 ); print(" "); } print(NL); } // We have to adjust various settings in order to get the correct reading // Reset ISSI configuration LED_reset(); #endif }
// Setup inline void LED_setup() { // Register Scan CLI dictionary CLI_registerDictionary( ledCLIDict, ledCLIDictName ); // Zero out FPS time LED_timePrev = Time_now(); // Initialize framerate LED_framerate = ISSI_FrameRate_ms_define; // Global brightness setting LED_brightness = ISSI_Global_Brightness_define; // Initialize I2C i2c_setup(); // Setup LED_pageBuffer addresses and brightness section LED_pageBuffer[0].i2c_addr = LED_MapCh1_Addr_define; LED_pageBuffer[0].reg_addr = ISSI_LEDPwmRegStart; #if ISSI_Chips_define >= 2 LED_pageBuffer[1].i2c_addr = LED_MapCh2_Addr_define; LED_pageBuffer[1].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 3 LED_pageBuffer[2].i2c_addr = LED_MapCh3_Addr_define; LED_pageBuffer[2].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 4 LED_pageBuffer[3].i2c_addr = LED_MapCh4_Addr_define; LED_pageBuffer[3].reg_addr = ISSI_LEDPwmRegStart; #endif // Brightness emulation #if ISSI_Chip_31FL3731_define // Setup LED_pageBuffer addresses and brightness section LED_pageBuffer_brightness[0].i2c_addr = LED_MapCh1_Addr_define; LED_pageBuffer_brightness[0].reg_addr = ISSI_LEDPwmRegStart; #if ISSI_Chips_define >= 2 LED_pageBuffer_brightness[1].i2c_addr = LED_MapCh2_Addr_define; LED_pageBuffer_brightness[1].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 3 LED_pageBuffer_brightness[2].i2c_addr = LED_MapCh3_Addr_define; LED_pageBuffer_brightness[2].reg_addr = ISSI_LEDPwmRegStart; #endif #if ISSI_Chips_define >= 4 LED_pageBuffer_brightness[3].i2c_addr = LED_MapCh4_Addr_define; LED_pageBuffer_brightness[3].reg_addr = ISSI_LEDPwmRegStart; #endif #endif // LED default setting LED_enable = ISSI_Enable_define; // Enable Hardware shutdown (pull low) GPIOB_PDDR |= (1<<16); PORTB_PCR16 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); GPIOB_PCOR |= (1<<16); #if ISSI_Chip_31FL3733_define == 1 // Reset I2C bus (pull high, then low) // NOTE: This GPIO may be shared with the debug LED GPIOA_PDDR |= (1<<5); PORTA_PCR5 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); GPIOC_PSOR |= (1<<5); delay_us(50); GPIOC_PCOR |= (1<<5); #endif // Zero out Frame Registers // This needs to be done before disabling the hardware shutdown (or the leds will do undefined things) LED_zeroControlPages(); // Disable Hardware shutdown of ISSI chips (pull high) if ( LED_enable ) { GPIOB_PSOR |= (1<<16); } // Reset LED sequencing LED_reset(); // Allocate latency resource ledLatencyResource = Latency_add_resource("ISSILed", LatencyOption_Ticks); }