日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】Tiny4412裸板编程之LED(C语言)

發布時間:2024/4/24 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】Tiny4412裸板编程之LED(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 控制原理
    • 02. 配置寄存器
    • 03. 程序示例一
    • 04. 程序示例二
    • 05. 程序示例三
    • 06. 程序實例四
    • 07. 附錄

01. 控制原理

咱們的LED在核心板上,所以需要看核心板的原理圖

打開核心板原理圖(Tiny4412-1412-Schematic.pdf)

由上圖可知,Tiny4412有4個用戶LED燈,控制它們四個引腳分別是GPM4_0~ GPM4_3,由原理可知,當IO引腳為高電平時,LED燈滅,當IO引腳為低電平時LED亮。我們要做的工作就是設置GPM4_0~ GPM4_3為輸出功能,且控制且輸出電平高低即可。

02. 配置寄存器

由原理圖可知,程序只進行了兩步操作。

第一步:設置GPM4_0~GPM4_3相對應的控制寄存器GPM4CON,使GPM4_0 GPM4_3四個引腳為輸出功能。

第二步:設置其對應的數據寄存器GPM4DAT對應的4個bit位為0,使GPM4_0~ GPM4_3為低電平,4個LED燈全亮,使GPM4_0~ GPM4_3全為高電平,4個LED燈全滅。

03. 程序示例一

將所有的燈全部都亮

gpio.h

#ifndef __GPIO_H__ #define __GPIO_H__typedef volatile unsigned int U32; typedef volatile unsigned short U16; typedef volatile unsigned char U8;//LED #define GPM4CON *(U32*)0x110002e0 #define GPM4DAT *(U32*)0x110002e4//LED初始化 int led_init(void); //LED 全亮 int led_allon(void); //LED 全滅 int led_alloff(void);#endif/*__GPIO_H__*/

lib.c文件內容如下

int delay(unsigned int i) {while(--i); }int delay1() {unsigned int i = 0xfffff;while(--i); }

led.c文件內容如下

#include <gpio.h>//LED初始化 int led_init(void) {GPM4CON &= ~0xffff;GPM4CON |= 0x1111;return 0; }//LED 全亮 int led_allon(void) {GPM4DAT &= ~0xf;return 0; }//LED 全滅 int led_alloff(void) {GPM4DAT |= 0xf;return 0; }

test.c文件內容如下

#include <gpio.h>int main(void) {led_init();led_allon(); return 0; }

start.S文件內容如下

.section .text.align 2.global _start _start:stmfd sp!, {r4, lr}bl mainldmfd sp!, {r4, pc}

start.lds文件內容如下

ENTRY(_start); OUTPUT("test");SECTIONS {. = 0x0;.text : {start.o(.text);*(.text); }.rodata : {*(.rodata);}. = ALIGN(4);.data : {*(.data);}. = ALIGN(4);.bss : {*(.bss);} }

Makefile

CROSS_COMPILE = arm-linux- CC = $(CROSS_COMPILE)gcc CC_FLAGS = -c -I ./ LD = $(CROSS_COMPILE)ld LD_FLAGS = -T start.lds -Ttext 0x40000000 OBJCOPY = $(CROSS_COMPILE)objcopy COPY_FLAGS = -O binary OBJDUMP=$(CROSS_COMPILE)objdump DUMP_FLAGS=-D TARGET=test OBJS=start.o led.o lib.o test.oall: $(OBJS)$(LD) $(LD_FLAGS) $(OBJS) -o $(TARGET)$(OBJCOPY) $(COPY_FLAGS) $(TARGET) $(TARGET).bin$(OBJDUMP) $(DUMP_FLAGS) $(TARGET) > $(TARGET).disrm -rf *.o%.o:%.s$(CC) $(CC_FLAGS) $< %.o:%.S$(CC) $(CC_FLAGS) $< %.o:%.c$(CC) $(CC_FLAGS) $<.PHONY:clean clean:rm -rf *.o $(TARGET).bin $(TARGET).dis $(TARGET)

04. 程序示例二

將所有的燈全部都滅

test.c文件內容如下

#include <gpio.h>int main(void) {led_init();led_alloff(); return 0; }

05. 程序示例三

所有led閃爍

test.c文件內容如下

#include <gpio.h>int main(void) {led_init();while(1){led_allon();delay1();led_alloff();delay1();}return 0; }

06. 程序實例四

跑馬燈

int i = 0;led_init();while(1){led_alloff();led_on(i); delay1();i = (i+1) % 4;}return 0; }

07. 附錄

Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf

總結

以上是生活随笔為你收集整理的【ARM】Tiny4412裸板编程之LED(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。