您的位置 首页 国产IC

ARM裸机程序——跑马灯

最近看了一些启动代码的分析,还有很多不懂的地方,打算后面再写关于启动代码的分析。先跑了一些无操作系统裸机程序,来熟悉硬件。开发板用…

最近看了一些发动代码的剖析,还有许多不明白的当地,计划后边再写关于发动代码的剖析。先跑了一些无操作系统裸机程序,来了解硬件。开发板用的是FL2440。

先看这样一段C代码

#define GPBCON (*(volatile unsigned long *)0x56000010) //这是存放器的界说,由于GPB引脚在硬件上衔接到了LED上,所以用到GPB引脚,那么就要界说相关存放器,该存放器界说了GPB相关引脚的工作方式。
#define GPBDAT (*(volatile unsigned long *)0x56000014) //该存放器用来给引脚上的数据。

int main()
{
GPBCON=0x00000400;
GPBDAT=0x00000000;

return 0;

}

这是完好的跑马灯程序。GPBUP为上拉使能存放器,在运用管脚过程中,一般界说为使能无效。

程序最初的地址声明今后能够界说为#include “2440addr.h”, 这2440addr.h文件包含了arm中所有的存放器地址的界说。


/* 地址声明 */
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPBUP (*(volatile unsigned long *)0x56000018)

/* 变量声明 */
#define uint unsigned int

#define LED0_ON() (GPBDAT &= ~(1<<5))
#define LED1_ON() (GPBDAT &= ~(1<<6))
#define LED2_ON() (GPBDAT &= ~(1<<8))
#define LED3_ON() (GPBDAT &= ~(1<<10))

#define LED0_OFF() (GPBDAT |= (1<<5))
#define LED1_OFF() (GPBDAT |= (1<<6))
#define LED2_OFF() (GPBDAT |= (1<<8))
#define LED3_OFF() (GPBDAT |= (1<<10))

/* 函数声明 */
void Delay(uint);

/* 推迟函数 */
void Delay(uint x)
{
uint i,j,k;
for(i=0;ifor(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}

/* 主函数 */
int Main(void)
{
GPBCON = (1<<(5*2)) | (1<<(6*2)) | (1<<(8*2)) | (1<<(10*2));//将LED0、LED1、LED2、LED3的相关引脚都设置为输出
GPBUP = 0xff;
GPBDAT = (1<<5)| (1<<6) | (1<<8)| (1<<10);
while(1)
{
LED0_ON();
Delay(30);
LED0_OFF();
LED1_ON();
Delay(30);
LED1_OFF();
LED2_ON();
Delay(30);
LED2_OFF();
LED3_ON();
Delay(30);
LED3_OFF();
Delay(30);
}
return 0;
}

这里边还一些软件相关装备的问题就不说了。还有便是我用的发动代码把MMU相关内容悉数刊出掉了,由于裸机程序还用不到。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/274448.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部