`

GPIO学习笔记

阅读更多

用汇编点亮一个led

1看原理图GPK4=0,ledGPK4=1led

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]

/*设置GPKDATGPK4输出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]

/*设置GPKDATGPM4输出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学习笔记

    STM32-GPIO学习笔记

    stm3211的GPIO学习笔记.pdf

    。。stm3211的GPIO学习笔记.pdf

    stm3211的GPIO学习笔记讲课教案.docx

    。。stm3211的GPIO学习笔记讲课教案.docx

    stm3211的GPIO学习笔记讲课教案.pdf

    。。stm3211的GPIO学习笔记讲课教案.pdf

    STM8-库函学习笔记之GPIO.pdf

    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模块

    本篇CSL学习笔记将聚焦于GPIO模块在C55x DSP系列中的应用。 首先,GPIO模块的设计目的是为了核心控制C55x器件中未复用和地址GPIO引脚的功能。这些引脚可以被配置为输入或输出,以适应不同的系统需求。C55x系列包括C...

    LM3SLib_GPIO使用笔记.pdf

    通过对LM3SLib_GPIO使用笔记的深入学习,不仅可以掌握LM3SXX系列微控制器中GPIO的使用方法,还能了解其内部结构和工作原理,这对于从事嵌入式系统开发的专业人士来说是非常宝贵的知识资源。此外,熟练掌握GPIO的操作...

    树莓派学习笔记——wiringPi GPIO使用详解.docx

    《树莓派学习笔记——wiringPi GPIO使用详解》 在树莓派的探索与学习过程中,GPIO(General Purpose Input/Output)接口是极其重要的部分,它允许我们直接与外部硬件进行交互。wiringPi是一个专为树莓派设计的C语言...

    STM32学习笔记 — 之GPIO端口篇

    学习STM32的基本步骤之一是从通用输入输出(GPIO)端口开始。 GPIO端口是STM32微控制器上不可或缺的部分,它们提供了微控制器与外部世界交互的物理接口。每一个GPIO端口实际上都是一组独立的引脚,每个引脚都可以...

    超经典的STM32学习笔记——第一章GPIO口.docx

    STM32学习笔记——GPIO口配置函数详解 STM32学习笔记的第一章节中介绍了与GPIO口相关的函数,这些函数主要用于配置和操作GPIO口。这些函数包括GPIO_Init、GPIO_ReadInputDataBit、GPIO_ReadInputData、GPIO_...

    Raspberry Pi 学习笔记之GPIO端口输出

    这个"Unit2_BlinkLED"项目可能包含了完成上述步骤的源代码文件,供你参考和学习。通过理解并实践这个项目,你可以进一步掌握树莓派的GPIO编程,为未来更复杂的物联网应用打下坚实基础。同时,这也展示了C#在嵌入式...

    Linux学习笔记13-GPIO 中断实验例程

    Linux学习笔记13---GPIO 中断实验例程

    利用STM32F103ZET6开发板基于HAL库的STM32学习笔记一:GPIO开发基础例程

    在本文中,我们将深入探讨如何使用STM32F103ZET6开发板进行GPIO(通用输入/输出)的基础开发。STM32是意法半导体(STMicroelectronics...继续深入学习STM32的其他外设和功能,将有助于我们更好地利用STM32的强大性能。

    STM32学习笔记一 GPIO口.docx

    这篇STM32学习笔记主要介绍了GPIO口的寄存器配置以及使用方法。 首先,STM32的GPIO口配置涉及到多个寄存器,包括: 1. GPIOx_CRL:配置寄存器,用于设置低8路GPIO引脚的工作模式和输入输出特性。 2. GPIOx_CRH:...

    精品专题(2021-2022年收藏)CSL学习笔记第八章GPIO模块.doc

    GPIO,即通用输入/输出(General Purpose Input/Output),是微控制器中的一种基本接口,用于与外部设备进行双向通信。在C55x器件中,GPIO模块提供了对非复用和地址GPIO引脚的控制,使得开发者能够灵活地配置这些...

    STM32 F103C8T6学习笔记2:GPIO的认识-GPIO的基本输入输出-点亮一个LED.rar

    在STM32的学习过程中,GPIO(General Purpose Input/Output)是最基础也是最常用的部分,它是微控制器与外部世界交互的桥梁。 GPIO的基本概念: GPIO即通用输入输出端口,STM32F103C8T6芯片上有多个GPIO引脚,可以...

    powerpc gpio驱动

    "IBM POWERPC405 CPU LINUX下GPIO操作笔记 - 聚沙成塔 - CSDNBlog.mht"这篇文档可能详细介绍了405处理器的GPIO接口及操作步骤,包括如何读写GPIO寄存器和处理中断。 另外,对于2410的GPIO驱动开发,可能涉及的是...

    STM32寄存器学习笔记1_用GPIO输出.pdf

    ### STM32寄存器学习笔记1_用GPIO输出 #### 一、基础知识与学习动机 对于初学者而言,STM32的学习过程中往往会遇到两大路径:一是基于寄存器的操作,二是利用库函数进行开发。两种方法各有优势,但在实际项目开发...

Global site tag (gtag.js) - Google Analytics