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