diff --git a/lib/card10/display.c b/lib/card10/display.c index 1e334202880580c194a843f8dc81ca4374ca4a35..e1d66276646f480cde27c063f162d7bd85dd6138 100644 --- a/lib/card10/display.c +++ b/lib/card10/display.c @@ -9,38 +9,37 @@ #include <stdint.h> #include <stdio.h> /***** Globals *****/ -const gpio_cfg_t DEV_DC_PIN = {PORT_1, PIN_6, GPIO_FUNC_OUT, GPIO_PAD_NONE}; +const gpio_cfg_t DEV_DC_PIN = { PORT_1, PIN_6, GPIO_FUNC_OUT, GPIO_PAD_NONE }; // Parameters for PWM output -#define PORT_PWM PORT_0 // port -#define PIN_PWM PIN_28 // pin -#define FREQ 200 // (Hz) -//#define DUTY_CYCLE 75 // (%) -#define DUTY_CYCLE 20 // (%) -#define PWM_TIMER MXC_TMR4 // must change PORT_PWM and PIN_PWM if changed - +#define PORT_PWM PORT_0 // port +#define PIN_PWM PIN_28 // pin +#define FREQ 200 // (Hz) +//#define DUTY_CYCLE 75 // (%) +#define DUTY_CYCLE 20 // (%) +#define PWM_TIMER MXC_TMR4 // must change PORT_PWM and PIN_PWM if changed /***** Functions *****/ void PWM_Output(void) { - // Declare variables - gpio_cfg_t gpio_pwm; // to configure GPIO - tmr_cfg_t tmr; // to congigure timer - tmr_pwm_cfg_t tmr_pwm; // for configure PWM - unsigned int period_ticks = PeripheralClock / FREQ; - unsigned int duty_ticks = period_ticks * DUTY_CYCLE / 100; - - // Congfigure GPIO port and pin for PWM - gpio_pwm.func = GPIO_FUNC_ALT4; - gpio_pwm.port = PORT_PWM; - gpio_pwm.mask = PIN_PWM; - gpio_pwm.pad = GPIO_PAD_PULL_DOWN; - - if (GPIO_Config(&gpio_pwm) != E_NO_ERROR) { - printf("Failed GPIO_Config for pwm.\n"); - } - - /* + // Declare variables + gpio_cfg_t gpio_pwm; // to configure GPIO + tmr_cfg_t tmr; // to congigure timer + tmr_pwm_cfg_t tmr_pwm; // for configure PWM + unsigned int period_ticks = PeripheralClock / FREQ; + unsigned int duty_ticks = period_ticks * DUTY_CYCLE / 100; + + // Congfigure GPIO port and pin for PWM + gpio_pwm.func = GPIO_FUNC_ALT4; + gpio_pwm.port = PORT_PWM; + gpio_pwm.mask = PIN_PWM; + gpio_pwm.pad = GPIO_PAD_PULL_DOWN; + + if (GPIO_Config(&gpio_pwm) != E_NO_ERROR) { + printf("Failed GPIO_Config for pwm.\n"); + } + + /* Steps for configuring a timer for PWM mode: 1. Disable the timer 2. Set the prescale value @@ -49,55 +48,55 @@ void PWM_Output(void) 5. Enable Timer */ - TMR_Disable(PWM_TIMER); + TMR_Disable(PWM_TIMER); - TMR_Init(PWM_TIMER, TMR_PRES_1, 0); + TMR_Init(PWM_TIMER, TMR_PRES_1, 0); - tmr.mode = TMR_MODE_PWM; - tmr.cmp_cnt = period_ticks; - tmr.pol = 0; - TMR_Config(PWM_TIMER, &tmr); + tmr.mode = TMR_MODE_PWM; + tmr.cmp_cnt = period_ticks; + tmr.pol = 0; + TMR_Config(PWM_TIMER, &tmr); - tmr_pwm.pol = 1; - tmr_pwm.per_cnt = period_ticks; - tmr_pwm.duty_cnt = duty_ticks; + tmr_pwm.pol = 1; + tmr_pwm.per_cnt = period_ticks; + tmr_pwm.duty_cnt = duty_ticks; - if (TMR_PWMConfig(PWM_TIMER, &tmr_pwm) != E_NO_ERROR) { - printf("Failed TMR_PWMConfig.\n"); - } + if (TMR_PWMConfig(PWM_TIMER, &tmr_pwm) != E_NO_ERROR) { + printf("Failed TMR_PWMConfig.\n"); + } - TMR_Enable(PWM_TIMER); + TMR_Enable(PWM_TIMER); - printf("PWM started.\n"); + printf("PWM started.\n"); } void display_set_reset_pin(uint8_t state) { - if(!portexpander_detected()) { - MAX77650_setDO(state ? true:false); - } else { - portexpander_set(4, state); - } + if (!portexpander_detected()) { + MAX77650_setDO(state ? true : false); + } else { + portexpander_set(4, state); + } } void display_init(void) { - if(!portexpander_detected()) { - // Open-drain - MAX77650_setDRV(false); - // Output - MAX77650_setDIR(false); - } + if (!portexpander_detected()) { + // Open-drain + MAX77650_setDRV(false); + // Output + MAX77650_setDIR(false); + } - GPIO_Config(&DEV_DC_PIN); + GPIO_Config(&DEV_DC_PIN); - PWM_Output(); - LCD_SetBacklight(500); - LCD_Init(); - LCD_Clear(BLACK); + PWM_Output(); + LCD_SetBacklight(500); + LCD_Init(); + LCD_Clear(BLACK); - Paint_NewImage(LCD_WIDTH, LCD_HEIGHT,0,WHITE); + Paint_NewImage(LCD_WIDTH, LCD_HEIGHT, 0, WHITE); - Paint_Clear(BLACK); - Paint_SetRotate(180); + Paint_Clear(BLACK); + Paint_SetRotate(180); } diff --git a/lib/card10/portexpander.c b/lib/card10/portexpander.c index 67192cc06d767f62cdd5942ca05a75d6350422f4..e372e71fe3c389c617c3934f355bfc58d548bb10 100644 --- a/lib/card10/portexpander.c +++ b/lib/card10/portexpander.c @@ -12,72 +12,76 @@ static uint8_t output_state; void portexpander_init(void) { - uint8_t addr = 0x21; - int ret; - - // Enable pull-ups for buttons - uint8_t command[] = {0x43, 0x68}; - ret = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); - - if(ret != 2) { - printf("portexpander NOT detected\n"); - detected = false; - return; - } - detected = true; - - // Set _all_ outputs to open-drain to support the high side p-channel transistors. - command[0] = 0x4F; command[1] = 0x01; - I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); - - // Enable outputs for the transistors, the LED and the LCD reset - command[0] = 0x03; command[1] = 0x68; - I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); - - // Set outputs to high (i.e. open-drain) - output_state = 0x97; - command[0] = 0x01; command[1] = output_state; - I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); - - // Turn on LEDs - // TODO: only turn on LEDs if value != 0,0,0 && dim > 0 - command[0] = 0x01; command[1] = 0x90; - I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); - + uint8_t addr = 0x21; + int ret; + + // Enable pull-ups for buttons + uint8_t command[] = { 0x43, 0x68 }; + ret = I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); + + if (ret != 2) { + printf("portexpander NOT detected\n"); + detected = false; + return; + } + detected = true; + + // Set _all_ outputs to open-drain to support the high side p-channel transistors. + command[0] = 0x4F; + command[1] = 0x01; + I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); + + // Enable outputs for the transistors, the LED and the LCD reset + command[0] = 0x03; + command[1] = 0x68; + I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); + + // Set outputs to high (i.e. open-drain) + output_state = 0x97; + command[0] = 0x01; + command[1] = output_state; + I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); + + // Turn on LEDs + // TODO: only turn on LEDs if value != 0,0,0 && dim > 0 + command[0] = 0x01; + command[1] = 0x90; + I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); } uint8_t portexpander_get(void) { - uint8_t addr = 0x21; - uint8_t command[] = {0x00}; - uint8_t buf = 0xFF; + uint8_t addr = 0x21; + uint8_t command[] = { 0x00 }; + uint8_t buf = 0xFF; - if(detected) { - I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 1, 1); - I2C_MasterRead(MXC_I2C1_BUS0, addr << 1, &buf, 1, 0); - } + if (detected) { + I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 1, 1); + I2C_MasterRead(MXC_I2C1_BUS0, addr << 1, &buf, 1, 0); + } - return buf; + return buf; } bool portexpander_detected(void) { - return detected; + return detected; } void portexpander_set(uint8_t pin, uint8_t value) { - uint8_t addr = 0x21; - uint8_t command[2]; - - if(detected && pin < 8) { - if(value) { - output_state |= (1 << pin); - } else { - output_state &= ~(1 << pin); - } - - command[0] = 0x01; command[1] = output_state; - I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); - } + uint8_t addr = 0x21; + uint8_t command[2]; + + if (detected && pin < 8) { + if (value) { + output_state |= (1 << pin); + } else { + output_state &= ~(1 << pin); + } + + command[0] = 0x01; + command[1] = output_state; + I2C_MasterWrite(MXC_I2C1_BUS0, addr << 1, command, 2, 0); + } }