嵌入式实验1【流水灯】

本文章为使用Elipse,使用汇编语言搭配Exynos4412实验箱进行的点亮LED,代码部分较为简单,环境配置花了很久的时间,大家可以去网络上寻找Elipse的搭建环境

      一、平台配置说明

      需要使用Elipse平台编译,需要串口和A9下载器,其中不能直接编译过去,由于实验箱是运行Linux的,需要要实现裸机开关便是还没进入到Linux过程中用串口随便发送一个信息,然后去到编写的汇编语言的main函数那即可

嵌入式实验1【流水灯】_第1张图片其中Debug需要注意其配置如下:

1、需要找到自己运行的程序,需要将C编译的elf文件加入

2、需要将编译软件添加进去和程序的初始文件

3、需要添加load代表下载,break main代表在进入到Linux过程中用串口发送信息后就跳到main函数的人口,c代表之后执行c程序

嵌入式实验1【流水灯】_第2张图片

嵌入式实验1【流水灯】_第3张图片

嵌入式实验1【流水灯】_第4张图片

       其中需要利用到串口,需要注意的是本次实验使用的波特率为115200,需要进行修改,在设备管理器中查看实验室串口的COM号进行填写,打开串口后当给实验箱上电在5s内用串口发送空格即可,则程序会跳到main函数准备执行C语言代码部分嵌入式实验1【流水灯】_第5张图片

    在串口发送信息,程序能跳到main函数后,打开BOXLAB  OpenOCD Link,可以看到debug的过程信息,不然程序无法进行。 

嵌入式实验1【流水灯】_第6张图片

 二、代码分析

    这里主要用到几个简单的函数:LED的输出端口配置、延时函数、LED端口电平输出配置和执行函数即可实现我们实验的要求,接下来让我们分析分析:

      第一个是延时函数,能够达到延时1ms的要求,延时函数在我们编写程序的时候非常常见就不过多分析了,也是非常简单的用c代码编写的

嵌入式实验1【流水灯】_第7张图片

       第二部分便是LED端口的配置,即我需要将对于LED的IO口配置为输出模式嵌入式实验1【流水灯】_第8张图片

嵌入式实验1【流水灯】_第9张图片

嵌入式实验1【流水灯】_第10张图片

嵌入式实验1【流水灯】_第11张图片

       可以看到LED四个IO口对应的端口了,通过电路图可以知道当LED端口输出高电平的时候,三极管导通,并且通过查询寄存器可以得知,当0X1的时候端口为输出模式

GPX1.CON = (GPX1.CON & ~(0xf<<(3*4)))| 1<<(3*4);   

分析这段代码:首先知道与非全一为零,有零为一,要配置GPX1_3就是第13—16位,0xf就1111左移12位那就移到了13—16位,然后与非变成了0000相当于就是复位成0000,然后在1左移12位变成了0001那就0x1配置端口变成了输出output模式

        其他的也是如此,要注意到每个LED端口,四个LED分别是GPX1_3  ,GPX1_5 ,GPXL1_1和GPXL2_3,所以在配置端口的时候要注意好就行。

       这段代码其实相当于Switch语句,传入的mask为形参,满足条件执行置高的操作,没有满足就不变,接下去便是执行语句

嵌入式实验1【流水灯】_第12张图片

     这里便是主程序,串口发送信息后会跳到main函数入口这,首先是LED的端口输出配置,下面是LED输出IO口电平配置,先发送0x00则一开始都不亮,接下去是俩个循环

【要注意的是LED只有4个,只需要看后四位的1或0即可】

其i=0时,左移0位,右移4位变成了0000 0000

其i=1时,左移1位,右移4位变成了0000 0001 就是0x01那就第一个灯亮

i=2,那就是0000 0011 那就是第一个灯和第二个灯亮

i=3 那就是 0000 0111 那就是第1、2、3个灯亮

i=4那就是0000 1111那就是4个灯都亮

i=5 那就是0001 1110 前面4个与0相与后变成了0,也就是变成了第2、3、4个灯亮

i=6那就是0011  1100 那就第3、4个灯亮

i=7那就是0111 1000那就是第四个灯亮

如何进行一个500ms的延时,继续执行下面一段循环代码,和上面一个循环是类似的

0xF0那就是1111 0000 进行右移操作,其LED亮灭和上一段分析类似,所以可以看到LED流水灯的效果:

嵌入式实验1【流水灯】_第13张图片

 实验现象如下所示:

嵌入式实验1

本次实验最主要的是环境的搭建和对汇编程序的理解

你可能感兴趣的:(嵌入式,硬件,软件,linux,嵌入式硬件)