S 3 C 2440-GPIOとjlink構成
s 3 c 2440は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の構成プロセスがkeil 4を開き、新しいプロジェクトを開き、samsungの下のs 3 c 2440 Aプロジェクトを選択した後、「確定」を選択して起動ファイルをロードし、s 3 c 2440.sを開いて修正する
CLOCK_SETUP EQU 1
次にconfiguretion wizardを開いてすべてのcomboxをチェックします
以下はjlinkダウンロードの構成でoption for target 1を開き、ROM 1:0 x 00 x 100000 x 100000 startup 2をチェックし、RAM 1をチェックし、:0 x 300000 x 200000 x 200000 OUTPUT 1をチェックし、create HEX LInker 1をチェックし、Report migjt fail coxxxxx 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->s 29 GL 016 flash 2 M 3,j-link/j-tracemを選択
以下はjlinkデバッグの構成でoption for target 1を開き、ROM 1:0 x 3000000 x 10000000 x 10000000 2、RAM 1:0 x 3100000 x 10000000をチェックします.
コード#コード#
CLOCK_SETUP EQU 1
次にconfiguretion wizardを開いてすべてのcomboxをチェックします
以下はjlinkダウンロードの構成でoption for target 1を開き、ROM 1:0 x 00 x 100000 x 100000 startup 2をチェックし、RAM 1をチェックし、:0 x 300000 x 200000 x 200000 OUTPUT 1をチェックし、create HEX LInker 1をチェックし、Report migjt fail coxxxxx 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->s 29 GL 016 flash 2 M 3,j-link/j-tracemを選択
以下はjlinkデバッグの構成でoption for target 1を開き、ROM 1:0 x 3000000 x 10000000 x 10000000 2、RAM 1:0 x 3100000 x 10000000をチェックします.
コード#コード#
/* 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;
}