libgpio, better initrd structure
parent
cef5647a15
commit
42eff60714
@ -1,12 +0,0 @@
|
|||||||
##
|
|
||||||
# A simple Makefile for building executables loadable by stmos.
|
|
||||||
#
|
|
||||||
|
|
||||||
ARCH = arm-stmos-
|
|
||||||
CC = gcc -mcpu=cortex-m4 -mthumb -fsigned-char
|
|
||||||
CFLAGS = -Os -fPIE
|
|
||||||
|
|
||||||
all:
|
|
||||||
@$(ARCH)$(CC) $(CFLAGS) init.c -o init
|
|
||||||
@arm-stmos-strip init
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
##
|
||||||
|
# A simple Makefile for building executables loadable by stmos.
|
||||||
|
#
|
||||||
|
|
||||||
|
CC = gcc -mcpu=cortex-m4 -mthumb -fsigned-char
|
||||||
|
CFLAGS = -Os -fPIE -I../libgpio
|
||||||
|
|
||||||
|
CFILES = $(wildcard *.c)
|
||||||
|
OFILES = $(patsubst %.c, files/%, $(CFILES))
|
||||||
|
|
||||||
|
all: $(OFILES)
|
||||||
|
@../../tools/rba initrd.img $$(find files/*)
|
||||||
|
@$(CROSS)$(OBJCOPY) -B arm -I binary -O elf32-littlearm initrd.img \
|
||||||
|
initrd.img.o
|
||||||
|
|
||||||
|
files/%: %.c
|
||||||
|
@echo " CC " $<
|
||||||
|
@$(CROSS)$(CC) $(CFLAGS) $< ../libgpio/libgpio.a -o $@
|
||||||
|
@$(CROSS)strip $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo " CLEAN"
|
||||||
|
@rm -f $(OFILES)
|
||||||
|
@rm -f initrd.img initrd.img.o
|
||||||
|
|
Binary file not shown.
@ -0,0 +1,38 @@
|
|||||||
|
##
|
||||||
|
# @file Makefile
|
||||||
|
# Script to build folder of source files
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018 Clyne Sullivan
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
CFILES = $(wildcard *.c)
|
||||||
|
OFILES = $(patsubst %.c, %.o, $(CFILES))
|
||||||
|
|
||||||
|
CFLAGS += -fPIC
|
||||||
|
|
||||||
|
all: $(OFILES)
|
||||||
|
@$(CROSS)ar rcu libgpio.a $(OFILES)
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
@echo " CC " $<
|
||||||
|
@$(CROSS)$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo " CLEAN"
|
||||||
|
@rm -f $(OFILES)
|
||||||
|
@rm -f libgpio.a
|
||||||
|
|
||||||
|
|
@ -0,0 +1,78 @@
|
|||||||
|
#include "gpio.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void gpioMode(gpio_pin_t pin, int mode)
|
||||||
|
{
|
||||||
|
register uint32_t r1 __asm("r1") = pin;
|
||||||
|
register uint32_t r2 __asm("r2") = mode;
|
||||||
|
__asm("\
|
||||||
|
mov r0, 0; \
|
||||||
|
mov r1, %0; \
|
||||||
|
mov r2, %1; \
|
||||||
|
svc 1; \
|
||||||
|
" :: "r" (r1), "r" (r2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpioType(gpio_pin_t pin, int type)
|
||||||
|
{
|
||||||
|
register uint32_t r1 __asm("r1") = pin;
|
||||||
|
register uint32_t r2 __asm("r2") = type;
|
||||||
|
__asm("\
|
||||||
|
mov r0, 1; \
|
||||||
|
mov r1, %0; \
|
||||||
|
mov r2, %1; \
|
||||||
|
svc 1; \
|
||||||
|
" :: "r" (r1), "r" (r2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpioPuPd(gpio_pin_t pin, int pupd)
|
||||||
|
{
|
||||||
|
register uint32_t r1 __asm("r1") = pin;
|
||||||
|
register uint32_t r2 __asm("r2") = pupd;
|
||||||
|
__asm("\
|
||||||
|
mov r0, 2; \
|
||||||
|
mov r1, %0; \
|
||||||
|
mov r2, %1; \
|
||||||
|
svc 1; \
|
||||||
|
" :: "r" (r1), "r" (r2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpioSpeed(gpio_pin_t pin, int speed)
|
||||||
|
{
|
||||||
|
register uint32_t r1 __asm("r1") = pin;
|
||||||
|
register uint32_t r2 __asm("r2") = speed;
|
||||||
|
__asm("\
|
||||||
|
mov r0, 3; \
|
||||||
|
mov r1, %0; \
|
||||||
|
mov r2, %1; \
|
||||||
|
svc 1; \
|
||||||
|
" :: "r" (r1), "r" (r2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpioWrite(gpio_pin_t pin, int value)
|
||||||
|
{
|
||||||
|
register uint32_t r1 __asm("r1") = pin;
|
||||||
|
register uint32_t r2 __asm("r2") = value;
|
||||||
|
__asm("\
|
||||||
|
mov r0, 4; \
|
||||||
|
mov r1, %0; \
|
||||||
|
mov r2, %1; \
|
||||||
|
svc 1; \
|
||||||
|
" :: "r" (r1), "r" (r2));
|
||||||
|
}
|
||||||
|
|
||||||
|
int gpioRead(gpio_pin_t pin)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
register uint32_t r1 __asm("r1") = pin;
|
||||||
|
register uint32_t r2 __asm("r2") = (uint32_t)&ret;
|
||||||
|
__asm("\
|
||||||
|
mov r0, 5; \
|
||||||
|
mov r1, %0; \
|
||||||
|
mov r2, %1; \
|
||||||
|
svc 1; \
|
||||||
|
" :: "r" (r1), "r" (r2));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,57 @@
|
|||||||
|
#ifndef STMOS_GPIO_H_
|
||||||
|
#define STMOS_GPIO_H_
|
||||||
|
|
||||||
|
#define GP(a) ((a - 'A') << 4)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines possible modes for a gpio pin.
|
||||||
|
*/
|
||||||
|
enum GPIO_MODE
|
||||||
|
{
|
||||||
|
INPUT = 0, /**< digital input */
|
||||||
|
OUTPUT, /**< digital output */
|
||||||
|
ALTERNATE, /**< alternate function */
|
||||||
|
ANALOG /**< analog function */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines whether to use push-pull or open drain.
|
||||||
|
*/
|
||||||
|
enum GPIO_TYPE
|
||||||
|
{
|
||||||
|
PUSHPULL = 0, /**< push-pull */
|
||||||
|
OPENDRAIN /**< open drain */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the pin's speed
|
||||||
|
*/
|
||||||
|
enum GPIO_SPEED
|
||||||
|
{
|
||||||
|
LOW = 0, /**< low */
|
||||||
|
MEDIUM, /**< medium */
|
||||||
|
HIGH, /**< high */
|
||||||
|
VERYHIGH /**< very high/maximum */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines if a pullup or pulldown should be used.
|
||||||
|
*/
|
||||||
|
enum GPIO_PUPD
|
||||||
|
{
|
||||||
|
NOPUPD, /**< no pullup/pulldown */
|
||||||
|
PULLUP, /**< use pullup */
|
||||||
|
PULLDOWN /**< use pulldown */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef unsigned int gpio_pin_t;
|
||||||
|
|
||||||
|
void gpioMode(gpio_pin_t pin, int mode);
|
||||||
|
void gpioType(gpio_pin_t pin, int type);
|
||||||
|
void gpioPuPd(gpio_pin_t pin, int pupd);
|
||||||
|
void gpioSpeed(gpio_pin_t pin, int speed);
|
||||||
|
void gpioWrite(gpio_pin_t pin, int value);
|
||||||
|
int gpioRead(gpio_pin_t pin);
|
||||||
|
|
||||||
|
#endif // STMOS_GPIO_H_
|
Binary file not shown.
Loading…
Reference in New Issue