UAVX Multicopter Flight Controller.

Dependencies:   mbed

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?

UserRevisionLine numberNew 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