基於Tiny6410的LED驅動程式

2021-08-27 12:09:36 字數 4207 閱讀 8238

從電路圖中看出,gpio低電平有效(led亮)。gpk共有16個埠,每個埠由三個暫存器控制——控制暫存器(gpkcon)、資料暫存器(gpkdat)和上拉暫存器(gpkpud),每個暫存器都是32位,如下圖所示。

gpk的控制暫存器分為兩個,gpkcon0控制0~8好埠,gpkcon1控制9~15號埠。控制暫存器連續的4位控制乙個埠,如下圖中led對應的控制暫存器。

makefile檔案如下:

arch=arm

compile=arm-linux-

ifneq ($(kernelrelease),)

obj-m:=tiny6410_leds.o

else

pwd := $(shell pwd)

endif

all:

make -c$(kdir) m=$(pwd) modules arch=$(arch) cross_compile=$(compile)

clean:

rm -f *.ko*.o *.mod.o *.od.c *.symvers

使用者空間測試檔案為led.c如下,

#include

#include

#include

#include

#include

#include

#include

#definedevice_name"/dev/tiny6410_leds"

intmain(int argc,char**argv)

int on;

int led_no;

int fd;

if (argc != 3 || sscanf(argv[1], "%d",&led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 || on < 0|| on > 1 || led_no < 0 || led_no > 3) {

fprintf(stderr,"usage: leds led_no 0|1\n");

exit(1);

fd =open(device_name, 0);

if (fd < 0) {

perror("opendevice leds");

exit(1);

ioctl(fd,on, led_no);

close(fd);

return 0;

使用arm-linux編譯,友善提供了乙個編譯led.c的makefile檔案,我們關注其中的install目標,該目標能將編譯後的程式安裝到系統中。

ifndef destdir

destdir ?=/tmp/friendlyarm/mini6410/rootfs

endif

cflags =-wall -o2

cc =arm-linux-gcc

install =install

target =led

all: $(target)

led: led.c

$(cc)$(cflags) $< -o $@

install: $(target)

$(install)$^ $(destdir)/usr/bin

clean distclean:

rm -rf *.o$(target)

.phony: $(phony) install clean distclean

Tiny6410核心移植

一 開發環境 宿主機 fedora9.0 或 ubuntu10.04 開發板 tiny6410 編譯器 4.3.2 二 核心移植 linux 2.6.38 2.解壓 進入根目錄下的 home poplar expr4 kernel目錄,解壓原始碼 tar xvfj home poplar expr4...

Tiny6410學習 Linux命令

今天再來記錄一下一些非常常用的linux基礎命令知識,以備後期來查。1.新增使用者 useradd smb 新增名字為smb的使用者 2.修改密碼 passwd smb 修改smb使用者的密碼 3.切換使用者 su root 切換到root使用者,並將root環境變數同時帶入 就是管理員賬號了,也就...

Tiny6410 交叉編譯helloworld程式

在工作目錄下建立helloworld.c檔案 cpp view plain copy print include main 儲存關閉後。編譯helloworld檔案 csharp view plain copy print root snail home workdir qt project hel...