2.7 Pulse-Width Modulator (PWM)
2.7.1 Introduction
PWM(Pulse-Width Modulator: 펄스 폭 변조기)에는 16비트 카운터가 있으며, 저장된 샘플 오디오 이미지에서 사운드를 생성하고 톤을 생성하도록 최적화되어 있다. PWM은 백라이트에 대한 제어도 제공한다.
PWM은 16비트 해상도를 가지며 4x16 데이터 FIFO를 사용하여 사운드를 생성한다. 소프트웨어 모듈은 권한이 있는 사용자가 적절한 듀티 사이클로 PWM Output(PWMO) 신호로 백라이트를 컨트롤할 수 있도록 하는 Linux 드라이버로 구성되어 있다.
2.7.2 Hardware Operation
아래 그림은 PWM 블록 다이어그램을 보여준다.
PWM은 프로세서 코어와 인터페이스하기 위해 IP Bus 프로토콜을 따른다. Clock Control Module (CCM)의 클럭 및 리셋 입력과 프로세서 인터럽트 핸들러에 대한 입터럽트 신호를 제외하고 디바이스 내부의 다른 모듈과 인터페이스하지 않는다. PWM에는 단일 외부 출력 신호인 PWMO가 포함된다. PWM에는 다음과 같은 내부 신호가 포함된다.
- 3개의 클럭 입력
- 4개의 인터럽트 라인
- 하나의 하드웨어 리셋 라인
- 4개의 저전력과 디버그 모드 신호
- 4개의 스캔 신호
- 표준 IP 슬레이브 버그 신호
2.7.3 Clocks
프리스케일러에 공급하는 클럭은 다음 중에서 선택할 수 있다:
- High frequency clock - CCM에서 제공. PWM은 저전력 모드에서 이 클럭에서 실행될 수 있다.
- Low reference clock - CCM에서 제공되는 32KHz 낮은 레퍼런스 클럭. PWM은 저전력 모드에서 이 클럭으로 실행될 수 있다.
- Global functional clock - 일반적인 작동용. 저전력 모드에서 이 클럭은 끌 수 있다.
클럭 입력 소스는 PWM 컨트롤 레지스터의 CLKSRC 필드로 결정된다. CLKSRC 값은 PWM이 비활성화일 때에만 변경되어야 한다.
2.7.4 Software Operation
PWM 디바이스 드라이버는 전원 소스에 대해 일련의 펄스 폭을 변경하여 로드로 전송되는 전력의 양을 줄인다. PWM의 한 가지 일반적이고 효과적인 사용법은 가변 듀티 사이클로 QVGA 패널의 백라이트를 컨트롤하는 것이다.
아래 테이블은 소스 코드의 인터페이스 함수를 요약한 것이다.
Table 18. PWM Driver Summary
Function | Description |
---|---|
struct pwm_device *pwm_get(struct device *dev, const char *con_id) | PWM 디바이스 조회와 요청 |
void pwm_put(struct pwm_device *pwm) | PWM 디바이스 반환 |
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | PWM 디바이스 구성 변경 |
int pwm_enable(struct pwm_device *pwm) | PWM 토글 출력 시작 |
int pwm_disable(struct pwm_device *pwm) | PWM 토글 출력 정지 |
클럭 소스 옵션, PWM 출력 신호의 주기와 듀티 사이클을 포함한 PWM 모듈에 대한 대부분의 구성 작업을 pwm_config() 함수는 포함한다. 로컬 기능 클럭은 변경될 수 있으므로, 로컬 기능 클럭보다 PWM 모듈의 주변 기기 클럭을 선택하는 것이 좋다.
2.7.5 Driver Features
PWM 드라이버에는 다음 소프트웨어와 하드웨어 지원이 포함된다:
- 듀티 사이클 변조
- 다양한 출력 간격
- 두 가지 전원 관리 모드 - 완전 켜짐과 완전 꺼짐
2.7.6 Source Code Structure
Table 19. PWM Driver Files
File | Description |
---|---|
drivers/pwm/pwm.h | 함수 선언 |
drivers/pwm/pwm-imx.c | i.MX PWM 함수 |
2.7.7 Menu Configuration Options
메뉴 구성에서 다음 모듈을 활성화한다:
- Device Drivers > Pulse-Width Modulation (PWM) Support > i.MX PWM support
- 백라이트 드라이버를 활성화하려면 다음 옵션을 선택한다:
Device Drivers > Graphics support > Backlight & LCD device support > Generic PWM based Backlight Driver