用汇编点亮一个led
1看原理图GPK4=0,led亮GPK4=1,led灭
2怎么让GPK4输出高低电平(看芯片手册,操作寄存器实现)
配置功能:输入/输出/其他
设置其输出高/低电平
3查看芯片手册
GPK4[19:16]
0000=Input 0001=Output
0010=HostI/FDATA[4] 0011=HSITXREADY
0100=Reserved 0101=DATA_CF[4]
0110=Reserved 0111=Reserved
GPKDAT在第4位写写0就对应GPK4
GPK[15:0][15:0]
Whentheportisconfiguredasinputport,thecorrespondingbitisthepinstate.
Whentheportisconfiguredasoutputport,thepinstateisthesameasthe
correspondingbit.Whentheportisconfiguredasfunctionalpin,theundefined
valuewillberead.
RegisterAddressR/WDescriptionResetValue
GPKCON00x7F008800R/WPortKConfigurationRegister00x22222222
GPKCON10x7F008804R/WPortKConfigurationRegister10x22222222
GPKDAT0x7F008808R/WPortKDataRegisterUndefined
GPKPUD0x7F00880CR/WPortKPull-up/downRegister0x55555555
RegisterAddressR/WDescriptionResetValue
WTCON0x7E004000R/WWatchdogtimercontrolregister0x8021
示例代码如下:
start.S文件
..globl_start
_start:
/*硬件的相关设置:把外设的基地址告诉cpu*/
ldrr0,=0x70000000
orrr0,r0,#0x13
mcrp15,0,r0,c15,c2,4
/*关闭看门狗*/
ldrr0,=0x7E00400
movr1,#0
strr1,[r0]
/*设置GPKCONGPK4作为输出引脚*/
ldrr1,=0x7F008800
movr0,#0x1000
strr0,[r1]
/*设置GPKDAT让GPK4输出0*/
ldrr1,=0x7F008808
movr0,#0
strr0,[r1]
halt:
bhalt
Makefile文件
led.bin:start.o
arm-linux-ld-Ttext0-oled.elfstart.o
arm-linux-objcopy-Obinaryled.elfled.bin
arm-linux-objdump-Dled.elf>led.dis
start.o:start.S
arm-linux-gcc-ostart.ostart.S-c
clean:
rm*.oled.elfled.binled.dis
编译make
将led_on.bin烧写到nandflash中,如同烧写linux类似,将led_on.bin放到images目录下
修改friendlyARM.ini
Action=install
OS=UserBin
UserBin-Image=led_on.bin
点亮四个led灯,示例代码如下:
start.S文件
.globl_start
_start:
/*硬件相关设置*/
ldrr0,=0x70000000
orrr0,r0,#0x13
mcrp15,0,r0,c15,c2,4
/*关闭看门狗*/
ldrr0,=0x7e004000
movr1,#0
strr1,[r0]
/*设置GPKCONGPK4/5/6/7作为输出*/
ldrr1,=0x7F008800
ldrr0,=0x11110000
strr0,[r1]
/*设置GPKDAT让GPM4输出0*/
ldrr1,=0x7F0088080
movr0,#0
loop:
strr0,[r1]
addr0,r0,#1
cmpr0,#16
moveqr0,#0
bldelay
bloop
delay:
movr2,#0x10000000
delay_loop:
subr2,r2,#1
cmpr2,#0
bnedelay_loop
movpc,lr
halt:
bhalt
Makefile文件同上
用c语言来实现点灯
1硬件相关设置
2调用c函数
示例代码如下:
voiddelay(){
volatileinti=0x10000000;
while(i--);
}
intmain(){
inti=0;
volatileunsignedlong*gpkcon=(volatileunsignedlong*)0x7F008800;
volatileunsignedlong*gpkdat=(volatileunsignedlong*)0x7F008808;
*gpkcon=0x11110000;
while(1){
*gpkdat=i;
i++;
if(i==16)
i=0;
delay();
}
return0;
}
.globl_start
_start:
/*硬件相关设置*/
ldrr0,=0x70000000
orrr0,r0,#0x13
mcrp15,0,r0,c15,c2,4
/*关看门狗*/
ldrr0,=0x7E00400
movr1,#0
strr1,[r0]
/*设置栈*/
ldrsp,=8*1024
blmain
Halt:
Bhalt
led.bin:start.oled.o
arm-linux-ld-Ttext0-oled.elfstart.oled.o
arm-linux-objcopy-Obinaryled.elfled.bin
arm-linux-objdump-Dled.elf>led.dis
start.o:start.S
arm-linux-gcc-ostart.ostart.S-c
led.o:led.c
arm-linux-gcc-oled.oled.c-c
clean:
rm*.oled.elfled.binled.dis
相关推荐
STM32-GPIO学习笔记
STM8-库函学习笔记之GPIO相关的函数: 1 void GPIO_DeInit(GPIO_TypeDef* GPIOx); 2 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode); 3 void GPIO_Write(GPIO_...
CSL学习笔记- 通过GPIO模块的设计以允许对C55x器件中可用的非复用和地址GPIO引脚的核心控制。
树莓派学习笔记——wiringPi GPIO使用详解.docx GPIO使用详解
STM32学习笔记GPIO口寄存器与使用
最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对GPIO口的简单介绍
STM32F103VET6摸索了很久之后终于把ARM开发板上的LED灯点亮了,虽然是很简单的一个IO口操作,但是由于以前从来都没有什么经验,所以浪费了很多时间,也查找了很多...现在可以操作IO口了,证明迈出了学习ARM的第一步。
以STM32CubeMX为依托,基于HAL库的STM32学习笔记之GPIO开发基础,使用STM32F103ZET6开发板,实现对IO口的控制
完成Raspberry Pi 树莓派3B 写入程序,控制GPIO05 PIN#29端口的LED闪烁功能
STM32寄存器学习笔记1_用GPIO输出.pdf
STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED.文章配套工程资源下载
超经典的STM32学习笔记——第一章GPIO口.docx
沁恒CH32V30X学习笔记02-GPIO的使用教程及2次封装驱动
精品专题课件(2021-2022年收藏)
cortexm36950 学习笔记部分 LCD UART GPIO 以太网 SD卡
个人总结STM32学习笔记。包括GPIO、串口、中断、定时器、DMA、fatfs、ucosII等
流水灯之于硬件学习,犹如Hello World之于软件学习。这一片文章我们继续学习DSP入门—从流水灯到GPIO
#include gpio.h #include oled0.h #include GPIO_MK60DZ10.h //写命令函数 void writecmd(unsigned char cmd) { spi_writebyte(cmd,0);//DC 0 CMD 1 DATA return; } //写数据函数 void writedata...
GPIO端口的每个位可以由软件分别配置成多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 每个I/O端口位可以自由编程,然而I/0端口寄存器...