uc-sdk
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
lpc17xx_gpio.c
Go to the documentation of this file.
1 /***********************************************************************/
20 /* Peripheral group ----------------------------------------------------------- */
25 /* Includes ------------------------------------------------------------------- */
26 #include "lpc17xx_gpio.h"
27 
28 /* If this source file built with example, the LPC17xx FW library configuration
29  * file in each example directory ("lpc17xx_libcfg.h") must be included,
30  * otherwise the default FW library configuration file must be included instead
31  */
32 #ifdef __BUILD_WITH_EXAMPLE__
33 #include "lpc17xx_libcfg.h"
34 #else
35 #include "lpc17xx_libcfg_default.h"
36 #endif /* __BUILD_WITH_EXAMPLE__ */
37 
38 
39 #ifdef _GPIO
40 
41 /* Private Functions ---------------------------------------------------------- */
42 
43 static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum);
44 static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum);
45 static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum);
46 
47 /*********************************************************************/
52 static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum)
53 {
54  LPC_GPIO_TypeDef *pGPIO = NULL;
55 
56  switch (portNum) {
57  case 0:
58  pGPIO = LPC_GPIO0;
59  break;
60  case 1:
61  pGPIO = LPC_GPIO1;
62  break;
63  case 2:
64  pGPIO = LPC_GPIO2;
65  break;
66  case 3:
67  pGPIO = LPC_GPIO3;
68  break;
69  case 4:
70  pGPIO = LPC_GPIO4;
71  break;
72  default:
73  break;
74  }
75 
76  return pGPIO;
77 }
78 
79 /*********************************************************************/
85 static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum)
86 {
88 
89  switch (portNum) {
90  case 0:
91  pFIO = GPIO0_HalfWord;
92  break;
93  case 1:
94  pFIO = GPIO1_HalfWord;
95  break;
96  case 2:
97  pFIO = GPIO2_HalfWord;
98  break;
99  case 3:
100  pFIO = GPIO3_HalfWord;
101  break;
102  case 4:
103  pFIO = GPIO4_HalfWord;
104  break;
105  default:
106  break;
107  }
108 
109  return pFIO;
110 }
111 
112 /*********************************************************************/
118 static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum)
119 {
120  GPIO_Byte_TypeDef *pFIO = NULL;
121 
122  switch (portNum) {
123  case 0:
124  pFIO = GPIO0_Byte;
125  break;
126  case 1:
127  pFIO = GPIO1_Byte;
128  break;
129  case 2:
130  pFIO = GPIO2_Byte;
131  break;
132  case 3:
133  pFIO = GPIO3_Byte;
134  break;
135  case 4:
136  pFIO = GPIO4_Byte;
137  break;
138  default:
139  break;
140  }
141 
142  return pFIO;
143 }
144 
145 /* End of Private Functions --------------------------------------------------- */
146 
147 
148 /* Public Functions ----------------------------------------------------------- */
154 /* GPIO ------------------------------------------------------------------------------ */
155 
156 /*********************************************************************/
170 void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
171 {
172  LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
173 
174  if (pGPIO != NULL) {
175  // Enable Output
176  if (dir) {
177  pGPIO->FIODIR |= bitValue;
178  }
179  // Enable Input
180  else {
181  pGPIO->FIODIR &= ~bitValue;
182  }
183  }
184 }
185 
186 
187 /*********************************************************************/
201 void GPIO_SetValue(uint8_t portNum, uint32_t bitValue)
202 {
203  LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
204 
205  if (pGPIO != NULL) {
206  pGPIO->FIOSET = bitValue;
207  }
208 }
209 
210 /*********************************************************************/
224 void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue)
225 {
226  LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
227 
228  if (pGPIO != NULL) {
229  pGPIO->FIOCLR = bitValue;
230  }
231 }
232 
233 /*********************************************************************/
241 uint32_t GPIO_ReadValue(uint8_t portNum)
242 {
243  LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
244 
245  if (pGPIO != NULL) {
246  return pGPIO->FIOPIN;
247  }
248 
249  return (0);
250 }
251 
252 /*********************************************************************/
262 void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState)
263 {
264  if((portNum == 0)&&(edgeState == 0))
265  LPC_GPIOINT->IO0IntEnR = bitValue;
266  else if ((portNum == 2)&&(edgeState == 0))
267  LPC_GPIOINT->IO2IntEnR = bitValue;
268  else if ((portNum == 0)&&(edgeState == 1))
269  LPC_GPIOINT->IO0IntEnF = bitValue;
270  else if ((portNum == 2)&&(edgeState == 1))
271  LPC_GPIOINT->IO2IntEnF = bitValue;
272  else
273  //Error
274  while(1);
275 }
276 
277 /*********************************************************************/
290 FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState)
291 {
292  if((portNum == 0) && (edgeState == 0))//Rising Edge
293  return (((LPC_GPIOINT->IO0IntStatR)>>pinNum)& 0x1);
294  else if ((portNum == 2) && (edgeState == 0))
295  return (((LPC_GPIOINT->IO2IntStatR)>>pinNum)& 0x1);
296  else if ((portNum == 0) && (edgeState == 1))//Falling Edge
297  return (((LPC_GPIOINT->IO0IntStatF)>>pinNum)& 0x1);
298  else if ((portNum == 2) && (edgeState == 1))
299  return (((LPC_GPIOINT->IO2IntStatF)>>pinNum)& 0x1);
300  else
301  //Error
302  while(1);
303 }
304 /*********************************************************************/
311 void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue)
312 {
313  if(portNum == 0)
314  LPC_GPIOINT->IO0IntClr = bitValue;
315  else if (portNum == 2)
316  LPC_GPIOINT->IO2IntClr = bitValue;
317  else
318  //Invalid portNum
319  while(1);
320 }
321 
322 /* FIO word accessible ----------------------------------------------------------------- */
323 /* Stub function for FIO (word-accessible) style */
324 
328 void FIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
329 {
330  GPIO_SetDir(portNum, bitValue, dir);
331 }
332 
336 void FIO_SetValue(uint8_t portNum, uint32_t bitValue)
337 {
338  GPIO_SetValue(portNum, bitValue);
339 }
340 
344 void FIO_ClearValue(uint8_t portNum, uint32_t bitValue)
345 {
346  GPIO_ClearValue(portNum, bitValue);
347 }
348 
352 uint32_t FIO_ReadValue(uint8_t portNum)
353 {
354  return (GPIO_ReadValue(portNum));
355 }
356 
360 void FIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState)
361 {
362  GPIO_IntCmd(portNum, bitValue, edgeState);
363 }
364 
368 FunctionalState FIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState)
369 {
370  return (GPIO_GetIntStatus(portNum, pinNum, edgeState));
371 }
372 
376 void FIO_ClearInt(uint8_t portNum, uint32_t bitValue)
377 {
378  GPIO_ClearInt(portNum, bitValue);
379 }
380 /*********************************************************************/
398 void FIO_SetMask(uint8_t portNum, uint32_t bitValue, uint8_t maskValue)
399 {
400  LPC_GPIO_TypeDef *pFIO = GPIO_GetPointer(portNum);
401  if(pFIO != NULL) {
402  // Mask
403  if (maskValue){
404  pFIO->FIOMASK |= bitValue;
405  }
406  // Un-mask
407  else {
408  pFIO->FIOMASK &= ~bitValue;
409  }
410  }
411 }
412 
413 
414 /* FIO halfword accessible ------------------------------------------------------------- */
415 
416 /*********************************************************************/
430 void FIO_HalfWordSetDir(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t dir)
431 {
432  GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
433  if(pFIO != NULL) {
434  // Output direction
435  if (dir) {
436  // Upper
437  if(halfwordNum) {
438  pFIO->FIODIRU |= bitValue;
439  }
440  // lower
441  else {
442  pFIO->FIODIRL |= bitValue;
443  }
444  }
445  // Input direction
446  else {
447  // Upper
448  if(halfwordNum) {
449  pFIO->FIODIRU &= ~bitValue;
450  }
451  // lower
452  else {
453  pFIO->FIODIRL &= ~bitValue;
454  }
455  }
456  }
457 }
458 
459 
460 /*********************************************************************/
479 void FIO_HalfWordSetMask(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t maskValue)
480 {
481  GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
482  if(pFIO != NULL) {
483  // Mask
484  if (maskValue){
485  // Upper
486  if(halfwordNum) {
487  pFIO->FIOMASKU |= bitValue;
488  }
489  // lower
490  else {
491  pFIO->FIOMASKL |= bitValue;
492  }
493  }
494  // Un-mask
495  else {
496  // Upper
497  if(halfwordNum) {
498  pFIO->FIOMASKU &= ~bitValue;
499  }
500  // lower
501  else {
502  pFIO->FIOMASKL &= ~bitValue;
503  }
504  }
505  }
506 }
507 
508 
509 /*********************************************************************/
523 void FIO_HalfWordSetValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue)
524 {
525  GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
526  if(pFIO != NULL) {
527  // Upper
528  if(halfwordNum) {
529  pFIO->FIOSETU = bitValue;
530  }
531  // lower
532  else {
533  pFIO->FIOSETL = bitValue;
534  }
535  }
536 }
537 
538 
539 /*********************************************************************/
553 void FIO_HalfWordClearValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue)
554 {
555  GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
556  if(pFIO != NULL) {
557  // Upper
558  if(halfwordNum) {
559  pFIO->FIOCLRU = bitValue;
560  }
561  // lower
562  else {
563  pFIO->FIOCLRL = bitValue;
564  }
565  }
566 }
567 
568 
569 /*********************************************************************/
578 uint16_t FIO_HalfWordReadValue(uint8_t portNum, uint8_t halfwordNum)
579 {
580  GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
581  if(pFIO != NULL) {
582  // Upper
583  if(halfwordNum) {
584  return (pFIO->FIOPINU);
585  }
586  // lower
587  else {
588  return (pFIO->FIOPINL);
589  }
590  }
591  return (0);
592 }
593 
594 
595 /* FIO Byte accessible ------------------------------------------------------------ */
596 
597 /*********************************************************************/
611 void FIO_ByteSetDir(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t dir)
612 {
613  GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
614  if(pFIO != NULL) {
615  // Output direction
616  if (dir) {
617  if ((byteNum >= 0) && (byteNum <= 3)) {
618  pFIO->FIODIR[byteNum] |= bitValue;
619  }
620  }
621  // Input direction
622  else {
623  if ((byteNum >= 0) && (byteNum <= 3)) {
624  pFIO->FIODIR[byteNum] &= ~bitValue;
625  }
626  }
627  }
628 }
629 
630 /*********************************************************************/
649 void FIO_ByteSetMask(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t maskValue)
650 {
651  GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
652  if(pFIO != NULL) {
653  // Mask
654  if (maskValue) {
655  if ((byteNum >= 0) && (byteNum <= 3)) {
656  pFIO->FIOMASK[byteNum] |= bitValue;
657  }
658  }
659  // Un-mask
660  else {
661  if ((byteNum >= 0) && (byteNum <= 3)) {
662  pFIO->FIOMASK[byteNum] &= ~bitValue;
663  }
664  }
665  }
666 }
667 
668 
669 /*********************************************************************/
683 void FIO_ByteSetValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue)
684 {
685  GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
686  if (pFIO != NULL) {
687  if ((byteNum >= 0) && (byteNum <= 3)){
688  pFIO->FIOSET[byteNum] = bitValue;
689  }
690  }
691 }
692 
693 
694 /*********************************************************************/
708 void FIO_ByteClearValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue)
709 {
710  GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
711  if (pFIO != NULL) {
712  if ((byteNum >= 0) && (byteNum <= 3)){
713  pFIO->FIOCLR[byteNum] = bitValue;
714  }
715  }
716 }
717 
718 
719 /*********************************************************************/
728 uint8_t FIO_ByteReadValue(uint8_t portNum, uint8_t byteNum)
729 {
730  GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
731  if (pFIO != NULL) {
732  if ((byteNum >= 0) && (byteNum <= 3)){
733  return (pFIO->FIOPIN[byteNum]);
734  }
735  }
736  return (0);
737 }
738 
743 #endif /* _GPIO */
744 
749 /* --------------------------------- End Of File ------------------------------ */