added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
80:bdf1132a57cf
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 80:bdf1132a57cf 1 /* mbed Microcontroller Library
mbed_official 80:bdf1132a57cf 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 80:bdf1132a57cf 3 *
mbed_official 80:bdf1132a57cf 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 80:bdf1132a57cf 5 * you may not use this file except in compliance with the License.
mbed_official 80:bdf1132a57cf 6 * You may obtain a copy of the License at
mbed_official 80:bdf1132a57cf 7 *
mbed_official 80:bdf1132a57cf 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 80:bdf1132a57cf 9 *
mbed_official 80:bdf1132a57cf 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 80:bdf1132a57cf 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 80:bdf1132a57cf 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 80:bdf1132a57cf 13 * See the License for the specific language governing permissions and
mbed_official 80:bdf1132a57cf 14 * limitations under the License.
mbed_official 80:bdf1132a57cf 15 */
mbed_official 80:bdf1132a57cf 16 #include "gpio_api.h"
mbed_official 80:bdf1132a57cf 17 #include "pinmap.h"
mbed_official 80:bdf1132a57cf 18
mbed_official 80:bdf1132a57cf 19 // function to enable the GPIO pin
mbed_official 80:bdf1132a57cf 20 uint32_t gpio_set(PinName pin) {
mbed_official 80:bdf1132a57cf 21 return (1);
mbed_official 80:bdf1132a57cf 22 }
mbed_official 80:bdf1132a57cf 23
mbed_official 80:bdf1132a57cf 24 //function to initialise the gpio pin
mbed_official 80:bdf1132a57cf 25 // this links the board control bits for each pin
mbed_official 80:bdf1132a57cf 26 // with the object created for the pin
mbed_official 80:bdf1132a57cf 27 void gpio_init(gpio_t *obj, PinName pin) {
mbed_official 80:bdf1132a57cf 28 if(pin == NC){ return;}
mbed_official 80:bdf1132a57cf 29 else {
mbed_official 80:bdf1132a57cf 30 int pin_value = 0;
mbed_official 80:bdf1132a57cf 31 obj->pin = pin;
mbed_official 80:bdf1132a57cf 32 if(pin <=15){
mbed_official 80:bdf1132a57cf 33 pin_value = pin;
mbed_official 80:bdf1132a57cf 34 }else if (pin >= 16 && pin <= 31){
mbed_official 80:bdf1132a57cf 35 pin_value = pin-16;
mbed_official 80:bdf1132a57cf 36 }else if (pin >= 32 && pin <= 47){
mbed_official 80:bdf1132a57cf 37 pin_value = pin-32;
mbed_official 80:bdf1132a57cf 38 }else if (pin >= 48 && pin <= 51){
mbed_official 80:bdf1132a57cf 39 pin_value = pin-48;
mbed_official 80:bdf1132a57cf 40 }else if (pin == 100 || pin == 101){
mbed_official 80:bdf1132a57cf 41 pin_value = pin-100;
mbed_official 80:bdf1132a57cf 42 }else if (pin == 110 || pin == 111){
mbed_official 80:bdf1132a57cf 43 pin_value = pin-110;
mbed_official 80:bdf1132a57cf 44 }else if (pin >= 200 && pin <= 207){
mbed_official 80:bdf1132a57cf 45 pin_value = pin-200;
mbed_official 80:bdf1132a57cf 46 }else if (pin >= 210 && pin <= 217){
mbed_official 80:bdf1132a57cf 47 pin_value = pin-210;
mbed_official 80:bdf1132a57cf 48 }else if (pin == 303){
mbed_official 80:bdf1132a57cf 49 pin_value = pin-302;
mbed_official 80:bdf1132a57cf 50 }else if (pin == 307){
mbed_official 80:bdf1132a57cf 51 pin_value = pin-307;
mbed_official 80:bdf1132a57cf 52 }else if (pin == 308){
mbed_official 80:bdf1132a57cf 53 pin_value = pin-305;
mbed_official 80:bdf1132a57cf 54 }else if (pin == 309){
mbed_official 80:bdf1132a57cf 55 pin_value = pin-305;
mbed_official 80:bdf1132a57cf 56 }else if (pin == 310){
mbed_official 80:bdf1132a57cf 57 pin_value = pin-305;
mbed_official 80:bdf1132a57cf 58 }else if (pin == 311){
mbed_official 80:bdf1132a57cf 59 pin_value = pin-305;
mbed_official 80:bdf1132a57cf 60 }else if (pin == 323){
mbed_official 80:bdf1132a57cf 61 pin_value = pin-315;
mbed_official 80:bdf1132a57cf 62 }else if (pin == 334){
mbed_official 80:bdf1132a57cf 63 pin_value = pin-325;
mbed_official 80:bdf1132a57cf 64 }else if (pin == 653){
mbed_official 80:bdf1132a57cf 65 pin_value = pin-646;
mbed_official 80:bdf1132a57cf 66 }
mbed_official 80:bdf1132a57cf 67
mbed_official 80:bdf1132a57cf 68 obj->mask = 0x1 << pin_value;
mbed_official 80:bdf1132a57cf 69 obj->pin_number = pin;
mbed_official 80:bdf1132a57cf 70 if(pin <=15) {
mbed_official 80:bdf1132a57cf 71 obj->reg_data = &CMSDK_GPIO0->DATAOUT ;
mbed_official 80:bdf1132a57cf 72 obj->reg_in = &CMSDK_GPIO0->DATA ;
mbed_official 80:bdf1132a57cf 73 obj->reg_dir = &CMSDK_GPIO0->OUTENABLESET ;
mbed_official 80:bdf1132a57cf 74 obj->reg_dirclr = &CMSDK_GPIO0->OUTENABLECLR ;
mbed_official 80:bdf1132a57cf 75 } else if (pin >= 16 && pin <= 31){
mbed_official 80:bdf1132a57cf 76 obj->reg_data = &CMSDK_GPIO1->DATAOUT ;
mbed_official 80:bdf1132a57cf 77 obj->reg_in = &CMSDK_GPIO1->DATA ;
mbed_official 80:bdf1132a57cf 78 obj->reg_dir = &CMSDK_GPIO1->OUTENABLESET ;
mbed_official 80:bdf1132a57cf 79 obj->reg_dirclr = &CMSDK_GPIO1->OUTENABLECLR ;
mbed_official 80:bdf1132a57cf 80 } else if (pin >= 32 && pin <= 47){
mbed_official 80:bdf1132a57cf 81 obj->reg_data = &CMSDK_GPIO2->DATAOUT;
mbed_official 80:bdf1132a57cf 82 obj->reg_in = &CMSDK_GPIO2->DATA;
mbed_official 80:bdf1132a57cf 83 obj->reg_dir = &CMSDK_GPIO2->OUTENABLESET ;
mbed_official 80:bdf1132a57cf 84 obj->reg_dirclr = &CMSDK_GPIO2->OUTENABLECLR ;
mbed_official 80:bdf1132a57cf 85 } else if (pin >= 48 && pin <= 51){
mbed_official 80:bdf1132a57cf 86 obj->reg_data = &CMSDK_GPIO3->DATAOUT;
mbed_official 80:bdf1132a57cf 87 obj->reg_in = &CMSDK_GPIO3->DATA;
mbed_official 80:bdf1132a57cf 88 obj->reg_dir = &CMSDK_GPIO3->OUTENABLESET ;
mbed_official 80:bdf1132a57cf 89 obj->reg_dirclr = &CMSDK_GPIO3->OUTENABLECLR ;
mbed_official 80:bdf1132a57cf 90 } else if (pin == 100 || pin == 101){
mbed_official 80:bdf1132a57cf 91 obj->reg_data = &MPS2_FPGAIO->LED; //user leds
mbed_official 80:bdf1132a57cf 92 obj->reg_in = &MPS2_FPGAIO->LED;
mbed_official 80:bdf1132a57cf 93 } else if (pin == 110 || pin == 111){
mbed_official 80:bdf1132a57cf 94 obj->reg_data = &MPS2_FPGAIO->BUTTON; //user switches
mbed_official 80:bdf1132a57cf 95 obj->reg_in = &MPS2_FPGAIO->BUTTON; //user switches
mbed_official 80:bdf1132a57cf 96 }else if (pin >= 200 && pin <= 207){
mbed_official 80:bdf1132a57cf 97 obj->reg_data = &MPS2_SCC->LEDS; //mcc leds
mbed_official 80:bdf1132a57cf 98 obj->reg_in = &MPS2_SCC->LEDS; //mcc leds
mbed_official 80:bdf1132a57cf 99 }else if (pin >= 210 && pin <= 217){
mbed_official 80:bdf1132a57cf 100 obj->reg_in = &MPS2_SCC->SWITCHES; //mcc switches
mbed_official 80:bdf1132a57cf 101 }else if (pin == 303 || pin == 307){
mbed_official 80:bdf1132a57cf 102 obj->reg_data = &MPS2_FPGAIO->MISC; //spi chip select = 303, clcd chip select = 307
mbed_official 80:bdf1132a57cf 103 }else if (pin == 308 || pin == 309 || pin == 310 || pin == 311){
mbed_official 80:bdf1132a57cf 104 obj->reg_data = &MPS2_FPGAIO->MISC; //clcd control bits
mbed_official 80:bdf1132a57cf 105 }else if (pin == 323 || pin == 334 || pin == 653){ //spi 3 chip select = 323, spi 4 chip select = 334, adc chip select = 653
mbed_official 80:bdf1132a57cf 106 obj->reg_data = &MPS2_FPGAIO->MISC; //spi cs bits
mbed_official 80:bdf1132a57cf 107 }
mbed_official 80:bdf1132a57cf 108
mbed_official 80:bdf1132a57cf 109 if (pin == 323){
mbed_official 80:bdf1132a57cf 110 CMSDK_GPIO0->ALTFUNCSET |= 0x0400;
mbed_official 80:bdf1132a57cf 111 }else if (pin == 334){
mbed_official 80:bdf1132a57cf 112 CMSDK_GPIO4->ALTFUNCSET |= 0x0001;
mbed_official 80:bdf1132a57cf 113 }else if (pin == 653){
mbed_official 80:bdf1132a57cf 114 CMSDK_GPIO1->ALTFUNCSET |= 0x0004;
mbed_official 80:bdf1132a57cf 115 }
mbed_official 80:bdf1132a57cf 116 }
mbed_official 80:bdf1132a57cf 117 }
mbed_official 80:bdf1132a57cf 118
mbed_official 80:bdf1132a57cf 119 void gpio_mode(gpio_t *obj, PinMode mode) {
mbed_official 80:bdf1132a57cf 120 pin_mode(obj->pin, mode);
mbed_official 80:bdf1132a57cf 121 }
mbed_official 80:bdf1132a57cf 122
mbed_official 80:bdf1132a57cf 123 void gpio_dir(gpio_t *obj, PinDirection direction) {
mbed_official 80:bdf1132a57cf 124 if(obj->pin >= 0 && obj->pin <= 51)
mbed_official 80:bdf1132a57cf 125 {
mbed_official 80:bdf1132a57cf 126 switch (direction) {
mbed_official 80:bdf1132a57cf 127 case PIN_INPUT : *obj->reg_dirclr = obj->mask; break;
mbed_official 80:bdf1132a57cf 128 case PIN_OUTPUT: *obj->reg_dir |= obj->mask; break;
mbed_official 80:bdf1132a57cf 129 }
mbed_official 80:bdf1132a57cf 130 } else {return;}
mbed_official 80:bdf1132a57cf 131 }
mbed_official 80:bdf1132a57cf 132
mbed_official 80:bdf1132a57cf 133 int gpio_is_connected(const gpio_t *obj){
mbed_official 80:bdf1132a57cf 134 if(obj->pin != (PinName)NC){
mbed_official 80:bdf1132a57cf 135 return 1;
mbed_official 80:bdf1132a57cf 136 } else {
mbed_official 80:bdf1132a57cf 137 return 0;
mbed_official 80:bdf1132a57cf 138 }
mbed_official 80:bdf1132a57cf 139 }
mbed_official 80:bdf1132a57cf 140