전공 과목 이수1👨‍💻/임베디드시스템

임베디드시스템 buzzer & timer 이론 정리

천숭이 2021. 12. 22. 01:39

#  Timer
- 의미있는 정확한 주파수를 만들기 위해서는 timer 추가도입
- AP 주변 장치로서 가장 중요한 장치, 타이머가 없으면 AP(cpu) 활용이 거의 안된다.
- **주변 핵심 장치**
- Timer -> Counter -> 논리회로 -> 16bit/32bit binary couter 이진수 계수
- 이진 카운터에 플립플롭, 클럭이 필요하다
 
# 클럭 발생 방법
- 오실레이터 
 
# 분주기 활용하는 이유
- 분주기 = frequency division = prescaler
- 클럭의 기본 주파수를 가청 주파수에 맞춰야(적당하게 낮춰야) 하므로
 
# 초기값 레지스터
- 카운트 할 때는, 초기값레지스터와 타겟 레지스터가 필요!
- 카운트를 시작하는 값 (업카운트/다운카운트)
- 카운트가 끝나면 인터럽트 발생 -> cpu에게 알려서 cpu가 다른 일 할 수 있도록
- 만약 중간에 멈추고 싶다면 타겟 레지스터 을 적용. 도달값과 counter 상태와 비교하면서 인터럽트 발생
- 초기값 적재 = loda register
 
- Timer는 시간을 재는 과정을 반복하는 경우가 많음. reload의 경우가 많음
 
# Timer 동작 순서

 

Timer -> Buzzer -> Melody (음계 + 음길이)

# PWM (pulse width modulation)
- 주파수 변화시키지 않고 펄스의 폭을 조작하며 high/low 조절하는 방식
- duty cycle : 주기에서 1이 차지하는 비율

# WDT
- 일정한 시간 기다리는 작업
 
# 타이머 컨트롤러 GPTCTL
- 1로 설정하면 일정 시점이 되었을때 출력이 반전된다. 
- 타이머 start : 초기화 설정이 끝난후 enable 시켜서 타이머를 활성화 시키고 카운팅 시작
 
# GPTMTAMR
- timer mode 설정하는 레지스터
- pwm mode enable / 반복적으로 사용하는 mode 설정
 
# GPTMTAPR
- 분주기의 값을 설정
 
# GPTMTAILR / GPTMTMATCHR
카운터 초기값 레지스터 / 타겟 레지스터
 
# Timer init()에 대한 내용 (타이머 초기화과정)
- 부저 13페이지
- WDTLOAD : count 값
- WDTVALUE : WDT의 현재 count value를 저장
- pwm, wdt 동작
 
# Buzzer_Play
- 초기값 freq을 인자로 받고 freq/2를 타겟값으로 잡고 계속해서 반씩 다운 카운팅