정보공간_1

[2기 대전 김호원] Concerto MCU 3.클럭 설정과 GPIO 본문

IT 놀이터/Elite Member Tech & Talk

[2기 대전 김호원] Concerto MCU 3.클럭 설정과 GPIO

알 수 없는 사용자 2012. 10. 16. 18:27

안녕하세요 대전 멤버십 21기 김호원 입니다.

저번 포스팅에서 프로젝트 생성과 환경설정에 대해서 마쳤고

이번에 포스팅 주제는 클럭 설정과 GPIO에 관련된 것으로 하겠습니다.

먼저 Concerto MCU의 클럭 설정부터 진행하겠습니다.

아래 내용의 자료들은 ti.com에서 인용 하였습니다.

 

먼저 MCU가 동작하기 위해서는 클럭이 필요합니다.

시스템의 클럭은 간단하게 다음과 같이 구성이 되어있습니다.

전체 시스템의 클럭은 다음과 같이 4-20MHz Xtal PLL로 클럭을 증가시킨 다음 나눠서 사용을 하

게 됩니다.

M3같은 경우는 최대 100MHz C28 150MHz까지 시스템 클럭을 사용 할 수 있습니다.

하지만 위에 구조를 보게 되면 PLLSYSCLK이 최대가 150MHz이지만 M3쪽으로 클럭을 나눌 수 있는 경

우가 1, 2, 4밖에 없으므로 150MHz 100MHz둘다 최대 클럭으로는 사용을 할 수가 없습니다. 아래의

표가 사용 할 수 있는 클럭의 경우에 수에 대해서 나와 있습니다.

  

 

간단하게 클럭을 설정해 보면 먼저 PLLSYSCLK

PLLSYSCLK = Fref * SYSPLLMULT /2 /SYSDIVSEL divider

다음과 같은 식으로 됩니다.

이것 대로 계산을 해보면 제가 만들 회로는 Fref를 외부 20MHz를 장착해서 사용하고 있기 때문에

150 75를 설정해야 되면 150 = 20 * SYSPLLMULT /2 /SYSDIVSEL divider 이므로

SYSPLLMULT /2 /SYSDIVSEL divider 7.5 가 되야 됩니다. SYSDIVSEL divider 1로 설정하고 나면

SYSPLLMULT 15가 되면 됩니다. 그리고 M3 C28계산한 것에 / M3SYSDIVSEL divider 이거만 추가 되므로

/ M3SYSDIVSEL divider 2가 되면 150/75가 됩니다.

클럭 설정등 기타 전체적인 MCU의 설정은 M3에서 해서 사용을 하게 됩니다.

M3부분에서 클럭을 설정하고 C28쪽에서는 하지 않습니다.

 

 

먼저 M3 75MHz C28 150으로 설정을 해보면 아래와 같은 형태가 됩니다. 위에 설명한 방법대로

 

설정을 해놓았습니다. 먼저 Xtal클럭에 * 0x0f를 해 15를 곱하고 전체 시스템 클럭은 /1해서 C28쪽에

 

주고 M3에는 /2를 해서 75로 만들어서 클럭을 주었습니다.

 

SysCtlClockConfigSet(SYSCTL_USE_PLL | (SYSCTL_SPLLIMULT_M & 0xF) |

                         SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2);

 

다음과 같이 설정을 하게 되면 100/100으로 사용이 됩니다.

 

SysCtlClockConfigSet(SYSCTL_USE_PLL | (SYSCTL_SPLLIMULT_M & 0xA) |

                         SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_1);

 

다음으로 간단하게 LED를 이용해서 GPIO를 사용 하는 방법에 대해서 진행 하겠습니다.

 

GPIO는 아래 그림과 같이 구성이 되어 있습니다. 기본적으로는 M3에서 모든 권한을 가지고 있어서

C28에서 핀을 사용하기 위해서는 M3에서 설정을 해주어야 되고 C28에서 Pull up을 사용하기 위해서

M3에서 설정을 해 주어야 합니다.

 

 

 

 

일단 RAM 부팅으로 하겠습니다. 다음 포스팅에는 RAM부팅과 Flash부팅에 대해서 설명 하겠습니다.

 

M3쪽에서는 특별한 것 없이 GPIO라이브러를 인클루드 하고 사용을 하면 됩니다.

                                                                        

저는 H PORT LED를 붙여 놓아서 이걸로 진행하겠습니다.

 

 

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH) PORT에 클럭을 주어서 사용 할 수 있도록 하고

GPIOPinTypeGPIOOutput(GPIO_PORTH_BASE, 0xff) 출력으로 설정 합니다.

GPIOPinWrite(GPIO_PORTH_BASE, 0xff, 1); 3번째 파라메터에 0을 주면 LOW가 되고 1을 주면 HIGH

됩니다.

간단하게 위의 코드를 돌려보면

테스트 보드를 제작 한지가 오래되어서 LED가 끝부분이 고장이 났네요..;

 

다음과 같이 깜박이게 동작을 하게 됩니다.

 

C28에서 핀을 사용하려면 M3에서 C28로 권한은 넘겨 주어야 합니다.

 

이런 방법으로 핀 하나씩 설정을 할 수 있고 아래처럼 할 수도 있습니다.

GPIOPinConfigureCoreSelect(GPIO_PORTH_BASE, 0xFF, GPIO_PIN_C_CORE_SELECT);

 

먼저 M3에 이 코드가 있는 소스를 다운로드 하고

 

 

 

 

 

 

 

GpioG1CtrlRegs.GPBDIR.bit.GPIO48 = 1; 사용할 Pin을 출력으로 설정

 

GpioG1DataRegs.GPBCLEAR.bit.GPIO48 = 1; 출력을 LOW로 합니다.

 

GpioG1DataRegs.GPBSET.bit.GPIO48 = 1; 출력을 HIGH로 합니다.

 

위의 사진과 동일하게 동작을 하게 됩니다.

이번 포스팅에서는 클럭 부분과 GPIO부분에 대해서 간단하게 사용을 해봤는데 다음 포스팅에는

RAM과 FLASH 부팅과 TIMER에 대해서 정리해서 올리겠습니다.