Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilmgandhi 18:6a4db94011d3 1 /* mbed Microcontroller Library
sahilmgandhi 18:6a4db94011d3 2 * Copyright (c) 2015-2016 Nuvoton
sahilmgandhi 18:6a4db94011d3 3 *
sahilmgandhi 18:6a4db94011d3 4 * Licensed under the Apache License, Version 2.0 (the "License");
sahilmgandhi 18:6a4db94011d3 5 * you may not use this file except in compliance with the License.
sahilmgandhi 18:6a4db94011d3 6 * You may obtain a copy of the License at
sahilmgandhi 18:6a4db94011d3 7 *
sahilmgandhi 18:6a4db94011d3 8 * http://www.apache.org/licenses/LICENSE-2.0
sahilmgandhi 18:6a4db94011d3 9 *
sahilmgandhi 18:6a4db94011d3 10 * Unless required by applicable law or agreed to in writing, software
sahilmgandhi 18:6a4db94011d3 11 * distributed under the License is distributed on an "AS IS" BASIS,
sahilmgandhi 18:6a4db94011d3 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sahilmgandhi 18:6a4db94011d3 13 * See the License for the specific language governing permissions and
sahilmgandhi 18:6a4db94011d3 14 * limitations under the License.
sahilmgandhi 18:6a4db94011d3 15 */
sahilmgandhi 18:6a4db94011d3 16
sahilmgandhi 18:6a4db94011d3 17 #include "port_api.h"
sahilmgandhi 18:6a4db94011d3 18 #include "gpio_api.h"
sahilmgandhi 18:6a4db94011d3 19 #include "pinmap.h"
sahilmgandhi 18:6a4db94011d3 20 #include "mbed_error.h"
sahilmgandhi 18:6a4db94011d3 21
sahilmgandhi 18:6a4db94011d3 22 #if DEVICE_PORTIN || DEVICE_PORTOUT || DEVICE_PORTINOUT
sahilmgandhi 18:6a4db94011d3 23
sahilmgandhi 18:6a4db94011d3 24 PinName port_pin(PortName port, int pin_n)
sahilmgandhi 18:6a4db94011d3 25 {
sahilmgandhi 18:6a4db94011d3 26 return (PinName) NU_PORT_N_PIN_TO_PINNAME(port, pin_n);
sahilmgandhi 18:6a4db94011d3 27 }
sahilmgandhi 18:6a4db94011d3 28
sahilmgandhi 18:6a4db94011d3 29 void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
sahilmgandhi 18:6a4db94011d3 30 {
sahilmgandhi 18:6a4db94011d3 31 obj->port = port;
sahilmgandhi 18:6a4db94011d3 32 obj->mask = mask;
sahilmgandhi 18:6a4db94011d3 33 obj->direction = dir;
sahilmgandhi 18:6a4db94011d3 34
sahilmgandhi 18:6a4db94011d3 35 uint32_t i;
sahilmgandhi 18:6a4db94011d3 36 obj->direction = dir;
sahilmgandhi 18:6a4db94011d3 37 for (i = 0; i < GPIO_PIN_MAX; i++) {
sahilmgandhi 18:6a4db94011d3 38 if (obj->mask & (1 << i)) {
sahilmgandhi 18:6a4db94011d3 39 gpio_set(port_pin(port, i));
sahilmgandhi 18:6a4db94011d3 40 }
sahilmgandhi 18:6a4db94011d3 41 }
sahilmgandhi 18:6a4db94011d3 42
sahilmgandhi 18:6a4db94011d3 43 port_dir(obj, dir);
sahilmgandhi 18:6a4db94011d3 44 }
sahilmgandhi 18:6a4db94011d3 45
sahilmgandhi 18:6a4db94011d3 46 void port_dir(port_t *obj, PinDirection dir)
sahilmgandhi 18:6a4db94011d3 47 {
sahilmgandhi 18:6a4db94011d3 48 uint32_t i;
sahilmgandhi 18:6a4db94011d3 49 obj->direction = dir;
sahilmgandhi 18:6a4db94011d3 50 for (i = 0; i < GPIO_PIN_MAX; i++) {
sahilmgandhi 18:6a4db94011d3 51 if (obj->mask & (1 << i)) {
sahilmgandhi 18:6a4db94011d3 52 if (dir == PIN_OUTPUT) {
sahilmgandhi 18:6a4db94011d3 53 GPIO_SetMode(NU_PORT_BASE(obj->port), 1 << i, GPIO_MODE_OUTPUT);
sahilmgandhi 18:6a4db94011d3 54 } else { // PIN_INPUT
sahilmgandhi 18:6a4db94011d3 55 GPIO_SetMode(NU_PORT_BASE(obj->port), 1 << i, GPIO_MODE_INPUT);
sahilmgandhi 18:6a4db94011d3 56 }
sahilmgandhi 18:6a4db94011d3 57 }
sahilmgandhi 18:6a4db94011d3 58 }
sahilmgandhi 18:6a4db94011d3 59 }
sahilmgandhi 18:6a4db94011d3 60
sahilmgandhi 18:6a4db94011d3 61 void port_mode(port_t *obj, PinMode mode)
sahilmgandhi 18:6a4db94011d3 62 {
sahilmgandhi 18:6a4db94011d3 63 uint32_t i;
sahilmgandhi 18:6a4db94011d3 64
sahilmgandhi 18:6a4db94011d3 65 for (i = 0; i < GPIO_PIN_MAX; i++) {
sahilmgandhi 18:6a4db94011d3 66 if (obj->mask & (1 << i)) {
sahilmgandhi 18:6a4db94011d3 67 pin_mode(port_pin(obj->port, i), mode);
sahilmgandhi 18:6a4db94011d3 68 }
sahilmgandhi 18:6a4db94011d3 69 }
sahilmgandhi 18:6a4db94011d3 70 }
sahilmgandhi 18:6a4db94011d3 71
sahilmgandhi 18:6a4db94011d3 72 void port_write(port_t *obj, int value)
sahilmgandhi 18:6a4db94011d3 73 {
sahilmgandhi 18:6a4db94011d3 74 uint32_t i;
sahilmgandhi 18:6a4db94011d3 75 uint32_t port_index = obj->port;
sahilmgandhi 18:6a4db94011d3 76
sahilmgandhi 18:6a4db94011d3 77 for (i = 0; i < GPIO_PIN_MAX; i++) {
sahilmgandhi 18:6a4db94011d3 78 if (obj->mask & (1 << i)) {
sahilmgandhi 18:6a4db94011d3 79 GPIO_PIN_DATA(port_index, i) = (value & obj->mask) ? 1 : 0;
sahilmgandhi 18:6a4db94011d3 80 }
sahilmgandhi 18:6a4db94011d3 81 }
sahilmgandhi 18:6a4db94011d3 82 }
sahilmgandhi 18:6a4db94011d3 83
sahilmgandhi 18:6a4db94011d3 84 int port_read(port_t *obj)
sahilmgandhi 18:6a4db94011d3 85 {
sahilmgandhi 18:6a4db94011d3 86 uint32_t i;
sahilmgandhi 18:6a4db94011d3 87 uint32_t port_index = obj->port;
sahilmgandhi 18:6a4db94011d3 88 int value = 0;
sahilmgandhi 18:6a4db94011d3 89
sahilmgandhi 18:6a4db94011d3 90 for (i = 0; i < GPIO_PIN_MAX; i++) {
sahilmgandhi 18:6a4db94011d3 91 if (obj->mask & (1 << i)) {
sahilmgandhi 18:6a4db94011d3 92 value = value | (GPIO_PIN_DATA(port_index, i) << i);
sahilmgandhi 18:6a4db94011d3 93 }
sahilmgandhi 18:6a4db94011d3 94 }
sahilmgandhi 18:6a4db94011d3 95
sahilmgandhi 18:6a4db94011d3 96 return value;
sahilmgandhi 18:6a4db94011d3 97 }
sahilmgandhi 18:6a4db94011d3 98
sahilmgandhi 18:6a4db94011d3 99 #endif