ARM11——点亮LED灯

 

首先你得有三星公司提供的startup.s文件,用来初始化并通过跳转进入main()函数

使用软件:ADS1.2

使用JLINK调试

 

//使用加入头文件,

//以下头文件中包含了6410的寄存器的定义

#include "s3c6410_addr.h"

//#include "utils.h"       //用来使用Uart_Printf函数

 

//配置LED灯亮暗的数据

//这里你得知道你的LED灯所在的具体引脚位置,例:GPK4-GPK7

//输出低电平点亮LED

#define LED1_ON ~(1<<4)

#define LED2_ON ~(1<<5)

#define LED3_ON ~(1<<6)

#define LED4_ON ~(1<<7)

#define LEDALL_ON ~(0xf<<4)

 

#define LED1_OFF (1<<4)

#define LED2_OFF (1<<5)

#define LED3_OFF (1<<6)

#define LED4_OFF (1<<7)

#define LEDALL_OFF (0xf<<4)

 

//使用到的函数声明

void delay(int times);

void LedPortInit(void);

void LedRun(void);

 

//主函数

void _main(void)

{

    //Uart_Printf("\r\n<**********开始*************>\r\n");  //通过串口来打印消息,

    LedPortInit();      //端口初始化

    LedRun();         //运行LED

}

 

//延时函数

void delay(int times)

{

         int i;

         for(;times>0;times--)

         for(i=0;i<3000;i++);

}

 

 

//初始化LED

//首先得知道如何配置GPIO端口

//配置寄存器GPxCON:控制输入输出

//数据寄存器GPxDAT:存放数据

 

void LedPortInit(void)

{

         unsigned long int uConValue;   //ARM是32位的,所以需要定义长整形

         uConValue=rGPKCON0;

         uConValue &= ~(0xffff<<16);    //GPK4-7在GPKCON0寄存器的高位

         uConValue |=0x1111<<16;     //把端口配置成输出模式

         rGPKCON0=uConValue;

}

 

 

//led全亮全灭程序

void LedRun(void)

{

while(1)

{

         rGPKDAT&=LEDALL_ON;  //对寄存器赋值,使其亮灭

         delay(1000);

         rGPKDAT|=LEDALL_OFF;

         delay(1000);

}

}

 

现在你可以使用JLINK调试了

我是在mini6410的开发板上进行调试的。

至于调试软件的配置等参考其他文章吧

 

 

可能遇到的问题:

报错:failed to single step. CPU did not halt on breakpoing

原因:可能是startup.s中的跳转语句 b main 出现问题,无法跳转到我们的main函数中

解决:我没找到解决方法,但是我有一个现成可用的工程,我把C文件中的全部内容都换成了自己的,只保留了 main(){}的框架,结果我的程序就能用了,我也不知道为什么,可能还是我的程序其它地方有问题吧。这个方法仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值