pic24_pyports.h

Go to the documentation of this file.
00001 /*
00002  * "Copyright (c) 2008 Robert B. Reese, Bryan A. Jones, J. W. Bruce ("AUTHORS")"
00003  * All rights reserved.
00004  * (R. Reese, reese_AT_ece.msstate.edu, Mississippi State University)
00005  * (B. A. Jones, bjones_AT_ece.msstate.edu, Mississippi State University)
00006  * (J. W. Bruce, jwbruce_AT_ece.msstate.edu, Mississippi State University)
00007  *
00008  * Permission to use, copy, modify, and distribute this software and its
00009  * documentation for any purpose, without fee, and without written agreement is
00010  * hereby granted, provided that the above copyright notice, the following
00011  * two paragraphs and the authors appear in all copies of this software.
00012  *
00013  * IN NO EVENT SHALL THE "AUTHORS" BE LIABLE TO ANY PARTY FOR
00014  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
00015  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHORS"
00016  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00017  *
00018  * THE "AUTHORS" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
00019  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
00020  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
00021  * ON AN "AS IS" BASIS, AND THE "AUTHORS" HAS NO OBLIGATION TO
00022  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
00023  *
00024  * Please maintain this header in its entirety when copying/modifying
00025  * these files.
00026  *
00027  *
00028  */
00029 
00030 
00031 #ifndef _PIC24_PYPORTS_H_
00032 #define _PIC24_PYPORTS_H_
00033 // Documentation for this file. If the \file tag isn't present,
00034 // this file won't be documented.
00097 #include "pm.h"
00098 
00104 
00140 PmReturn_t configDigitalPin(uint16_t u16_port, uint16_t u16_pin, bool_t b_isInput,
00141     bool_t b_isOpenDrain, int16_t i16_pullDir);
00142 
00147 PmReturn_t
00148 configAnalogPin(uint16_t u16_analogPin);
00149 
00158 PmReturn_t
00159 setDigitalPin(uint16_t u16_port, uint16_t u16_pin, bool_t b_isHigh);
00160 
00161 
00171 PmReturn_t
00172 readDigitalPin(uint16_t u16_port, uint16_t u16_pin, bool_t* pb_isHigh);
00173 
00174 
00184 PmReturn_t
00185 readDigitalLatch(uint16_t u16_port, uint16_t u16_pin, bool_t* pb_isHigh);
00187 
00188 
00195 
00202 bool_t digitalPinExists(uint16_t u16_port, uint16_t u16_pin);
00203 
00212 PmReturn_t setPinIsInput(uint16_t u16_port, uint16_t u16_pin, bool_t b_isInput);
00213 
00219 PmReturn_t
00220 getPinIsInput(uint16_t u16_port, uint16_t u16_pin, bool_t* pb_isInput);
00221 
00234 PmReturn_t setPinIsDigital(uint16_t u16_port, uint16_t u16_pin, 
00235   bool_t b_isDigital);
00236 
00237 
00244 PmReturn_t setPinIsOpenDrain(uint16_t u16_port, uint16_t u16_pin, bool_t b_isOpenDrain);
00245 
00252 PmReturn_t setPinPullDirection(uint16_t u16_port, uint16_t u16_pin, 
00253   int16_t i16_dir);
00254 
00263 PmReturn_t unmapPin(uint16_t u16_port, uint16_t u16_pin);
00265 
00266 
00268 enum { PORT_A_INDEX = 0, 
00269        PORT_B_INDEX,     
00270        PORT_C_INDEX,     
00271        PORT_D_INDEX,     
00272        PORT_E_INDEX,     
00273        PORT_F_INDEX,     
00274        PORT_G_INDEX,     
00275 };
00276 
00280 
00287 bool_t getBit(uint16_t u16_bitfield, uint16_t u16_bit);
00288 
00294 #define GET_EXTENDED_BIT(u_bitfield, u16_bit) \
00295     getBit(*(((uint16_t*) &(u_bitfield)) + ((u16_bit) >> 4)), (u16_bit) & 0x000F)
00296 
00303 void setBit(volatile uint16_t* pu16_bitfield, uint16_t u16_bit, bool_t b_val);
00304 
00310 #define SET_EXTENDED_BIT(p_bitfield, u16_bit, b_val) \
00311     setBit(((uint16_t*) (p_bitfield)) + ((u16_bit) >> 4), (u16_bit) & 0x000F, b_val)
00312 
00313 
00314 
00316 #if   defined(_RG0)  || defined(_RG1)  || defined(_RG2)  || defined(_RG3)  || \
00317       defined(_RG4)  || defined(_RG5)  || defined(_RG6)  || defined(_RG7)  || \
00318       defined(_RG8)  || defined(_RG9)  || defined(_RG10) || defined(_RG11) || \
00319       defined(_RG12) || defined(_RG13) || defined(_RG14) || defined(_RG15)
00320   #define NUM_DIGITAL_PORTS 7
00321 #elif defined(_RF0)  || defined(_RF1)  || defined(_RF2)  || defined(_RF3)  || \
00322       defined(_RF4)  || defined(_RF5)  || defined(_RF6)  || defined(_RF7)  || \
00323       defined(_RF8)  || defined(_RF9)  || defined(_RF10) || defined(_RF11) || \
00324       defined(_RF12) || defined(_RF13) || defined(_RF14) || defined(_RF15)
00325   #define NUM_DIGITAL_PORTS 6
00326 #elif defined(_RE0)  || defined(_RE1)  || defined(_RE2)  || defined(_RE3)  || \
00327       defined(_RE4)  || defined(_RE5)  || defined(_RE6)  || defined(_RE7)  || \
00328       defined(_RE8)  || defined(_RE9)  || defined(_RE10) || defined(_RE11) || \
00329       defined(_RE12) || defined(_RE13) || defined(_RE14) || defined(_RE15)
00330   #define NUM_DIGITAL_PORTS 5
00331 #elif defined(_RD0)  || defined(_RD1)  || defined(_RD2)  || defined(_RD3)  || \
00332       defined(_RD4)  || defined(_RD5)  || defined(_RD6)  || defined(_RD7)  || \
00333       defined(_RD8)  || defined(_RD9)  || defined(_RD10) || defined(_RD11) || \
00334       defined(_RD12) || defined(_RD13) || defined(_RD14) || defined(_RD15)
00335   #define NUM_DIGITAL_PORTS 4
00336 #elif defined(_RC0)  || defined(_RC1)  || defined(_RC2)  || defined(_RC3)  || \
00337       defined(_RC4)  || defined(_RC5)  || defined(_RC6)  || defined(_RC7)  || \
00338       defined(_RC8)  || defined(_RC9)  || defined(_RC10) || defined(_RC11) || \
00339       defined(_RC12) || defined(_RC13) || defined(_RC14) || defined(_RC15)
00340   #define NUM_DIGITAL_PORTS 3
00341 #elif defined(_RB0)  || defined(_RB1)  || defined(_RB2)  || defined(_RB3)  || \
00342       defined(_RB4)  || defined(_RB5)  || defined(_RB6)  || defined(_RB7)  || \
00343       defined(_RB8)  || defined(_RB9)  || defined(_RB10) || defined(_RB11) || \
00344       defined(_RB12) || defined(_RB13) || defined(_RB14) || defined(_RB15)
00345   #define NUM_DIGITAL_PORTS 2
00346 #elif defined(_RA0)  || defined(_RA1)  || defined(_RA2)  || defined(_RA3)  || \
00347       defined(_RA4)  || defined(_RA5)  || defined(_RA6)  || defined(_RA7)  || \
00348       defined(_RA8)  || defined(_RA9)  || defined(_RA10) || defined(_RA11) || \
00349       defined(_RA12) || defined(_RA13) || defined(_RA14) || defined(_RA15) || \
00350       defined(__DOXYGEN__)
00351   #define NUM_DIGITAL_PORTS 1
00352 #else
00353   #error No digital I/O ports were found on the current microprocessor.
00354   #error Something is very confused.
00355 #endif
00356 
00357 // Define HAS_PULL_DOWNS if this chip has pull-down ability.
00358 #if defined(_CN0PDE)  || defined(_CN1PDE)  || \
00359     defined(_CN2PDE)  || defined(_CN3PDE)  || \
00360     defined(_CN4PDE)  || defined(_CN5PDE)  || \
00361     defined(_CN6PDE)  || defined(_CN7PDE)  || \
00362     defined(_CN8PDE)  || defined(_CN9PDE)  || \
00363     defined(_CN10PDE) || defined(_CN11PDE) || \
00364     defined(_CN12PDE) || defined(_CN13PDE) || \
00365     defined(_CN14PDE) || defined(_CN15PDE) || \
00366     defined(_CN15PDE) || defined(_CN17PDE) || \
00367     defined(_CN18PDE) || defined(_CN19PDE) || \
00368     defined(_CN20PDE) || defined(_CN21PDE) || \
00369     defined(_CN22PDE) || defined(_CN23PDE) || \
00370     defined(_CN24PDE) || defined(_CN25PDE) || \
00371     defined(_CN26PDE) || defined(_CN27PDE) || \
00372     defined(_CN28PDE) || defined(_CN29PDE) || \
00373     defined(_CN30PDE) || defined(_CN31PDE)
00374 #define HAS_PULL_DOWNS
00375 #endif
00376 
00377 #if defined(__DOXYGEN__) || \
00378     defined(_RP0R)  || defined(_RP1R)  || defined(_RP2R)  || defined(_RP3R)  || \
00379     defined(_RP4R)  || defined(_RP5R)  || defined(_RP6R)  || defined(_RP7R)  || \
00380     defined(_RP8R)  || defined(_RP9R)  || defined(_RP10R) || defined(_RP11R) || \
00381     defined(_RP12R) || defined(_RP13R) || defined(_RP14R) || defined(_RP15R) || \
00382     defined(_RP16R) || defined(_RP17R) || defined(_RP18R) || defined(_RP19R) || \
00383     defined(_RP20R) || defined(_RP21R) || defined(_RP22R) || defined(_RP23R) || \
00384     defined(_RP24R) || defined(_RP25R) || defined(_RP26R) || defined(_RP27R) || \
00385     defined(_RP28R) || defined(_RP29R) || defined(_RP30R) // Note: RP31 cannot exist
00386 
00387 #define HAS_REMAPPABLE_PINS
00388 #endif
00389 
00393 #ifdef UNIT_TEST
00394 #define __STATIC__
00395 // Prototype static functions that are otherwise hidden from the
00396 // user of the library and exposed here only for testing.
00397 inline __STATIC__ bool_t digitalPinInBounds(uint16_t u16_port, uint16_t u16_pin);
00398 __STATIC__ bool_t digitalOpenDrainPinExists(uint16_t u16_port, uint16_t u16_pin);
00399 #else
00400 #define __STATIC__ static
00401 #endif
00402 
00403 
00404 
00405 #endif  // #define _PIC24_PYPORTS_H_

Generated on Mon Oct 18 07:40:47 2010 for Python-on-a-chip by  doxygen 1.5.9