2011-11-05 2 views
0
내 MSP430의 시계를 구성하려면 다음 루틴을 사용

(msp430g2231) 마이크로 컨트롤러를 재설정 :MSP430 시계 문제는 이후

void configure_clock(void) { 
if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF) { // Checks the clock constants 
     while(TRUE); // If callibration constants are erased, TRAP! 
    } 

    BCSCTL1 |= CALBC1_1MHZ; // Sets DCO range 
    DCOCTL |= CALDCO_1MHZ; // Set DCO step and modulation 

    BCSCTL1 &= ~(XTS | XT2OFF); // Disables XT2 and sets low frequency mode 
    BCSCTL3 |= (LFXT1S_0 | XCAP_3); // Selects LFXT1 crystal with 12,5pF 

    do { 
     IFG1 &= ~OFIFG; 
     __delay_cycles(1000); 
    } while (IFG1 & OFIFG); // Waits until crystal stabilizes 

    BCSCTL2 |= (SELM_2 | SELS); // Selects SMCLK and MCLK from LFXT1CLK 
} 

문제가 처음으로이 코드를 실행 (바로 마이크로 컨트롤러를 전원을 켠 후) 모든 것이 예상대로 작동하며 32768 kHz 클럭을 얻습니다. 그러나 보드의 리셋 버튼 (MSP430 Launchpad)을 누르면 시계가 올바르게 작동하지 않는 것처럼 보입니다. 코드는 매우 천천히 (예 : 10 번 정도) 실행됩니다. 클럭 구성에 대한 아이디어가 있습니까?

감사합니다.

pere

답변

0

코드와 함께 제안 할 수있는 유일한 사항은 다음과 같습니다. 문제가 해결되었는지 여부는 모르지만 첫 번째 실행은 정상이지만 재설정 후에는 이상한 것처럼 보입니다. 다른 곳에서는 시계 설정에 액세스합니까? 재설정시 어떤 코드를 호출합니까?

항상 비트 조작을 사용하여 값을 레지스터에 포함하거나 제외합니다. 알려진 값으로 시작한 다음 비트를 조정해야합니다. 그렇지 않으면 이전 상태의 비트를 통합 할 수 있습니다. 대신 예를 들어

BCSCTL1 |= CALBC1_1MHZ; 
BCSCTL1 &= ~(XTS | XT2OFF); 

당신은 다음과 같이 수행하여 최종 값으로 설정할 수 있습니다 :

BCSCTL1 = XT2OFF | (CALBC1_1MHZ & 0x0F); 

다른 제안 XT2OFF이 XT2을 해제하기 위해 설정해야한다는 것입니다을 . 당신은 조금을 지우고 있습니다, 그래서 그것을 떠날 것입니다. 이것은 귀하의 의견과 충돌하여 오류 일 수 있습니다.

+0

감사합니다. 귀하의 제안을 시도하고 그들이 작동하는지 알려 드리겠습니다 ... –

1

먼저 전원 공급 장치 전압을 확인할 수 있습니다. 시작하는 동안 스파이크가 발생하는 경우 DCO가 작동하지 않습니다. 이 경우 BCSCTL1에 대한 값의 정렬 직전에 지연을 사용하십시오.

__delay_cycles(10000); 
    BCSCTL1 = CALBC1_1MHZ; // Sets DCO range 

이렇게하면 시동 스파이크가 억제됩니다.

다음 용의자는 타겟 보드에서 디커플링을합니다. VCC의 커패시터와 리셋에 사용 된 커패시터를 의미합니다. TI는 리셋 라인에 1nF-2nF를, VCC에 0.1uF를 권장한다. 그러나 LaunchPad를 플랫폼으로 사용하는 경우에는 문제가되지 않습니다.

또한 교정 값 할당의 경우 할당 연산자를 사용하고 논리 연산자는 사용하지 마십시오. 다른 값은 0이므로 기본값입니다.

BCSCTL1 = CALBC1_1MHZ;    // Set DCO 
    DCOCTL = CALDCO_1MHZ; 

XT2를 실행하려는 경우 G2231에서 사용할 수 없습니다. 그것의 LFXT1 직접. 32.768KHz 크리스털이 작동하려면 명시 적 초기화가 필요하지 않습니다. 전원을 켜면 작동합니다. 따라서 추가 초기화 단계가 필요하지 않습니다.

더 나은 도움말을 찾으려면 시계 설정과 관련된 소프트웨어 예제는 slac463a을 참조하십시오.