首先你得有三星公司提供的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(){}的框架,結果我的程序就能用了,我也不知道爲什麼,可能還是我的程序其它地方有問題吧。這個方法僅供參考。