×
单片机 > 单片机程序设计 > 详情

ARM11——点亮LED灯

发布时间:2024-05-19 发布时间:
|

首先你得有三星公司提供的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("rnrn"); //通过串口来打印消息,


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(){}的框架,结果我的程序就能用了,我也不知道为什么,可能还是我的程序其它地方有问题吧。这个方法仅供参考。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会