Embedded/ARM2011.06.21 20:30
다음 소스 코드를 컴파일 한 후 포팅해보자.

#define PIOA_PER	(*(volatile unsigned int *)0xFFFFF400)
#define PIOA_OER	(*(volatile unsigned int *)0xFFFFF410)
#define PIOA_PPUDR	(*(volatile unsigned int *)0xFFFFF460)
#define PIOA_CODR	(*(volatile unsigned int *)0xFFFFF434)
#define PIOA_SODR	(*(volatile unsigned int *)0xFFFFF430)


void LED_INIT(void)
{
	// Configure the pin in output
	PIOA_OER	= 0x00000001;
	// Set the PIO controller in PIO mode instead of peripheral mode
	PIOA_PER	= 0x00000001;
	// Disable pull-up
	PIOA_PPUDR	= 0x00000001;
}

int main(void)
{
	volatile unsigned int iCount = 0;

	LED_INIT();

	while (1)
	{
		PIOA_CODR = 0x00000001;
		for(iCount=0;1000000 >= iCount; ++iCount);

		PIOA_SODR = 0x00000001;
		for(iCount=0;1000000 >= iCount; ++iCount);

	}
	return 0;
}

포팅을 한 후에 다음과 같이 칩셋을 구성한다.



3.3 V 를 사용할 것이다. usb 케이블 선을 위를 기준으로 오른쪽 밑에서 2번째 핀이 3.3 V 의 전압 핀이다. 전선을 핀의 위치에 꽂아준다. 그리고 LED 의 Vcc 부분에 연결한다. 그리고 위의 소스에서 사용하는 핀은 왼쪽에서 맨위쪽이다. 따라서 LED 그라운드를 그 위치에 꽂아준다.

LED 의 GND 와 Vcc 부분을 구분 하는 방법을 알아보자.



LED 를 잘 살펴보면 골프채와 같은 모양으로 납짝하게 생긴 부분이 있다. 그 부분으로 핀이 나온 것이 GND 가 된다. 그리고 그에 비해 날카롭게 생긴 부분에 핀으로 나온 것이 Vcc 가 된다.



회로를 올바르게 구성하였다면 LED 가 깜박 깜박 거리는 것을 확인 할 수 있다.



왼쪽은 LED 가 꺼진 상태고 오른쪽은 LED 가 켜진 상태이다. 이를 무한으로 반복한다.



다음은 위의 소스코드를 응용하여 8개의 LED 를 하나씩 옆으로 이동하면서 불이 켜졌다 꺼졌다 하도록 수정해 보자.

#define PIOA_PER	(*(volatile unsigned int *)0xFFFFF400)
#define PIOA_OER	(*(volatile unsigned int *)0xFFFFF410)
#define PIOA_PPUDR	(*(volatile unsigned int *)0xFFFFF460)
#define PIOA_CODR	(*(volatile unsigned int *)0xFFFFF434)
#define PIOA_SODR	(*(volatile unsigned int *)0xFFFFF430)


void LED_INIT(void)
{
	// Configure the pin in output
	PIOA_OER	= 0x000000FF;
	// Set the PIO controller in PIO mode instead of peripheral mode
	PIOA_PER	= 0x000000FF;
	// Disable pull-up
	PIOA_PPUDR	= 0x000000FF;

	PIOA_SODR = 0x000000FF;
}

int main(void)
{
	volatile unsigned int iCount = 0;
	unsigned int i;

	LED_INIT();
	
	while (1)
	{
		for(i=1; 64>=i; i=i*2)
		{
			PIOA_CODR = i;
			for(iCount=0;1000000 >= iCount; ++iCount);
		
			PIOA_SODR = i;
			for(iCount=0;1000000 >= iCount; ++iCount);

		}

		for(i=128; 2<=i; i=i/2)
		{
			PIOA_CODR = i;
			for(iCount=0;1000000 >= iCount; ++iCount);
			
			PIOA_SODR = i;
			for(iCount=0;1000000 >= iCount; ++iCount);
		}
	}
	return 0;
}



")//]]>




'Embedded > ARM' 카테고리의 다른 글

LED 켜기 - 20110621  (0) 2011.06.21
Posted by 꿈을모아서

댓글을 달아 주세요