S3C2440-GPIO和jlink配置

s3c2440有130多個GPIO口,且分爲9個組,
GPX( A,B,C,D,E,F,G,H,I,J)
對應的操作寄存器名稱是
GPXCON //設置IO口的工作方式 00-輸入,01-輸出,10-特殊功能,11-保留(兩位表示一根引腳線)
GPXDAT //IO口是輸入:讀取引腳的高低電平,輸出:設置高低,特殊:不能用
GPXUP //設置引腳的內部上拉電阻,0使用內部上拉,1,不使用內部上拉,(GPA沒有上拉)
其中GPACON只能用於輸出,因爲他外接的是Adress引腳。 0輸出,1,地址
接下來是keil配置jlink的配置過程
打開keil4,新建工程,選擇samsung下面的s3c2440A工程
然後選擇確定和確定載入啓動文件,
打開s3c2440.s修改

CLOCK_SETUP EQU 1

然後打開configuretion wizard勾選全部combox

下面是通過jlink下載的配置
打開option for target
1,勾選ROM1:0x0 0x1000000 勾選startup
2,勾選RAM1,:0x30000000 0x2000000
OUTPUT
1,勾選create HEX
LInker
1,勾選Report migjt fail coxxxxxx
Debug
1,勾選Use j-link/j-TRACE
2,反勾選LOAD Application at Startup
3,在initializetion file中瀏覽到Ext_RAM.ini
4,j-link 右邊的settings->auto Selection
Utilities
1,反勾選UPdate Target before Debugging
2,settings->add->s29GL016 flash 2M
3,選擇j-link/j-Tracem

下面是通過jlink調試的配置
打開option for target
1,勾選ROM1:0x30000000 0x1000000
2,勾選RAM1,:0x31000000 0x1000000

代碼

/*
time:2016-03-29,
change:創建文件,GPIO.c  GPIO.h
auther:wxc
*/


#include <S3C2440.H>

#define uint_8 unsigned char
#define uint_32 unsigned int
#define GPIO volatile unsigned long*

#define OUT 1
#define IN 0
#define false 0
#define true 1



#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
/*
功能:
參數:
返回:
*/

/*
功能:延時函數
參數:延時時間
返回:無
*/
void delay_ms(uint_32 time)
{
    int j= 5000;
    for(;time>0;time--)
    {
        for(;j>0;j--)
        ;
    }   
}

/*
功能:設置引腳方向
參數:GPx引腳類型,con 引腳方向,flag引腳值
返回:是否設置成功
*/
int GPIO_CON(GPIO GPx,int con,int flag)
{
    if(flag<0||flag>16)
    {
        return false;
    }       

    *GPx |= con<<(flag*2);
    return true;
}
/*
功能:獲取引腳值
參數:GPx引腳類型,flag引腳值
返回:返回數據
*/
int getGPIO_DAT(GPIO GPx,int flag)
{
    return (*GPx&(1<<flag))>>flag;
}


/*
功能:設置引腳值
參數:GPx引腳類型,con引腳值,flag引腳位置
返回:設置成功
*/
int setGPIO_DAT(GPIO GPx,int con,int flag)
{
    if(con>2)
    {
        return false;
    }
    if(con == OUT)
        *GPx = (*GPx|(1<<flag));
    else
        *GPx = (*GPx&~(1<<flag));      
    return true;
}
//點個燈玩玩
int main()
{   
    int ledIndex = 5;
    int bool=0;
    bool = GPIO_CON(&GPBCON,OUT,5); 
    bool = GPIO_CON(&GPBCON,OUT,6);
    bool = GPIO_CON(&GPBCON,OUT,7);
    bool = GPIO_CON(&GPBCON,OUT,8);
//  GPBCON = GPB5_out;

    while(1)
    {
//      GPBDAT &= ~(3<<5);
        bool = setGPIO_DAT(&GPBDAT,1,ledIndex);     
        delay_ms(10000);
        bool = setGPIO_DAT(&GPBDAT,0,ledIndex);
//      setGPIO_DAT(GPBCON,0,ledIndex);     
        delay_ms(10000);
        if(ledIndex++>8)
        {
            ledIndex = 5;
        }           
    }
    return false;

}





















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