X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fstm%2Fao_lcd_stm.c;h=47246678210688e09c3794c877c71262979e2844;hb=HEAD;hp=47ea374ed6070303b5b306db6cb1719e825ea891;hpb=38d4110e59a44687d8a4743b8cd04cbf2761c9d8;p=fw%2Faltos diff --git a/src/stm/ao_lcd_stm.c b/src/stm/ao_lcd_stm.c index 47ea374e..47246678 100644 --- a/src/stm/ao_lcd_stm.c +++ b/src/stm/ao_lcd_stm.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -41,14 +42,14 @@ static struct stm_gpio *gpios[] = { &stm_gpioe }; -static inline int ao_lcd_stm_seg_enabled(int seg) { +static inline int ao_lcd_stm_seg_enabled(uint32_t seg) { if (seg < 32) return (AO_LCD_STM_SEG_ENABLED_0 >> seg) & 1; else return (AO_LCD_STM_SEG_ENABLED_1 >> (seg - 32)) & 1; } -static inline int ao_lcd_stm_com_enabled(int com) { +static inline int ao_lcd_stm_com_enabled(uint32_t com) { return (AO_LCD_STM_COM_ENABLED >> com) & 1; } @@ -293,7 +294,7 @@ ao_lcd_set(uint8_t digit, uint8_t segment, uint8_t value) #ifdef AO_SEGMENT_MAP #if AO_LCD_PER_DIGIT - n = digit * AO_LCD_SEGMENTS + segment; + n = (uint8_t) (digit * AO_LCD_SEGMENTS + segment); com = ao_lcd_map[n].com; seg = ao_lcd_map[n].seg; #else @@ -314,9 +315,9 @@ ao_lcd_set(uint8_t digit, uint8_t segment, uint8_t value) #endif n = (seg >> 5) & 1; if (value) - stm_lcd.ram[com * 2 + n] |= (1 << (seg & 0x1f)); + stm_lcd.ram[com * 2 + n] |= (1UL << (seg & 0x1f)); else - stm_lcd.ram[com * 2 + n] &= ~(1 << (seg & 0x1f)); + stm_lcd.ram[com * 2 + n] &= ~(1UL << (seg & 0x1f)); } #if LCD_DEBUG @@ -325,12 +326,9 @@ ao_lcd_stm_seg_set(void) { int com, seg, val; int n, bit; - ao_cmd_decimal(); - com = ao_cmd_lex_i; - ao_cmd_decimal(); - seg = ao_cmd_lex_u32; - ao_cmd_decimal(); - val = ao_cmd_lex_i; + com = ao_cmd_decimal(); + seg = ao_cmd_decimal(); + val = ao_cmd_decimal(); printf ("com: %d seg: %d val: %d\n", com, seg, val); ao_lcd_set(com, seg, val); ao_lcd_flush(); @@ -346,15 +344,14 @@ static const struct ao_cmds ao_lcd_stm_cmds[] = { void ao_lcd_stm_init(void) { - int s, c; - int r; + unsigned int s, c; uint32_t csr; - stm_rcc.ahbenr |= ((AO_LCD_STM_USES_GPIOA << STM_RCC_AHBENR_GPIOAEN) | - (AO_LCD_STM_USES_GPIOB << STM_RCC_AHBENR_GPIOBEN) | - (AO_LCD_STM_USES_GPIOC << STM_RCC_AHBENR_GPIOCEN) | - (AO_LCD_STM_USES_GPIOD << STM_RCC_AHBENR_GPIODEN) | - (AO_LCD_STM_USES_GPIOE << STM_RCC_AHBENR_GPIOEEN)); + stm_rcc.ahbenr |= (((uint32_t) AO_LCD_STM_USES_GPIOA << STM_RCC_AHBENR_GPIOAEN) | + ((uint32_t) AO_LCD_STM_USES_GPIOB << STM_RCC_AHBENR_GPIOBEN) | + ((uint32_t) AO_LCD_STM_USES_GPIOC << STM_RCC_AHBENR_GPIOCEN) | + ((uint32_t) AO_LCD_STM_USES_GPIOD << STM_RCC_AHBENR_GPIODEN) | + ((uint32_t) AO_LCD_STM_USES_GPIOE << STM_RCC_AHBENR_GPIOEEN)); stm_rcc.apb1enr |= (1 << STM_RCC_APB1ENR_LCDEN);