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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章