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