今日はタイマー割り込みをしてみた。
結構APIがしっかりしていて、下記のようにPWMのプログラムをタイマー割り込みVerに変更してみた。
参考は下記サイト
https://qiita.com/keyyum/items/3ce448c098c546dced20
#include "pico/stdlib.h"
#include "hardware/pwm.h"
const uint LED_PIN = 22;
uint slice_num;
int i=0;
int flag=0;
bool timer_callback( repeating_timer_t *rt )
{
pwm_set_enabled(slice_num, false);
if(flag==0){
i=i+1;
if(i==256) flag=1;
else ;
}
else {
i=i-1;
if(i==0) flag=0;
else ;
}
pwm_set_chan_level(slice_num, 0, i);
pwm_set_enabled(slice_num, true);
return ( true );
}
void init(void)
{
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_set_function(LED_PIN, GPIO_FUNC_PWM);
slice_num = pwm_gpio_to_slice_num(22); //pin 22 slice No = 22
/*例えばPWM周波数を1KHzに、PWMの分解能を8ビット(0~255)に設定したい場合、
sysclock = 125,000,000Hz、wrap = 255、f=1000Hz より
clkdiv = sysclock / ((wrap+1) ⋅ f )
分周比 clkdiv = 488.2812 となる。*/
pwm_set_clkdiv(slice_num, 488.2812);
pwm_set_wrap(slice_num, 255);
// チャンネルPWMのHigh期間を設定
pwm_set_chan_level(slice_num, 0, 0);
pwm_set_enabled(slice_num, true);
}
int main() {
init();
static repeating_timer_t timer;
add_repeating_timer_ms( -10, &timer_callback, NULL, &timer );
while (true) {
}
}
0 件のコメント:
コメントを投稿