如何禁止ip访问网站,桂林市建设局网站,门户网站建设ppt方案,详情页生成器以下内容源于朱有鹏嵌入式课程的学习与整理#xff0c;如有侵权请告知删除。 一、LED物理特性介绍 LED本身有2个接线点#xff0c;一个是LED的正极#xff0c;一个是LED的负极。 LED的功能就是亮或者不亮#xff0c;只需要给LED的正极加电压即可点亮LED#xff0c;去掉电压…以下内容源于朱有鹏嵌入式课程的学习与整理如有侵权请告知删除。 一、LED物理特性介绍 LED本身有2个接线点一个是LED的正极一个是LED的负极。 LED的功能就是亮或者不亮只需要给LED的正极加电压即可点亮LED去掉电压则熄灭。 二、X210开发板的LED硬件接法 查阅原理图发现开发板上一共有5颗LEDD22、D23、D24、D25、D26。 其中D26的正极接5V负极接地因此这颗LED只要上电就会常亮分析得知这颗LED是电源指示灯。 剩下4颗LED的正极接3.3V负极接了SoC上的一个引脚GPIO具体接法是 D22GPJ0_3 D23GPJ0_4 D24GPJ0_5 D25PWMTOUT1(GPD0_1) 因为D22~D25的正极已经接了3.3V而负极接在SoC的引脚上因此可以通过SoC中编程来控制负极的电压值。只要负极输出低电平这样在正负极上就会有电压差LED即可点亮。 三、S5PV210的GPIO相关的寄存器
1、GPIO的含义 GPIO是“general purpose input output”的缩写中文意思是“通用输入输出”。 GPIO其实就是芯片的一些引脚芯片上的引脚有些不是GPIO只有一部分是作为GPIO的这类引脚其功能和特点是可以被编程控制它的工作模式也可以编程控制它的电压高低等。 通过之前的分析可知X210开发板在设计电路时把LED接在了GPIO上这样一来就可以通过编程控制GPIO的模式和输入输出值来操控LED的亮灭。如果把LED接在非GPIO上那就不行。 2、GPIO相关的寄存器 要操作GPIO必须设置它们的寄存器关于GPIO的部分在数据手册的Section2.2中。 查阅数据手册可知GPJ0相关的寄存器有 GPJ0CONGPJ0控制寄存器用来配置各引脚的工作模式。GPJ0DAT当引脚配置为input/output模式时寄存器的相应位和引脚的电平高低相对应。GPJ0PUDpull up down控制引脚内部弱上拉、下拉。GPJ0DRVdriver配置GPIO引脚的驱动能力。GPJ0CONPDN低功耗模式下的控制寄存器。GPJ0PUDPDN低功耗模式下的上下拉寄存器。这里重点地说明两个主要的寄存器GPJ0CON和GPJ0DAT。 1GPJ0CON寄存器 由寄存器的内容可知GPJ0CON寄存器每4bit控制一个GPIO引脚比如bit[31:28]控制GPJ0_7这个GPIO。 1GPJ0DAT寄存器 由寄存器的内容可知当端口被配置成输入输出模式时GPJ0DAT寄存器bit0~bit7对应着输入或者输出的值。 三、编程实践 1、实践一之点亮LED灯 第一步操控GPJ0CON寄存器中选中output模式。 第二步操控GPJ0DAT寄存器相应的位设置为0。 代码如下所示这个实验是点亮D22、D23、D24这三个LED灯。 _start:// 第一步把0x11111111写入0xE0200240(GPJ0CON)位置ldr r0, 0x11111111 ldr r1, 0xE0200240 str r0, [r1]// 第二步把0x0写入0xE0200244(GPJ0DAT)位置ldr r0, 0x0ldr r1, 0xE0200244str r0, [r1] // 把0写入到GPJ0DAT寄存器中则引脚即输出低电平LED点亮// 下面两行写了一个死循环。因为裸机程序是直接在CPU上运行的CPU会
// 逐行运行裸机程序直到CPU断电关机。如果我们的程序所有的代码都
// 执行完了CPU就会跑飞跑飞以后是未定义的所以千万不能让CPU
// 跑飞不让CPU跑飞的办法就是在我们整个程序执行完后添加死循环
flag:b flag 2、实践二之LED灯闪烁 代码如下所示。 #define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244.global _start // 把_start链接属性改为外部这样其他文件就可以看见_start了
_start:// 第一步把所有引脚都设置为输出模式代码不变ldr r0, 0x1111111// 从后面的可以看出用的是ldr伪指令因为需要编译器来判断ldr r1, GPJ0CON// 这个数是合法立即数还是非法立即数。一般写代码都用ldr伪指令str r0, [r1]// 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去flash:// 第二步全部点亮ldr r0, ((03) | (04) | (05)) // 清清楚楚的看到哪个灭哪个是亮ldr r1, GPJ0DATstr r0, [r1] // 把0写入到GPJ0DAT寄存器中引脚即输出低电平LED点亮// 第三步延时bl delay // 使用bl进行函数调用// 第四步全部熄灭ldr r0, ((13) | (14) | (15)) // 清清楚楚的看到哪个灭哪个是亮ldr r1, GPJ0DATstr r0, [r1] // 第五步延时bl delayb flash// 延时函数函数名delay
delay:ldr r2, 9000000ldr r3, 0x0
delay_loop: sub r2, r2, #1 //r2 r2 -1cmp r2, r3 // cmp会影响Z标志位如果r2等于r3则Z1bne delay_loop //bne是不相等则跳转mov pc, lr // 函数调用返回3、实践三之LED流水灯 代码如下所示。 #define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244.global _start
_start:// 第一步把所有引脚都设置为输出模式代码不变ldr r0, 0x11111111 ldr r1, GPJ0CON str r0, [r1] // 要实现流水灯只要在主循环中实现1圈的流水显示效果即可
flash:// 第1步点亮LED1其他熄灭//ldr r0, ((03) | (14) | (15))ldr r0, ~(13)ldr r1, GPJ0DATstr r0, [r1] // 然后延时bl delay // 使用bl进行函数调用// 第2步点亮LED2其他熄灭 ldr r0, ~(14)ldr r1, GPJ0DATstr r0, [r1] // 然后延时bl delay // 使用bl进行函数调用// 第3步点亮LED3其他熄灭 ldr r0, ~(15)ldr r1, GPJ0DATstr r0, [r1] // 然后延时bl delay // 使用bl进行函数调用b flash// 延时函数函数名delay
delay:ldr r2, 9000000ldr r3, 0x0
delay_loop: sub r2, r2, #1 //r2 r2 -1cmp r2, r3 // cmp会影响Z标志位如果r2等于r3则Z1不相等则Z0bne delay_loop // bne指令判断Z是否等于0Z等于0则执行delay_loopmov pc, lr // 函数调用返回