이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 7780|회답: 0

지그비 여정 (4): 여러 중요한 CC2430 기본 실험 - 타이머 중단

[링크 복사]
게시됨 2014. 10. 30. 오후 11:17:29 | | | |
1. 상하층 연결

이전 글에서는 간단한 외부 인터럽트의 구현에 대해 함께 배웠습니다. 인터럽트에 대한 실습 경험을 쌓았으니, 이 섹션에서는 타이머 인터럽트에 대해 이야기해 보겠습니다. CC2430에는 총 4개의 타이머가 있으며, 타이머 1, 타이머 2, 타이머 3/4(3과 4의 사용법은 동일)의 3가지 범주로 나눌 수 있습니다.

저자도 CC2430 초보이며 타이머 관련 프로젝트에 대한 실무 경험이 거의 없기 때문에, 타이머를 깊이 분석할 생각은 없고 할 수도 없습니다. 이 글에서는 카운트 오버플로우 인터럽트에서 타이머 1의 사용에 대한 간단한 실험적 탐구만 제공하며, 입력 캡처/출력 비교/PWM 기능에 대해서는 언급하지 않습니다. 타이머 2와 타이머 3/4는 단순한 함수 소개일 뿐입니다. 저자의 실력이 일정 수준에 도달하면, 저는 지그비의 실무 경험 정점에 서서 이 에세이를 개선하겠습니다.

2. 타이머 1

타이머 1은 타이머/카운터/펄스 폭 변조가 가능한 16비트 타이머입니다. 3개의 개별 프로그래밍 가능한 입력 캡처/출력 비교 채널을 갖추고 있으며, 각각은 PWM 출력이나 입력 신호를 캡처하는 엣지 타임으로 사용할 수 있습니다(입력 캡처/출력 비교가 무엇인지, PWM 출력 구현 방법에 대해서는 CC2430 중국 매뉴얼을 참고할 수 있습니다).

타이머는 매우 중요한 개념을 가지고 있습니다:작동 방식

