20080320 release
authorKevin Rosenberg <kevin@rosenberg.net>
Thu, 20 Mar 2008 20:05:09 +0000 (14:05 -0600)
committerKevin Rosenberg <kevin@rosenberg.net>
Thu, 20 Mar 2008 20:05:09 +0000 (14:05 -0600)
ChangeLog
README
cv_c/Makefile
cv_c/serial_lcd.prj
serial_lcd.c
serial_lcd.h

index 9dad81f761e89fbc0d198e6118a5f0845edb14e9..aaf43bba6131f1fb9d6d4a7020002e2d75f19ef2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
+2008-03-20  Kevin Rosenberg <kevin@rosenberg.net>\r
+       * serial_lcd.h, serial_lcd.c: Switch to using native delay\r
+       and sleep functions for Codevision. \r
+\r
 2008-03-18  Kevin Rosenberg <kevin@rosenberg.net>\r
        * Add Codevision port \r
-\r
+       \r
 2008-03-15  Kevin Rosenberg <kevin@rosenberg.net>\r
        * serial_lcd.c: Add 4-bit interface mode\r
        * serial_lcd.h: Move LCD control codes here with renaming.  Use\r
diff --git a/README b/README
index 1db3974609827208acd7a36aa1396454f123e2ab..018a7b64501871e771fcfcbf35943cf4226e14f8 100644 (file)
--- a/README
+++ b/README
@@ -38,19 +38,19 @@ The code can be modified and redistributed as governed by the terms of
 the accompaning LICENSE file.\r
 \r
 \r
-Code/Data Sizes (for 20080318 release)\r
+Code/Data Sizes (for 20080320 release)\r
 ======================================\r
 \r
-Compiler    Code  Data  Notes\r
----------   ----  ----  -----\r
-AVR-GCC C    716    48  -Os\r
-AVR-GCC C++  806    50  -Os\r
-AVR-GCC Obj 1574    72  -Os\r
-CV 2.02.6    808    48  Maximum size optimization\r
-IAR C        622    48  Size optimization high (+ 64 bytes stack)\r
-IAR C++      762    49  Size optimization high (+ 64 bytes stack)\r
-IAR Obj     1112    65  Size optimization high (+ 63 bytes stack)\r
-ICC7 C Pro   812    48  Full optimizations (-O24)\r
+Compiler               Code  Data  Notes\r
+---------              ----  ----  -----\r
+IAR 5.10A C             622    48  Size optimization high (+ 64 bytes stack)\r
+AVR-GCC 4.2.2 C         716    48  -Os\r
+IAR 5.10A C++           762    49  Size optimization high (+ 64 bytes stack)\r
+Codevision 2.02.6       792    48  Maximum size optimization\r
+AVR-GCC 4.2.2 C++       806    50  -Os\r
+ImageCraft 7.16 Pro C   808    48  Full optimizations (-O24)\r
+AVR-GCC 4.2.2 C++ Obj  1574    72  -Os\r
+IAR 5.10A C++ Obj      1112    65  Size optimization high (+ 63 bytes stack)\r
 \r
 I would appreciate submissions of suggestions, improvements, or bug\r
 fixes.\r
index f18ab4c055e869711813a78e737fe79848862036..e4726206ab06c48d415e881903b796239b121b8f 100644 (file)
@@ -2,7 +2,8 @@ PROJECT := serial_lcd
 \r
 all: build\r
 \r
-build:\r
+build: distclean\r
+       @mkdir Exe Linker List Obj\r
        @echo Must run the CV IDE to build\r
 \r
 .PHONY: clean\r
index 78eab68b2b6ccee4356397fdf87992c4032ffe1d..ac3eea814c42c0dcd99186f48ada666f99289e46 100644 (file)
@@ -2,7 +2,7 @@
 Toolset=AVR\r
 FormatVersion=2\r
 Files=1\r
-OpenedFiles=0\r
+OpenedFiles=1\r
 Top0=430\r
 Left0=711\r
 Height0=339\r
@@ -10,13 +10,13 @@ Width0=497
 Active0=1\r
 State0=0\r
 OF1=C:\home\kevin\pub\src\avr_serial_lcd\serial_lcd.c\r
