Merge pull request #12 from kienvo/brightness

Add brightness adjustment
This commit is contained in:
François Cartegnie
2024-06-12 16:38:08 +07:00
committed by GitHub
3 changed files with 25 additions and 9 deletions

View File

@@ -1,7 +1,9 @@
#include "leddrv.h" #include "leddrv.h"
#define LED_DRIVE_STRENTH 0
#define LED_PINCOUNT (23) #define LED_PINCOUNT (23)
volatile int drive_strength;
typedef enum { typedef enum {
FLOATING, FLOATING,
LOW, LOW,
@@ -28,15 +30,20 @@ static void gpio_buf_set(pinctrl_t pinctl, tristate_t state)
} }
} }
void led_setDriveStrength(int is_20mA)
{
drive_strength = is_20mA;
}
static void gpio_buf_apply( static void gpio_buf_apply(
volatile uint8_t *gpio_base, volatile uint8_t *gpio_base,
uint32_t *port, uint32_t *cfg, uint32_t *port, uint32_t *cfg,
uint32_t *mask) uint32_t *mask)
{ {
#if LED_DRIVE_STRENTH != 0 if (drive_strength) {
uint32_t *drv = (uint32_t *)(gpio_base + GPIO_PD_DRV); uint32_t *drv = (uint32_t *)(gpio_base + GPIO_PD_DRV);
*drv = (*drv & ~*mask) | (*cfg & *mask); *drv = (*drv & ~*mask) | (*cfg & *mask);
#endif }
uint32_t *dir = (uint32_t *)(gpio_base + GPIO_DIR); uint32_t *dir = (uint32_t *)(gpio_base + GPIO_DIR);
*dir = (*dir & ~*mask) | (*cfg & *mask); *dir = (*dir & ~*mask) | (*cfg & *mask);

View File

@@ -10,5 +10,6 @@ void led_init();
void leds_releaseall(); void leds_releaseall();
void led_write2dcol(int dcol, uint16_t col1_val, uint16_t col2_val); void led_write2dcol(int dcol, uint16_t col1_val, uint16_t col2_val);
void led_write2row_raw(int row, int which_half, uint32_t val); void led_write2row_raw(int row, int which_half, uint32_t val);
void led_setDriveStrength(int is_20mA);
#endif /* __LEDDRV_H__ */ #endif /* __LEDDRV_H__ */

View File

@@ -57,6 +57,7 @@ __HIGH_CODE
static void change_brightness() static void change_brightness()
{ {
NEXT_STATE(brightness, 0, BRIGHTNESS_LEVELS); NEXT_STATE(brightness, 0, BRIGHTNESS_LEVELS);
led_setDriveStrength(brightness / 2);
} }
__HIGH_CODE __HIGH_CODE
@@ -95,7 +96,7 @@ int main()
draw2fb(fb[1], 3, 8*12); draw2fb(fb[1], 3, 8*12);
fb_num = 2; fb_num = 2;
TMR0_TimerInit(SCAN_T); TMR0_TimerInit(SCAN_T / 2);
TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END);
PFIC_EnableIRQ(TMR0_IRQn); PFIC_EnableIRQ(TMR0_IRQn);
@@ -124,7 +125,7 @@ void TMR0_IRQHandler(void)
if (TMR0_GetITFlag(TMR0_3_IT_CYC_END)) { if (TMR0_GetITFlag(TMR0_3_IT_CYC_END)) {
i += 2; i += 1;
if (i >= LED_COLS) { if (i >= LED_COLS) {
i = 0; i = 0;
scroll++; scroll++;
@@ -132,8 +133,15 @@ void TMR0_IRQHandler(void)
scroll = 0; scroll = 0;
} }
} }
// This is a mess
led_write2dcol(i/2, fb[fb_sel][i+scroll/SCROLL_IRATIO], fb[fb_sel][i+scroll/SCROLL_IRATIO+1]); if (i % 2) {
if ((brightness + 1) % 2)
leds_releaseall();
} else {
led_write2dcol(i/2,
fb[fb_sel][i+scroll/SCROLL_IRATIO],
fb[fb_sel][i+scroll/SCROLL_IRATIO+1]);
}
TMR0_ClearITFlag(TMR0_3_IT_CYC_END); TMR0_ClearITFlag(TMR0_3_IT_CYC_END);
} }