24.01.10
디지털 신호를 통해 아날로그 신호와 유사한 신호를 생성하는 방법
일정한 주기의 디지털 신호의 출력이 HIGH인 시간과 LOW인 시간의 비율 조정
(Period + Duty Cycle
)
나타내는 방법
Period
: HIGH(LOW)에서 다음 HIGH(LOW)가 될 때 까지 걸리는 시간Duty Cycle
: Period
중 HIGH인 시간의 비율을 나타냄FSEL
레지스터의 비트를 Alternate function 0
이 되도록 세팅하면 PWM을 위한 핀이 됨FSEL
레지스터의 비트를 Alternate function 5
가 되도록 세팅하면 PWM을 위한 핀이 됨등록 | 해제 |
---|---|
k_module_init() | k_module_exit() |
k_module_init()
: pwm0
를 할당받고 pwm
의 HIGH 유지시간 설정, pwm
작동k_module_exit()
: pwm0
off 및 pwm0
해제#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pwm.h>
struct pwm_device *pwm0 = NULL;
u32 pwm_on_time = 900000;
static int __init k_module_init(void)
{
int retval;
pr_info("k 커널 모듈 \n");
pwm0 = pwm_request(0, "my-pwm");
if(pwm0 == NULL) {
printk("Could not get PWM0!\n");
return -1;
}
pwm_config(pwm0, pwm_on_time, 1000000);
pwm_enable(pwm0);
return 0;
}
static void __exit k_module_exit(void)
{
pwm_disable(pwm0);
pwm_free(pwm0);
pr_info("바이!!n");
}
module_init(k_module_init);
module_exit(k_module_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("K <k@k.com>");
MODULE_DESCRIPTION("k initial module");
MODULE_VERSION("1.0.0");