XMEGA Application Note


ccpwrite.c

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00050 #include "ccpwrite.h"
00051 
00052 #ifdef __cplusplus
00053 extern "C" {
00054 #endif
00055 
00056   
00065 void CCPWrite (volatile uint8_t *address, uint8_t value)
00066 {
00067     ENTER_CRITICAL_REGION( );
00068 #ifdef __ICCAVR__
00069 
00070     asm("movw r30, r16");
00071 #ifdef RAMPZ
00072     RAMPZ = 0;
00073 #endif
00074     asm("ldi  r16,  0xD8 \n"
00075         "out  0x34, r16  \n"
00076 #if (__MEMORY_MODEL__ == 1)
00077         "st     Z,  r17  \n");
00078 #elif (__MEMORY_MODEL__ == 2)
00079         "st     Z,  r18  \n");
00080 #else /* (__MEMORY_MODEL__ == 3) || (__MEMORY_MODEL__ == 5) */
00081         "st     Z,  r19  \n");
00082 #endif /* __MEMORY_MODEL__ */
00083 
00084 #elif defined __GNUC__
00085     volatile uint8_t * tmpAddr = address;
00086 #ifdef RAMPZ
00087     RAMPZ = 0;
00088 #endif
00089     asm volatile(
00090         "movw r30,  %0"       "\n\t"
00091         "ldi  r16,  %2"       "\n\t"
00092         "out   %3, r16"       "\n\t"
00093         "st     Z,  %1"       "\n\t"
00094         :
00095         : "r" (tmpAddr), "r" (value), "M" (CCP_IOREG_gc), "i" (&CCP)
00096         : "r16", "r30", "r31"
00097         );
00098 
00099 #endif
00100     LEAVE_CRITICAL_REGION( );
00101 }
00102 
00103 
00104 #ifdef __cplusplus
00105 }
00106 #endif
@DOC_TITLE@
Generated on Mon Nov 9 13:44:26 2009 for XMEGA power consumption evaluation code by doxygen 1.5.9