pic24_pyports.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _PIC24_PYPORTS_H_
00032 #define _PIC24_PYPORTS_H_
00033
00034
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
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
00396
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_