-Top1=257\r
-Left1=268\r
-Height1=339\r
-Width1=497\r
+Top1=258\r
+Left1=269\r
+Height1=337\r
+Width1=495\r
 Row1=0\r
 Collumn1=0\r
-Active1=0\r
+Active1=1\r
 State1=0\r
 OF2=C:\home\kevin\pub\src\avr_serial_lcd\serial_lcd.h\r
 Top2=257\r
@@ -40,7 +40,7 @@ OutputListFilesDirectory=List
 OutputObjectFilesDirectory=Obj\r
 OutputExecutableFilesDirectory=Exe\r
 OutputLinkerFilesDirectory=Linker\r
-AllowDisplayFunctionCallTree=0\r
+AllowDisplayFunctionCallTree=1\r
 F1=C:\home\kevin\pub\src\avr_serial_lcd\serial_lcd.c\r
 [Compiler]\r
 Chip=ATtiny2313\r
@@ -108,7 +108,7 @@ WarningDataStackUsage=1
 WarningDataStackRecursion=1\r
 WarningHardwareStackLow=1\r
 DebugBootLoader=0\r
-Build=4\r
+Build=20\r
 UseEEPROMLocation0=1\r
 IncludePath0=\r
 IncludePath1=\r
index 1235c7ba0c527653ba7284c3a149a9c977940bd5..75983d2d2b033b1952daba674a4b5576cf026a72 100644 (file)
@@ -94,11 +94,6 @@ static FLASH_DECLARE(const unsigned char ledPwmPatterns[]) =
 #pragma global_register ledPwmCount:20 sUartRxHead:21 sUartRxTail:22 ledPwmCycling:23\r
 unsigned char ledPwmCount, sUartRxHead, sUartRxTail, ledPwmCycling;\r
 \r
-#elif defined(__CODEVISIONAVR__)\r
-#pragma regalloc-\r
-register unsigned char ledPwmCount, sUartRxHead, sUartRxTail, ledPwmCycling;\r
-#pragma regalloc+\r
-\r
 // Use avr_compat register variables\r
 #else\r
 REGISTER_VAR(unsigned char ledPwmCount, "r4", 15);\r
@@ -263,17 +258,13 @@ static inline void UsartInit(void) {
 #endif\r
 }\r
 \r
-#if defined(__IMAGECRAFT__) || defined(__CODEVISIONAVR__)\r
+#if defined(__IMAGECRAFT__)\r
 // Clock cycle = 67nS @ 14.7456MHz\r
 // Delay resolution ~ 1uS @ 14.7456MHz\r
 // So this function is only accurate at near above frequency\r
 void _delay_us (unsigned int d) {\r
   while (d-- != 0);\r
-#if defined(__IMAGECRAFT__)\r
   asm("nop");\r
-#elif defined(__CODEVISIONAVR__)\r
-  #asm("nop")\r
-#endif\r
 }\r
 #endif\r
 \r
