ARM第三天(LED下、蜂鸣器上)
来源:互联网 发布:apache基金会如何赚钱 编辑:程序博客网 时间:2024/05/22 13:49
GPC1CON寄存器 0xE020_0080
确定GPC1_3的管脚为输出
当GPC1_3的管脚的功能确定了输出功能后,具体如何输出高电平?
GPC1DAT寄存器 0xE020_0084
[4,0],五个管脚共用一个寄存器,一个寄存器占用一位
什么是上、下拉电阻?
CW210-Peripherial.pdf
上拉电阻:
如按键按下,则XEINT0管脚为低电平
如按键松开,则XEINT0管脚为高电平
如果没有外接3.3V电源和上拉电阻,当按键松开时XEINT0处于悬空,电平值不确定,可以为高电平,也可能为低电平。
因为如果不接上拉电阻,如果开关松开,XEINT0为低电平有两种情况:断开(悬空)、回路,这就失去了低电平的唯一性,所以要接一个上拉电阻来唯一确定管脚状态。
若外接3.3V电源和上拉电阻,保证了XEINT0在按键松开时,有确定的状态,为高电平;
下拉电阻:
如按键按下,则XEINT0管脚为高电平
如按键松开,则XEINT0管脚为低电平
如果没有外接GND和下拉电阻,当按键松开时XEINT0处于悬空,电平值不确定,可以为高电平,也可能为低电平。
若外接GND和上拉电阻,保证了XEINT0在按键松开时,有确定的状态,为低电平;
GPC1PUD 上下拉电阻寄存器 0xE0200088
我们这里将管脚的上下拉电阻禁用
Tarena:
1,将GPC1_3管脚设置为输出功能管脚
GPC1CON 0xE0200080
bit[15:12]为0001,表示输出功能
2,禁止GPC1_3管脚内部上下拉电阻
GPC1PUD 0xE0200088
bit[7:6]为00,表示禁止内部上拉、下拉
3,使GPC1_3管脚产生高低电平
GPC1DAT 0xE0200084
bit[3] =1 ,表示向三级管输出高电平,LED亮
bit[3] =0 ,表示向三级管输出低电平,LED灭
融慧广泽:
1,将GPC0_3管脚设置为输出功能管脚
GPC0CON 0xE0200060
bit[15:12]为0001,表示输出功能
2,禁止GPC0_3管脚内部上下拉电阻
GPC0PUD 0xE0200068
bit[7:6]为00,表示禁止内部上拉、下拉
3,使GPC0_3管脚产生高低电平
GPC0DAT 0xE0200064
bit[3] =1 ,表示向三级管输出高电平,LED亮
bit[3] =0 ,表示向三级管输出低电平,LED灭
led.h文件
#ifndef __LED_H__#define __LED_H__H#define GPC1CON (*((volatile unsigned int*)0xE0200080))#define GPC1DAT (*((volatile unsigned int*)0xE0200084))#define GPC1PUD (*((volatile unsigned int*)0xE0200088))#endif
led.c文件
#include "led.h"void led_main(void){ //配置GPC1_3管脚为输出口,操作GPC1CON bit[15,12] 为 0001 GPC1CON = (GPC1CON & 0xFFFF0FFF)|0x00001000; //2,禁止GPC1_3管脚内部上下拉电阻 操作GPC1PUD bit[7,6]为00 GPC1PUD &=~0xC0 ; //3,使GPC1_3管脚输出高电平,GPC1DATA bit[3]为1 GPC1DAT |=8 ;}
编译与链接:
#编译 arm-linux-gcc -march=armv5te -nostdlib -c -o led.o led.c #链接 arm-linux-ld -nostartfiles -nostadlib -Text=0x20008000 -e led_main -o led led.o #转换文件格式 把lef格式的文件转换成bind格式的文件 arm-linux-objcopy -o binary led led.bin
如保让LED闪烁?
#include "led.h"void delay(unsinged int n);void led_main(void){ //配置GPC1_3管脚为输出口,操作GPC1CON bit[15,12] 为 0001 GPC1CON = (GPC1CON & 0xFFFF0FFF)|0x00001000; //2,禁止GPC1_3管脚内部上下拉电阻 操作GPC1PUD bit[7,6]为00 GPC1PUD &=~0xC0 ; //3,使GPC1_3管脚输出高电平,GPC1DATA bit[3]为1 //高电平和低电平 //操作GPC1DAT bit[3]为1或0 while(1){ GPC1DAT |=8 ; delay(0x100000); GPC1DAT &= ~8; delay(0x100000); }}void delay(unsinged int n){ while(n){ n--; }}
arm-linux-gcc -march=armv5te -nostdlib -c -o led.o led.c
-march=armv5te:指定生成的指令架构的版本
-nostdlib:不使用标准库
arm-linux-ld -nostartfiles -nostadlib -Text=0x20008000 -e led_main -o led led.o
-nostartfiles:不使用启动文件
-nostadlib:不使用标准的库函数
-Text:指定代码段的起始地址
-e led_main:指定代码的起始位置,不起作用,只是为了消除警告
arm-linux-objcopy -O binary led led.bin
Makefile:
#elf格式的文件依赖于led.oled:led.o arm-linux-ld -nostartfiles -nostdlib -Ttext=0x20008000 -e led_main -o led led.o arm-linux-objcopy -o bin ary led led.binled.o:led.c arm-linux-gcc -march=armv5te -nostdlib -c -o led.o led.cclean: rm -vf led.o led led.bin
以上makefile通用不强,因为写死了
PROG=ledBIN=$(PROG).binOBJS=led.oLC=arm-linux-gccLD=arm-linux-ldOBJCOPY=arm-linux-objcopyLDFLAGS = nostartfiles -nostdlib-Ttext 0x20008000 -e led_mainCFLAGS=-march=armv5te -nostblib#编译规则$(PROG):(OBJS) $(LD) $(LDFALGS) -o $(PROG) $(OBJS) $(OBJCOPY) -o binary $(PROG) $(BIN) cp $(BIN) /fttpboot led.o:led.c $(CC) $(CFLAGS) -c -o led.o led.cclean: rm -vf $(OBJS) $(PROG) $(BIN)
通用版本:
PROG=ledBIN=$(PROG).binOBJS=led.oLC=arm-linux-gccLD=arm-linux-ldOBJCOPY=arm-linux-objcopyLDFLAGS = nostartfiles -nostdlib-Ttext 0x20008000 -e led_mainCFLAGS=-march=armv5te -nostblib$(PROG):(OBJS) $(LD) $(LDFALGS) -o $(PROG) $(OBJS) $(OBJCOPY) -o binary $(PROG) $(BIN) cp $(BIN) /fttpboot %.o:%.c $(CC) $(CFLAGS) -c -o $@ $<clean: rm -vf $(OBJS) $(PROG) $(BIN)
%.o:%.c , 这里的%其实表示*,代表所有
%、$ 是Makefile内部自定义好了的。
如何点蜂鸣器?
根据管脚核心板原理图中查找:
GPIO管脚的操作
GPD0_1:
GPD0组4个管脚
寄存器
GPD0CON bit[7,4]
GPD0PUD bit[3,2]
GPD0DAT bit[3,2]
然后查看数据手册
- ARM第三天(LED下、蜂鸣器上)
- ARM第四天(蜂鸣器下、串口)
- #ARM开发# 点亮LED和操作蜂鸣器
- arm下蜂鸣器测试代码
- ARM 按键控制LED灯+IO控制buzzer蜂鸣器
- 智慧北京开发第三天(上)
- min2440上实现LED灯和蜂鸣器的轮转
- 智慧北京开发第三天(下)
- 算法补习-第三天-排序(下)
- arm第二天(环境搭建、LED上)
- LED灯 蜂鸣器
- DAC0832、led、蜂鸣器
- 儿子上幼儿园第三天
- 【罗兰のJava学习笔记】第三天,字符串 (上)
- 第三天:GPIO 与 LED 及反汇编objdump
- 裸机调试-led,蜂鸣器,按键
- 按键点亮LED伴随蜂鸣器
- 嵌入式ARM驱动蜂鸣器
- Shell脚本攻略--小试牛刀
- 强化C数组作为函数参数-多维数组的本质
- 常见对象_正则表达式的获取功能
- 设备树解析
- Android-详解RecyclerView+BGARefreshLayout实现自定义下拉刷新、上拉加载和侧滑删除效果
- ARM第三天(LED下、蜂鸣器上)
- jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
- Python 外部函数调用库ctypes简介
- QUTOJ 1357:小E与计算器 暴力搞
- Struts2框架(五)
- 如何正确反编译apk
- 命令模式Command Pattern C++
- IntelliJ IDEA 常用设置讲解
- SESSION是否依赖COOKIE问题总结