⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ina90_h source file1.htm

📁 AVR单片机读取AT45DB系列FLASH存储器的例程
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0075)http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h-source.html -->
<HTML><HEAD><TITLE>ina90.h Source File</TITLE>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1><LINK 
href="ina90_h Source File1.files/doxygen.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff><!-- Generated by Doxygen 1.2.8.1 -->
<CENTER><A class=qindex 
href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/main.html">Main 
Page</A> &nbsp; <A class=qindex 
href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/annotated.html">Compound 
List</A> &nbsp; <A class=qindex 
href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/files.html">File 
List</A> &nbsp; <A class=qindex 
href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/functions.html">Compound 
Members</A> &nbsp; <A class=qindex 
href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/globals.html">File 
Members</A> &nbsp; </CENTER>
<HR>

<H1>ina90.h</H1><A 
href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html">Go 
to the documentation of this file.</A>
<DIV class=fragment><PRE>00001 <FONT class=comment>/*</FONT>
00002 <FONT class=comment>   ina90.h</FONT>
00003 <FONT class=comment></FONT>
00004 <FONT class=comment>   Contributors:</FONT>
00005 <FONT class=comment>     Created by Marek Michalkiewicz &lt;marekm@linux.org.pl&gt;</FONT>
00006 <FONT class=comment></FONT>
00007 <FONT class=comment>   THIS SOFTWARE IS NOT COPYRIGHTED</FONT>
00008 <FONT class=comment></FONT>
00009 <FONT class=comment>   This source code is offered for use in the public domain.  You may</FONT>
00010 <FONT class=comment>   use, modify or distribute it freely.</FONT>
00011 <FONT class=comment></FONT>
00012 <FONT class=comment>   This code is distributed in the hope that it will be useful, but</FONT>
00013 <FONT class=comment>   WITHOUT ANY WARRANTY.  ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY</FONT>
00014 <FONT class=comment>   DISCLAIMED.  This includes but is not limited to warranties of</FONT>
00015 <FONT class=comment>   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</FONT>
00016 <FONT class=comment> */</FONT>
00017 
00018 <FONT class=comment>/*</FONT>
00019 <FONT class=comment>   ina90.h - this is an attempt to provide some compatibility with</FONT>
00020 <FONT class=comment>   header files that come with IAR C, to make porting applications</FONT>
00021 <FONT class=comment>   between different compilers easier.  No 100% compatibility though.</FONT>
00022 <FONT class=comment> */</FONT>
00023 
00024 <FONT class=preprocessor>#ifndef _INA90_H_</FONT>
<A name=l00025></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a0">00025</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _INA90_H_ 1</FONT>
00026 <FONT class=preprocessor></FONT>
<A name=l00027></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a1">00027</A> <FONT class=preprocessor>#define _CLI() __asm__ __volatile__ ("cli")</FONT>
<A name=l00028></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a2">00028</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _SEI() __asm__ __volatile__ ("sei")</FONT>
<A name=l00029></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a3">00029</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _NOP() __asm__ __volatile__ ("nop")</FONT>
<A name=l00030></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a4">00030</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _WDR() __asm__ __volatile__ ("wdr")</FONT>
<A name=l00031></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a5">00031</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _SLEEP() __asm__ __volatile__ ("sleep")</FONT>
<A name=l00032></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a6">00032</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _OPC(op) __asm__ __volatile__ (".word %0" : : "n" (op))</FONT>
00033 <FONT class=preprocessor></FONT>
<A name=l00034></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a7">00034</A> <FONT class=preprocessor>#define __LPM_enhanced__(addr) ({               \</FONT>
00035 <FONT class=preprocessor>        unsigned short __addr16 = (unsigned short)(addr); \</FONT>
00036 <FONT class=preprocessor>        unsigned char __result;                 \</FONT>
00037 <FONT class=preprocessor>        __asm__ (                               \</FONT>
00038 <FONT class=preprocessor>                "lpm %0, Z"                     \</FONT>
00039 <FONT class=preprocessor>                : "=r" (__result)               \</FONT>
00040 <FONT class=preprocessor>                : "z" (__addr16)                \</FONT>
00041 <FONT class=preprocessor>        );                                      \</FONT>
00042 <FONT class=preprocessor>        __result;                               \</FONT>
00043 <FONT class=preprocessor> })</FONT>
00044 <FONT class=preprocessor></FONT>
<A name=l00045></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a8">00045</A> <FONT class=preprocessor>#define __LPM_classic__(addr) ({                \</FONT>
00046 <FONT class=preprocessor>        unsigned short __addr16 = (unsigned short)(addr); \</FONT>
00047 <FONT class=preprocessor>        unsigned char __result;                 \</FONT>
00048 <FONT class=preprocessor>        __asm__ (                               \</FONT>
00049 <FONT class=preprocessor>                "lpm" "\n\t"                    \</FONT>
00050 <FONT class=preprocessor>                "mov %0, r0"                    \</FONT>
00051 <FONT class=preprocessor>                : "=r" (__result)               \</FONT>
00052 <FONT class=preprocessor>                : "z" (__addr16)                \</FONT>
00053 <FONT class=preprocessor>                : "r0"                          \</FONT>
00054 <FONT class=preprocessor>        );                                      \</FONT>
00055 <FONT class=preprocessor>        __result;                               \</FONT>
00056 <FONT class=preprocessor> })</FONT>
00057 <FONT class=preprocessor></FONT>
00058 <FONT class=comment>/* Only for devices with more than 64K of program memory.</FONT>
00059 <FONT class=comment>   RAMPZ must be defined (see iom103.h).  */</FONT>
00060 
<A name=l00061></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a9">00061</A> <FONT class=preprocessor>#define __ELPM_enhanced__(addr) ({              \</FONT>
00062 <FONT class=preprocessor>        unsigned long __addr32 = (unsigned long)(addr); \</FONT>
00063 <FONT class=preprocessor>        unsigned char __result;                 \</FONT>
00064 <FONT class=preprocessor>        __asm__ (                               \</FONT>
00065 <FONT class=preprocessor>                "out %2, %C1" "\n\t"            \</FONT>
00066 <FONT class=preprocessor>                "movw r30, %1" "\n\t"           \</FONT>
00067 <FONT class=preprocessor>                "elpm %0, Z"                    \</FONT>
00068 <FONT class=preprocessor>                : "=r" (__result)               \</FONT>
00069 <FONT class=preprocessor>                : "v" (__addr32), "I" (RAMPZ)   \</FONT>
00070 <FONT class=preprocessor>                : "r30", "r31"                  \</FONT>
00071 <FONT class=preprocessor>        );                                      \</FONT>
00072 <FONT class=preprocessor>        __result;                               \</FONT>
00073 <FONT class=preprocessor> })</FONT>
00074 <FONT class=preprocessor></FONT>
<A name=l00075></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a10">00075</A> <FONT class=preprocessor>#define __ELPM_classic__(addr) ({               \</FONT>
00076 <FONT class=preprocessor>        unsigned long __addr32 = (unsigned long)(addr); \</FONT>
00077 <FONT class=preprocessor>        unsigned char __result;                 \</FONT>
00078 <FONT class=preprocessor>        __asm__ (                               \</FONT>
00079 <FONT class=preprocessor>                "out %2, %C1" "\n\t"            \</FONT>
00080 <FONT class=preprocessor>                "mov r31, %B1" "\n\t"           \</FONT>
00081 <FONT class=preprocessor>                "mov r30, %A1" "\n\t"           \</FONT>
00082 <FONT class=preprocessor>                "elpm" "\n\t"                   \</FONT>
00083 <FONT class=preprocessor>                "mov %0, r0"                    \</FONT>
00084 <FONT class=preprocessor>                : "=r" (__result)               \</FONT>
00085 <FONT class=preprocessor>                : "r" (__addr32), "I" (RAMPZ)   \</FONT>
00086 <FONT class=preprocessor>                : "r0", "r30", "r31"            \</FONT>
00087 <FONT class=preprocessor>        );                                      \</FONT>
00088 <FONT class=preprocessor>        __result;                               \</FONT>
00089 <FONT class=preprocessor> })</FONT>
00090 <FONT class=preprocessor></FONT>
00091 <FONT class=preprocessor>#if defined (__AVR_ENHANCED__)</FONT>
00092 <FONT class=preprocessor></FONT><FONT class=preprocessor>#define  _LPM(addr)  __LPM_enhanced__(addr)</FONT>
00093 <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _ELPM(addr) __ELPM_enhanced__(addr)</FONT>
00094 <FONT class=preprocessor></FONT><FONT class=preprocessor>#else</FONT>
<A name=l00095></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a11">00095</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define  _LPM(addr)  __LPM_classic__(addr)</FONT>
<A name=l00096></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a12">00096</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define _ELPM(addr) __ELPM_classic__(addr)</FONT>
00097 <FONT class=preprocessor></FONT><FONT class=preprocessor>#endif</FONT>
00098 <FONT class=preprocessor></FONT>
00099 <FONT class=comment>/* _EEGET, _EEPUT */</FONT>
00100 <FONT class=preprocessor>#include &lt;<A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/eeprom_8h.html">eeprom.h</A>&gt;</FONT>
00101 
<A name=l00102></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a13">00102</A> <FONT class=preprocessor>#define input(port) inp(port)</FONT>
<A name=l00103></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a14">00103</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define output(port, val) outp(val, port)</FONT>
00104 <FONT class=preprocessor></FONT>
<A name=l00105></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a15">00105</A> <FONT class=preprocessor>#define __inp_blk__(port, addr, cnt, op) {      \</FONT>
00106 <FONT class=preprocessor>        unsigned char __i = (cnt);              \</FONT>
00107 <FONT class=preprocessor>        unsigned char *__addr = (addr);         \</FONT>
00108 <FONT class=preprocessor>        while (__i) {                           \</FONT>
00109 <FONT class=preprocessor>                *(__addr op) = input(port);     \</FONT>
00110 <FONT class=preprocessor>                __i--;                          \</FONT>
00111 <FONT class=preprocessor>        }                                       \</FONT>
00112 <FONT class=preprocessor> }</FONT>
00113 <FONT class=preprocessor></FONT>
<A name=l00114></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a16">00114</A> <FONT class=preprocessor>#define input_block_inc(port, addr, cnt) __inp_blk__(port, addr, cnt, ++)</FONT>
<A name=l00115></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a17">00115</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define input_block_dec(port, addr, cnt) __inp_blk__(port, addr, cnt, --)</FONT>
00116 <FONT class=preprocessor></FONT>
<A name=l00117></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a18">00117</A> <FONT class=preprocessor>#define __out_blk__(port, addr, cnt, op) {      \</FONT>
00118 <FONT class=preprocessor>        unsigned char __i = (cnt);              \</FONT>
00119 <FONT class=preprocessor>        const unsigned char *__addr = (addr);   \</FONT>
00120 <FONT class=preprocessor>        while (__i) {                           \</FONT>
00121 <FONT class=preprocessor>                output(port, *(__addr op));     \</FONT>
00122 <FONT class=preprocessor>                __i--;                          \</FONT>
00123 <FONT class=preprocessor>        }                                       \</FONT>
00124 <FONT class=preprocessor> }</FONT>
00125 <FONT class=preprocessor></FONT>
<A name=l00126></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a19">00126</A> <FONT class=preprocessor>#define output_block_inc(port, addr, cnt, op) __out_blk__(port, addr, cnt, ++)</FONT>
<A name=l00127></A><A class=code href="http://ccrma-www.stanford.edu/courses/250a/docs/avrgcc/ina90_8h.html#a20">00127</A> <FONT class=preprocessor></FONT><FONT class=preprocessor>#define output_block_dec(port, addr, cnt, op) __out_blk__(port, addr, cnt, --)</FONT>
00128 <FONT class=preprocessor></FONT>
00129 <FONT class=preprocessor>#endif</FONT>
00130 <FONT class=preprocessor></FONT>
</PRE></DIV>
<HR>

<ADDRESS><SMALL>Generated at Fri Jul 19 14:55:40 2002 for avrgcc by <A 
href="http://www.doxygen.org/index.html"><IMG height=53 alt=doxygen 
src="ina90_h Source File1.files/doxygen.gif" width=110 align=middle 
border=0></A>1.2.8.1 written by <A href="mailto:dimitri@stack.nl">Dimitri van 
Heesch</A>, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -