X-Git-Url: http://git.kpe.io/?p=avr_serial_lcd.git;a=blobdiff_plain;f=serial_lcd.c;h=1235c7ba0c527653ba7284c3a149a9c977940bd5;hp=0c8bb10aa85dd36c288d89cb41e623a00e9a65bb;hb=8147823cf64e37f6f43838ffa9e056ea48e30c32;hpb=debfa9107d3c94c1534808fe9ca260b8f4521e30 diff --git a/serial_lcd.c b/serial_lcd.c index 0c8bb10..1235c7b 100644 --- a/serial_lcd.c +++ b/serial_lcd.c @@ -11,8 +11,9 @@ ** ** Compilers supported: ** - WinAVR-20071221 (includes avr-libc 1.6 required for proper _delay_us) -** - IAR AVR 4.30 -** - Imagecraft AVR 7 +** - IAR AVR 4.30 and 5.10 +** - Imagecraft AVR 7.16 +** - Codevision AVR 2.02.06 ** ** LICENSE ** See accompaning LICENSE file @@ -30,7 +31,7 @@ FUSES = { .extended = EFUSE_DEFAULT, }; #endif - + // Number of PWM brightness levels supported #define LED_BRIGHTNESS_LEVELS 8 @@ -93,6 +94,12 @@ static FLASH_DECLARE(const unsigned char ledPwmPatterns[]) = #pragma global_register ledPwmCount:20 sUartRxHead:21 sUartRxTail:22 ledPwmCycling:23 unsigned char ledPwmCount, sUartRxHead, sUartRxTail, ledPwmCycling; +#elif defined(__CODEVISIONAVR__) +#pragma regalloc- +register unsigned char ledPwmCount, sUartRxHead, sUartRxTail, ledPwmCycling; +#pragma regalloc+ + +// Use avr_compat register variables #else REGISTER_VAR(unsigned char ledPwmCount, "r4", 15); REGISTER_VAR(unsigned char sUartRxHead, "r5", 14); @@ -101,8 +108,16 @@ REGISTER_VAR(unsigned char ledPwmCycling, "r7", 12); #endif #define ledPwmPattern GPIOR0 -#define ledStatus GPIOR1 +#if defined(REGISTER_BIT) #define BIT_led_on REGISTER_BIT(GPIOR1,0) +#define BACKLIGHT_STATUS() BIT_led_on +#define BACKLIGHT_OFF() BIT_led_on = 0 +#define BACKLIGHT_ON() BIT_led_on = 1 +#else +#define BACKLIGHT_STATUS() (GPIOR1 & 0x01) +#define BACKLIGHT_OFF() GPIOR1 &=~ ~0x01 +#define BACKLIGHT_ON() GPIOR1 |= 0x01 +#endif // Function declarations void LcdWriteCmd (unsigned char); @@ -110,8 +125,8 @@ void LcdWriteData (unsigned char); unsigned char LcdBusyWait (void); static unsigned char WaitRxChar (void); -// ImageCraft doesn't support inline functions, so use preprocessor -#if defined(__IMAGECRAFT__) +// ImageCraft/Codevision don't support inline functions, so use preprocessor +#if defined(__IMAGECRAFT__) || defined(__CODEVISIONAVR__) #define LedTimerStop() TCCR0B = 0 // Start with 256 prescaler #define LedTimerStart() TCCR0B = (1<> 8; + ledPwmPos = (brightness * (LED_BRIGHTNESS_LEVELS-1) + (unsigned int) 127) >> 8; // Below is probably not required, but ensures we don't exceed array if (ledPwmPos > LED_BRIGHTNESS_LEVELS - 1) ledPwmPos = LED_BRIGHTNESS_LEVELS - 1; @@ -168,12 +183,12 @@ static inline void LedPwmSetBrightness (unsigned char brightness) { ledPwmCycling = ledPwmPattern; if (ledPwmPos >= LED_BRIGHTNESS_LEVELS-1) { // maximum brightness // don't need PWM for continuously on - if (BIT_led_on) { + if (BACKLIGHT_STATUS()) { LedTimerStop(); LED_PORT |= (1<