Prof Greg Egan
/
UAVXArm-GKE
UAVX Multicopter Flight Controller.
NXP1768pins.c@2:90292f8bd179, 2011-04-26 (annotated)
- Committer:
- gke
- Date:
- Tue Apr 26 12:12:29 2011 +0000
- Revision:
- 2:90292f8bd179
Not flightworthy. Posted for others to make use of the I2C SW code.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gke | 2:90292f8bd179 | 1 | // =============================================================================================== |
gke | 2:90292f8bd179 | 2 | // = UAVXArm Quadrocopter Controller = |
gke | 2:90292f8bd179 | 3 | // = Copyright (c) 2008 by Prof. Greg Egan = |
gke | 2:90292f8bd179 | 4 | // = Original V3.15 Copyright (c) 2007 Ing. Wolfgang Mahringer = |
gke | 2:90292f8bd179 | 5 | // = http://code.google.com/p/uavp-mods/ = |
gke | 2:90292f8bd179 | 6 | // =============================================================================================== |
gke | 2:90292f8bd179 | 7 | |
gke | 2:90292f8bd179 | 8 | // This is part of UAVXArm. |
gke | 2:90292f8bd179 | 9 | |
gke | 2:90292f8bd179 | 10 | // UAVXArm is free software: you can redistribute it and/or modify it under the terms of the GNU |
gke | 2:90292f8bd179 | 11 | // General Public License as published by the Free Software Foundation, either version 3 of the |
gke | 2:90292f8bd179 | 12 | // License, or (at your option) any later version. |
gke | 2:90292f8bd179 | 13 | |
gke | 2:90292f8bd179 | 14 | // UAVXArm is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without |
gke | 2:90292f8bd179 | 15 | // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
gke | 2:90292f8bd179 | 16 | // See the GNU General Public License for more details. |
gke | 2:90292f8bd179 | 17 | |
gke | 2:90292f8bd179 | 18 | // You should have received a copy of the GNU General Public License along with this program. |
gke | 2:90292f8bd179 | 19 | // If not, see http://www.gnu.org/licenses/ |
gke | 2:90292f8bd179 | 20 | |
gke | 2:90292f8bd179 | 21 | // IO functions for NXP LPC1768. |
gke | 2:90292f8bd179 | 22 | |
gke | 2:90292f8bd179 | 23 | // See also: http://bitbucket.org/jpc/lpc1768/ |
gke | 2:90292f8bd179 | 24 | |
gke | 2:90292f8bd179 | 25 | // Original Copyright (c) 2010 LoEE - Jakub Piotr Cłapa |
gke | 2:90292f8bd179 | 26 | // This program was released under the new BSD license. |
gke | 2:90292f8bd179 | 27 | |
gke | 2:90292f8bd179 | 28 | // Rewritten for UAVXArm by G.K Egan 2011 |
gke | 2:90292f8bd179 | 29 | |
gke | 2:90292f8bd179 | 30 | #ifdef USE_NXP_PIN_MAP // NOT COMMISSIONED |
gke | 2:90292f8bd179 | 31 | |
gke | 2:90292f8bd179 | 32 | #include "UAVXArm.h" |
gke | 2:90292f8bd179 | 33 | |
gke | 2:90292f8bd179 | 34 | boolean PinRead(uint8); |
gke | 2:90292f8bd179 | 35 | void PinWrite(uint8, boolean); |
gke | 2:90292f8bd179 | 36 | void PinSetOutput(uint8, boolean); |
gke | 2:90292f8bd179 | 37 | |
gke | 2:90292f8bd179 | 38 | //extern __inline__ __attribute__((always_inline)) |
gke | 2:90292f8bd179 | 39 | |
gke | 2:90292f8bd179 | 40 | |
gke | 2:90292f8bd179 | 41 | boolean PinRead(uint8 pn) { |
gke | 2:90292f8bd179 | 42 | |
gke | 2:90292f8bd179 | 43 | static uint8 p,m; |
gke | 2:90292f8bd179 | 44 | p = pn >> 5; |
gke | 2:90292f8bd179 | 45 | m = 1 << ( pn & 0x1f ); |
gke | 2:90292f8bd179 | 46 | |
gke | 2:90292f8bd179 | 47 | switch ( p ) { |
gke | 2:90292f8bd179 | 48 | case 0: |
gke | 2:90292f8bd179 | 49 | return ( LPC_GPIO0->FIOPIN & m ) != 0; |
gke | 2:90292f8bd179 | 50 | case 1: |
gke | 2:90292f8bd179 | 51 | return ( LPC_GPIO1->FIOPIN & m ) != 0; |
gke | 2:90292f8bd179 | 52 | case 2: |
gke | 2:90292f8bd179 | 53 | return ( LPC_GPIO2->FIOPIN & m ) != 0; |
gke | 2:90292f8bd179 | 54 | case 3: |
gke | 2:90292f8bd179 | 55 | return ( LPC_GPIO3->FIOPIN & m ) != 0; |
gke | 2:90292f8bd179 | 56 | case 4: |
gke | 2:90292f8bd179 | 57 | return ( LPC_GPIO4->FIOPIN & m ) != 0; |
gke | 2:90292f8bd179 | 58 | default: |
gke | 2:90292f8bd179 | 59 | return (0); |
gke | 2:90292f8bd179 | 60 | } |
gke | 2:90292f8bd179 | 61 | } // PinRead |
gke | 2:90292f8bd179 | 62 | |
gke | 2:90292f8bd179 | 63 | void PinWrite(uint8 pn, boolean v) { |
gke | 2:90292f8bd179 | 64 | |
gke | 2:90292f8bd179 | 65 | static uint8 p, m; |
gke | 2:90292f8bd179 | 66 | p = pn >> 5; |
gke | 2:90292f8bd179 | 67 | m = 1 << ( pn & 0x1f ); |
gke | 2:90292f8bd179 | 68 | |
gke | 2:90292f8bd179 | 69 | switch ( p ) { |
gke | 2:90292f8bd179 | 70 | case 0: |
gke | 2:90292f8bd179 | 71 | if ( v ) |
gke | 2:90292f8bd179 | 72 | LPC_GPIO0->FIOSET = m; |
gke | 2:90292f8bd179 | 73 | else |
gke | 2:90292f8bd179 | 74 | LPC_GPIO0->FIOCLR = m; |
gke | 2:90292f8bd179 | 75 | break; |
gke | 2:90292f8bd179 | 76 | case 1: |
gke | 2:90292f8bd179 | 77 | if ( v ) |
gke | 2:90292f8bd179 | 78 | LPC_GPIO1->FIOSET = m; |
gke | 2:90292f8bd179 | 79 | else |
gke | 2:90292f8bd179 | 80 | LPC_GPIO1->FIOCLR = m; |
gke | 2:90292f8bd179 | 81 | break; |
gke | 2:90292f8bd179 | 82 | case 2: |
gke | 2:90292f8bd179 | 83 | if ( v ) |
gke | 2:90292f8bd179 | 84 | LPC_GPIO2->FIOSET = m; |
gke | 2:90292f8bd179 | 85 | else |
gke | 2:90292f8bd179 | 86 | LPC_GPIO2->FIOCLR = m; |
gke | 2:90292f8bd179 | 87 | break; |
gke | 2:90292f8bd179 | 88 | case 3: |
gke | 2:90292f8bd179 | 89 | if ( v ) |
gke | 2:90292f8bd179 | 90 | LPC_GPIO3->FIOSET = m; |
gke | 2:90292f8bd179 | 91 | else |
gke | 2:90292f8bd179 | 92 | LPC_GPIO3->FIOCLR = m; |
gke | 2:90292f8bd179 | 93 | break; |
gke | 2:90292f8bd179 | 94 | case 4: |
gke | 2:90292f8bd179 | 95 | if ( v ) |
gke | 2:90292f8bd179 | 96 | LPC_GPIO4->FIOSET = m; |
gke | 2:90292f8bd179 | 97 | else |
gke | 2:90292f8bd179 | 98 | LPC_GPIO4->FIOCLR = m; |
gke | 2:90292f8bd179 | 99 | break; |
gke | 2:90292f8bd179 | 100 | default: |
gke | 2:90292f8bd179 | 101 | break; |
gke | 2:90292f8bd179 | 102 | } |
gke | 2:90292f8bd179 | 103 | } // PinWrite |
gke | 2:90292f8bd179 | 104 | |
gke | 2:90292f8bd179 | 105 | void PinSetOutput(uint8 pn, boolean PinIsOutput) { |
gke | 2:90292f8bd179 | 106 | |
gke | 2:90292f8bd179 | 107 | static uint8 p,m; |
gke | 2:90292f8bd179 | 108 | p = pn >> 5; |
gke | 2:90292f8bd179 | 109 | m = 1 << ( pn & 0x1f ); |
gke | 2:90292f8bd179 | 110 | |
gke | 2:90292f8bd179 | 111 | switch ( p ) { |
gke | 2:90292f8bd179 | 112 | case 0: |
gke | 2:90292f8bd179 | 113 | if ( PinIsOutput ) |
gke | 2:90292f8bd179 | 114 | LPC_GPIO0->FIODIR |= m; |
gke | 2:90292f8bd179 | 115 | else |
gke | 2:90292f8bd179 | 116 | LPC_GPIO0->FIODIR &= ~m; |
gke | 2:90292f8bd179 | 117 | break; |
gke | 2:90292f8bd179 | 118 | case 1: |
gke | 2:90292f8bd179 | 119 | if ( PinIsOutput ) |
gke | 2:90292f8bd179 | 120 | LPC_GPIO1->FIODIR |= m; |
gke | 2:90292f8bd179 | 121 | else |
gke | 2:90292f8bd179 | 122 | LPC_GPIO1->FIODIR &= ~m; |
gke | 2:90292f8bd179 | 123 | break; |
gke | 2:90292f8bd179 | 124 | case 2: |
gke | 2:90292f8bd179 | 125 | if ( PinIsOutput ) |
gke | 2:90292f8bd179 | 126 | LPC_GPIO2->FIODIR |= m; |
gke | 2:90292f8bd179 | 127 | else |
gke | 2:90292f8bd179 | 128 | LPC_GPIO2->FIODIR &= ~m; |
gke | 2:90292f8bd179 | 129 | break; |
gke | 2:90292f8bd179 | 130 | case 3: |
gke | 2:90292f8bd179 | 131 | if ( PinIsOutput ) |
gke | 2:90292f8bd179 | 132 | LPC_GPIO3->FIODIR |= m; |
gke | 2:90292f8bd179 | 133 | else |
gke | 2:90292f8bd179 | 134 | LPC_GPIO3->FIODIR &= ~m; |
gke | 2:90292f8bd179 | 135 | break; |
gke | 2:90292f8bd179 | 136 | case 4: |
gke | 2:90292f8bd179 | 137 | if ( PinIsOutput ) |
gke | 2:90292f8bd179 | 138 | LPC_GPIO4->FIODIR |= m; |
gke | 2:90292f8bd179 | 139 | else |
gke | 2:90292f8bd179 | 140 | LPC_GPIO4->FIODIR &= ~m; |
gke | 2:90292f8bd179 | 141 | break; |
gke | 2:90292f8bd179 | 142 | default: |
gke | 2:90292f8bd179 | 143 | break; |
gke | 2:90292f8bd179 | 144 | } |
gke | 2:90292f8bd179 | 145 | |
gke | 2:90292f8bd179 | 146 | } // PinSetOutput |
gke | 2:90292f8bd179 | 147 | |
gke | 2:90292f8bd179 | 148 | #endif // USE_NXP_PIN_MAP |
gke | 2:90292f8bd179 | 149 | |
gke | 2:90292f8bd179 | 150 |