@@ -312,11 +303,7 @@ static inline void LcdInit (void) {
 MAIN_FUNC() {\r
   MCUSR = 0; // clear all reset flags\r
 \r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("wdr");\r
-#else\r
-      wdt_reset();\r
-#endif\r
+  wdt_reset();\r
   WDTCSR |= (1<<WDCE)|(1<<WDE); // start timed sequence (keep old prescaler)\r
   WDTCSR = (1<<WDE)|(1<<WDP3)|(1<<WDP0); // 1024K cycles, 8.0sec\r
   MCUCR &= ~((1<<SM1)|(1<<SM0)); // use idle sleep mode\r
@@ -327,11 +314,7 @@ MAIN_FUNC() {
   // Initialize the AVR USART\r
   UsartInit ();\r
 \r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("sei");\r
-#else\r
   sei();\r
-#endif\r
   while (1) {\r
     unsigned char tail = sUartRxTail; // explicitly set order of volatile access\r
     if (tail != sUartRxHead) { // Check if UART RX buffer has a character\r
@@ -354,50 +337,22 @@ MAIN_FUNC() {
     } else {\r
       // No characters waiting in RX buffer\r
 \r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("cli");\r
-#else\r
       cli();\r
-#endif\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("wdr");\r
-#else\r
       wdt_reset();\r
-#endif\r
       MCUSR &= ~(1<<WDRF); // clear any watchdog interrupt flags\r
       WDTCSR |= (1<<WDCE)|(1<<WDE); // start timed sequence (keep old prescaler)\r
       WDTCSR &= ~(1<<WDE); // watchdog timer off\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("sei");\r
-#else\r
       sei();\r
-#endif\r
 \r
       sleep_enable();\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("sleep");\r
-#else\r
       sleep_cpu();\r
-#endif\r
       sleep_disable();\r
 \r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("cli");\r
-#else\r
       cli();\r
-#endif\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("wdr");\r
-#else\r
       wdt_reset();\r
-#endif\r
       WDTCSR |= (1<<WDCE)|(1<<WDE); // start timed sequence (keep old prescaler)\r
       WDTCSR &= ~(1<<WDCE);\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("sei");\r
-#else\r
       sei();\r
-#endif\r
     }\r
   }\r
   MAIN_FUNC_LAST();\r
@@ -406,36 +361,11 @@ MAIN_FUNC() {
 void LcdWriteCmd (unsigned char Cmd) {\r
   LcdBusyWait();\r
   LCD_DATA_PORT = Cmd;  // BusyWait leaves RS low in "Register mode"\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("nop");\r
-#else\r
    NOP();\r
-#endif\r
   LCD_CONTROL_PORT |= (1<<LCD_E);\r
-#if defined(__CODEVISIONAVR__)\r
-  #if CONSERVATIVE_ENABLE_DURATION\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-  #else\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-  #endif\r
-#else\r
   ENABLE_WAIT();\r
-#endif\r
   LCD_CONTROL_PORT &= ~(1<<LCD_E);\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("nop");\r
-#else\r
    NOP();\r
-#endif\r
   LCD_CONTROL_PORT |= (1<<LCD_RS); // Set display to "Character mode"\r
 }\r
 \r
@@ -443,30 +373,9 @@ void LcdWriteData (unsigned char c) {
   LcdBusyWait();\r
   LCD_CONTROL_PORT |= (1<<LCD_RS); // Set display to "Character Mode"\r
   LCD_DATA_PORT = c;\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("nop");\r
-#else\r
    NOP();\r
-#endif\r
   LCD_CONTROL_PORT |= (1<<LCD_E);\r
-#if defined(__CODEVISIONAVR__)\r
-  #if CONSERVATIVE_ENABLE_DURATION\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-  #else\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-  #endif\r
-#else\r
   ENABLE_WAIT();\r
-#endif\r
   LCD_CONTROL_PORT &= ~(1<<LCD_E);\r
 }\r
 \r
@@ -475,36 +384,11 @@ unsigned char LcdBusyWait (void) {
   LCD_DATA_DIR = 0x00; // Set LCD data port to inputs\r
   LCD_CONTROL_PORT &= ~(1<<LCD_RS); // Set display to "Register mode"\r
   LCD_CONTROL_PORT |= (1<<LCD_RW); // Put the display in the read mode\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("nop");\r
-#else\r
    NOP();\r
-#endif\r
   do {\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("wdr");\r
-#else\r
       wdt_reset();\r
-#endif\r
     LCD_CONTROL_PORT |= (1<<LCD_E);\r
-#if defined(__CODEVISIONAVR__)\r
-  #if CONSERVATIVE_ENABLE_DURATION\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-  #else\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-    #asm("nop")\r
-  #endif\r
-#else\r
-  ENABLE_WAIT();\r
-#endif\r
+    ENABLE_WAIT();\r
     LCDStatus = LCD_DATA_PIN_REG;\r
     LCD_CONTROL_PORT &= ~(1<<LCD_E);\r
   } while (LCDStatus & (1<<LCD_BUSY));\r
@@ -553,22 +437,14 @@ static unsigned char WaitRxChar (void) {
   unsigned char tail;\r
   do {\r
     tail = sUartRxTail; // explicitly set order of volatile variable access\r
-#if defined(__CODEVISIONAVR__)\r
-      #asm("wdr");\r
-#else\r
-      wdt_reset();\r
-#endif\r
+    wdt_reset();\r
   } while (sUartRxHead == tail); // while buffer is empty\r
 \r
 #if USE_CTS\r
   // turn off interrupts so that if UART char ready to be stored, then storage\r
   // will occur after CTS pin is set active. This allows UART ISR to set\r
   //  CTS inactive if byte fills buffer after we remove current byte\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("cli");\r
-#else\r
   cli();\r
-#endif\r
 #endif\r
 \r
   // increment tail position\r
@@ -579,11 +455,7 @@ static unsigned char WaitRxChar (void) {
 \r
 #if USE_CTS\r
   CTS_PORT |= (1<<CTS_PIN); // Ensure CTS is active since just removed a byte\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("sei");\r
-#else\r
   sei();   // Allow UART ISR to read character and change potentially change CTS\r
-#endif\r
 #endif\r
 \r
   return sUartRxBuf[sUartRxTail];\r
@@ -592,17 +464,11 @@ static unsigned char WaitRxChar (void) {
 #if defined(__IMAGECRAFT__)\r
 #pragma interrupt_handler timer0_compa_handler:iv_TIMER0_COMPA\r
 void timer0_compa_handler(void)\r
-#elif defined(__CODEVISIONAVR__)\r
-interrupt [TIM0_COMPA] void timer0_compa_handler(void)\r
 #else\r
   ISR(TIMER0_COMPA_vect)\r
 #endif\r
 {\r
-#if defined(__CODEVISIONAVR__)\r
-  #asm("sei");\r
-#else\r
   sei(); // Okay to allow USART interrupts while controlling LED PWM\r
-#endif\r
 \r
   // Set current LED state based on cycling variable\r
   if (ledPwmCycling & 0x01) {\r
index ad4bbc9bdda73f1172e8ea57dbc537e5051ed287..91d1137de59cc2fd036c62f7c64dce2fec00784e 100644 (file)
@@ -126,11 +126,9 @@ typedef __flash unsigned int prog_uint32_t;
 // CodeVision Compiler\r
 #elif defined(__CODEVISIONAVR__)\r
 \r
-#if __CODEVISIONAVR__ >= 2\r
 #include <io.h>\r
-#else\r
-#include <tiny2313.h>\r
-#endif\r
+#include <delay.h>\r
+#include <sleep.h>\r
 \r
 #if defined(_CHIP_ATTINY2313_) || defined(_CHIP_ATTINY2313V_)\r
   #if !defined(WDTCSR)\r
@@ -163,14 +161,18 @@ typedef __flash unsigned int prog_uint32_t;
   #define SM0     4\r
   #define SM1     6\r
   #define SE      5\r
-  #define sleep_enable() MCUCR |= (1<<SE)\r
-  #define sleep_disable() MCUCR &= ~(1<<SE)\r
   #define USART_RX_vect USART_RXC\r
+  #define TIMER0_COMPA_vect TIM0_COMPA\r
 #endif\r
 \r
 #define FLASH_DECLARE(x) flash x\r
-#define ASM(a) asm(a)\r
-#define NOP() asm("nop");\r
+#define ASM(a) #asm(a)\r
+#define NOP() #asm("nop");\r
+#define cli() #asm("cli")\r
+#define sei() #asm("sei")\r
+#define wdt_reset() #asm("wdr")\r
+#define sleep_cpu() #asm("sleep")\r
+#define REGISTER_VAR(V,GNU,IAR) register V\r
 #define inline\r
 #define INLINE_FUNC_DECLARE(x) x\r
 #define NEAR_VAR(x) x\r
@@ -180,10 +182,11 @@ typedef __flash unsigned int prog_uint32_t;
 #define PGM_READ_BYTE(x) (*(x))\r
 \r
 #define NO_INIT_DECLARE(x) x\r
-#define REGISTER_VAR(V,GNUR,IAR) register V\r
-\r
 #define ISR(vec) interrupt [ ## vec ## ] void vec ## _handler(void)\r
 \r
+#define _delay_us(us) delay_us(us)\r
+#define _delay_ms(ms) delay_ms(ms)\r
+\r
 #else\r
 #error Unsupported compiler\r
 #endif\r