작동 모드는 다음과 같습니다: 자유 작동 모드 (프리러닝몰드 모드 (모듈로) 및 양의 카운트다운 모드(업-다운)。

다음은 3가지 모드 도입을 위한 CC2430 중국 매뉴얼의 발췌문입니다:



세 모드를 비교해 보면, 자유 연산 모드의 오버플로우 값이 0xFFFF 변경할 수 없음을 알 수 있습니다; 나머지 두 모드는 T1CC0에 값을 할당하여 타이머의 오버플로우 값을 정밀하게 제어할 수 있게 합니다. 이 실험은 이 기능을 이용해 특정 T1CC0를 통해 타이머가 매 1초마다 인터럽트를 트리거하여 LED 조명의 깜빡임 간격을 1초로 정확히 제어합니다.

(1) 실험 소개

타이머의 모듈로 모드에서는 LED 불빛의 깜빡임 간격이 1초로 정밀하게 제어되며, 밝은 0.5초→ 어두운 0.5초→ 밝은 0.5초→ 어두운 0.5초...... → 밝은 0.5초→ 어둠은 0.5초(즉, 어둠에서 밝음까지의 시간 간격은 1초입니다). 빛/암흑 반전은 넘치는 인터럽트에 의해 이루어집니다.

(2) 프로그램 플로우차트

(3) 관련 계산

앞서 언급했듯이, LED 조명 상태는 밝기 0.5초 → 어두운 0.5초 → 밝은 0.5초 → 어두운 0.5초 ...... → 0.5초 빛 → 0.5초 어둠 신호를 사용하며, 오버플로우 인터럽트를 통해 구현해야 하므로 타이머의 오버플로우 주기는 0.5초여야 합니다. 이를 위해 해당 오버플로우 값을 계산해야 합니다(임시로 N으로 설정).

시스템 클럭 주파수는 32MHz로 선택되며, 기본적으로 주어진 클럭 주파수는 16MHz입니다(두 주파수 모두 특수 기능 레지스터에 의해 결정됩니다).CLKCON자세한 내용은 CC2430 중국 매뉴얼을 참고하시기 바랍니다.

타이머 1의 경우, 시계 크로스오버를 128 디비전으로 설정하세요.

요약하자면, 목록은 다음과 같습니다:

N=62500을 찾으려면 16진수가 0xF424 되어 T1CC0H=0xF4, T1CC0L=0x24 를 설정해야 합니다.

(4) 실험적 소스 코드 및 분석/*
    실험 설명: 타이머 타이머 실험, 타이머 카운트 오버플로우, LED1 깜빡임
*/

#include

#define 이끄는 1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
공허xtal_init(공허)
{
  잠 &= ~0x04;            //都上电
  반면(! (잠 그리고0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            32MHz 크리스털 발진기를 선택하세요
  잠 |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
공허led_init(공허)
{
  P1SEL =0x00;            P1은 일반 I/O 포트입니다
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3 출력
  
  LED1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  LED4 =1;
}

/*T1初始化
-------------------------------------------------------*/
공허timer1_init(공허)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 크로스오버; 모듈로 모드(0x0000->T1CC0); 달리기 시작해;
  T1IF=0;           방해 표지판을 치워  
}

/*主函数
-------------------------------------------------------*/
공허주요(공허)
{
  xtal_init();
  led_init();
  timer1_init();

  반면(1);            //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma 벡터=T1_VECTOR
__interrupt공허T1_ISR(공허)
{
  EA=0;               //关中断
  
  led1 = !led1;      //LED灯反转

  EA=1;               //开中断
  
  T1CTL &= ~0x10;     //清中断标志
}

좋아요, 프로그램을 컴파일하고 온라인으로 디버그하세요. 개발판의 LED1은 예정대로 깜빡이고, 깜빡임 간격이 약 1초 정도인 것 같습니다. 하지만 이것만으로는 실험의 성공을 증명하기에 부족합니다. 간격이 엄격히 1로 결정된다면 완벽할 것입니다~ 그래서 WIN 7의 시계를 켰습니다(작업 표시줄 오른쪽에 있는 시간을 클릭하세요). 초침을 보던 중, 그는 옆눈으로 LED1이 깜빡이는 것을 보았다. 결과: 2분 이내에 두 곡의 속도가 거의 똑같아집니다(이 정밀도는 참을 만합니다~). 이 시점에서 실험은 사실상 완료된 셈이죠, 헤헤~

3. 타이머 2

타이머 2라고도 불립니다MAC 타이머는 IEEE 802.15.4 MAC에서 이벤트 추적 프로토콜을 지원하도록 특별히 설계되었습니다. 타이머에는 발생한 사이클 수를 기록할 수 있는 8자리 오버플로우 카운터가 있습니다; 프레임이 수신/송수신을 시작하거나 전송이 완료되는 정확한 시간을 기록하는 16비트 캡처 레지스터가 있습니다. 또한 특정 시점에 무선 모듈로 다양한 명령 게이팅 신호(수신 시작, 전송 시작 등)를 생성하는 16비트 출력 비교 레지스터가 포함되어 있습니다.

4. 타이머 3/4

타이머 3/4는 타이머/카운터/PWM 기능을 갖춘 8비트 타이머입니다. T3/T4는 2개의 출력 비교 채널을 가지고 있으며, 각각 PWM 출력으로 사용할 수 있습니다.

5. 결론

이 섹션에서는 주로 타이머 1의 카운트 오버플로우 인터럽트 방법을 배우고, LED 점멸 간격 1의 정밀한 제어를 구현합니다. 몇 개의 타이머는 그냥 한 번의 일이고, 나중에 다시 추가할게요. 다음 섹션에서는 CC2430 직렬 포트 통신을 소개하겠습니다.






이전의:지그비 여정 (3): 여러 중요한 CC2430 기본 실험 - 외부 중단
다음:지그비 여정 (5): 여러 중요한 CC2430 기본 실험 - 직렬 통신
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com