如何看出网站用的是什么cms程序,新媒体包不包括公司网站的建设,响应式模板网站建设哪家好,网上打工赚钱的项目一、GPIO
GPIO#xff08;General-purpose input/output#xff09;即通用型输入输出#xff0c;GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连#xff0c;从而实现与外部硬件设备的通讯、控制及信号采集等功能 LED实验步骤 最终目的General-purpose input/output即通用型输入输出GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连从而实现与外部硬件设备的通讯、控制及信号采集等功能 LED实验步骤 最终目的通过GPIO这个控制器去控制引脚产生高低电平从而控制LED灯的点亮和熄灭
实验 以LED2灯 闪烁 为例
1. 通过电路原理图分析LED的控制逻辑 2. 通过电路原理图查找LED与Exynos4412的连接关系3. 通过数据手册分析GPIO中哪些寄存器可以控制LED4. 通过程序去操控对应的寄存器完成对LED的控制第一步 得出结论高电平-亮 低电平-灭 下一步要找到CHG_COK这个网络标号连接在4412芯片那一个引脚上 第二步 通过电路设计图中的网络标号CHG_COK在芯片电路设计图中可以看到连接在4412芯片上面是GPX2这一组的第七个GPX2_7控制着该引脚 这个引脚的名称为什么这么多呢因为很多引脚的功能是复用的 第三步 查看芯片手册分析哪些寄存器可以控制LED2 通过芯片手册可以看到GPX0, GPX1, GPX2, GPX3 这四组共有32个引脚那么GPX2这一组就是有8个引脚。
GPX2CON32Bit: 可以配置这一组引脚这一组有八个引脚都归这个寄存器来管理 GPX2DAT32Bit: 存储这一组引脚的相关数据 这里看到对GPX2CON这个寄存器每一位是干什么的一个详解 GPX2CON[0]这一位可以管理GPX2_0这个引脚以此类推 GPX2CON[7]这一位可以管理GPX2_7这个引脚 我们这个实验目的是想要通过GPIO这个寄存器产生一个高或低信号去控制外面的LED的点亮和熄灭所以设置成 0x Output 输出功能设置GPX2CON[7]这个寄存器的[31:28]这四位设置成0x1 设置了这四位只是将GPX2_7设置成输出功能然后输出什么信号还是控制不了的
然后得通过GPX2DAT寄存器来向GPX2CON[7]发送数据 GPX2DAT32bit高位没有用这七位每一位控制着一个引脚如果GPX2DAT第0位写零GPX2_0输出低电平写1输出高电平。 那么GPX2DAT第7位写零GPX2_7就输出低电平写1输出高电平 第四步 在相应的地址中写数据进而控制响应的寄存器
led_asm.s 文件 .text //代码的开始
_start:MAIN:BL LED_CONFIG //跳转
LOOP:BL LED_ONBL DELAYBL LED_OFFBL DELAYB LOOP/* 配置GPX2CON寄存器 */
LED_CONFIG:/* GPX2CON寄存器地址 */LDR R2, 0x11000c40/* 将GPX2CON[7]这个引脚的 [31:28]位设置成 0x1输出功能*/LDR R1, 0x10000000STR R1, [R2]MOV PC, LR/* 配置GPX2DAT寄存器 点亮*/
LED_ON:/* GPX2DAT寄存器地址 */LDR R2, 0x11000c44/* GPX2DAT第七位写0从而向GPX2CON[7]这一位发送高电平 */LDR R1, 0x00000080STR R1, [R2] MOV PC, LR/* 配置GPX2DAT寄存器 熄灭*/
LED_OFF:LDR R2, 0x11000c44LDR R1, 0x00000000STR R1, [R2]MOV PC, LR/*LED2灯 灭和亮 之间间隔的时间*/
DELAY:LDR R1, 100000000
L:SUB R1, R1, #1CMP R1, #0BNE LMOV PC, LRSTOP:B STOP.end
Makefile文件
/* 执行文件的名字 */
TARGET led-asm/* 交叉编译器的前缀 */
CROSS_COMPILE arm-none-linux-gnueabi-/* 完整的编译器名字 */
CC $(CROSS_COMPILE)gcc/* 链接文件使用的工具ld */
LD $(CROSS_COMPILE)ld/* objcopy这个工具可以将.elf文件编译成开发板可执行的文件 */
OBJCOPY $(CROSS_COMPILE)objcopy/* 编译规则 */
all:/* 编译分四步-E 预编译 -S 汇编, -c 目标文件机器码gcc 链接 *//* 写的就是汇编文件 随意直接进行 -c 形成目标文件 形成 .o 机器码*/$(CC) -c $(TARGET).s -o $(TARGET).o/* ld链接生成一个.elf可执行文件 链接的时候重定向一个地址 0x40008000 *//* -Ttext 0x40008000: 这个文件编译完成之后将来这段程序放入 0x40008000 这个地址去运行 */$(LD) $(TARGET).o -Ttext 0x40008000 -o $(TARGET).elf/* 因为开发板上面没有Linux系统.elf只能在Linux系统下运行所以需要转换成开发板可执行的文件 *//* -O 指定转换binary格式 -S 转换.elf文件 生成.bin文件 */$(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).binclean:rm $(TARGET).o $(TARGET).elf $(TARGET).bin