// Rowley AVR C Compiler, runtime support. // // Copyright (c) 2004 Rowley Associates Limited. // // This file may be distributed under the terms of the License Agreement // provided with this software. // // THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. #ifndef __inavr_H #define __inavr_H // Status register sfrb __sr = 0x5f; // Swap nibble order within a byte #pragma intrinsic(__swap_nibbles) unsigned char __swap_nibbles(unsigned char); // Swap byte order within a word #pragma intrinsic(__swap_bytes) unsigned __swap_bytes(unsigned x); // Swap byte order within a long #pragma intrinsic(__swap_bytes_long) unsigned long __swap_bytes_long(unsigned long x); // Swap word order within a long #pragma intrinsic(__swap_words) unsigned long __swap_words(unsigned long); // Insert op into the code sequence #pragma intrinsic(__insert_opcode) void __insert_opcode(unsigned short op); // Put processor to sleep #define __sleep() __insert_opcode(0x9588); // Reset the watchdog #define __watchdog_reset() __insert_opcode(0x95a8); // Programmed breakpoint #define __breakpoint() __insert_opcode(0x9598); // Set bits in status register and return original status register #pragma intrinsic(__bis_SR_register) unsigned char __bis_SR_register(unsigned char); // Clear bits in status register and return original status register #pragma intrinsic(__bic_SR_register) unsigned char __bic_SR_register(unsigned char); // Disable interrupts and return original status register #define __disable_interrupt() __bic_SR_register(0x80) // Enable interrupts and return original status register #define __enable_interrupt() __bis_SR_register(0x80) #define __save_interrupt() (__sr) #define __restore_interrupt(x) do { if (x & 0x80) __enable_interrupt(); else __disable_interrupt(); } while (0) // Insert a NOP to code sequence. #define __no_operation() __insert_opcode(0x0000); // Delay for a given number of cycles. #pragma intrinsic(__delay_cycles) void __delay_cycles(unsigned long); // Get high 16 bits of 32-bit value #pragma intrinsic(_H16) unsigned _H16(unsigned long); // Get low 16 bits of 64-bit value #pragma intrinsic(_L16) unsigned _L16(unsigned long); // Get high 32 bits of 64-bit value #pragma intrinsic(_H32) unsigned long _H32(unsigned long long); // Get low 32 bits of 64-bit value #pragma intrinsic(_L32) unsigned long _L32(unsigned long long); // Get high 16 bits 64-bit value #pragma intrinsic(_HH16) unsigned _HH16(unsigned long long); // Get low 16 bits 64-bit value #pragma intrinsic(_LL16) unsigned _LL16(unsigned long long); #endif