亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pwm.c

?? 實時嵌入式操作系統內部關于定時器的應用
?? C
字號:
/*
 * pwm.c
 *
 * Copyright (C) STMicroelectronics Limited 2004. All rights reserved.
 *
 * In-built timer management for ST20-C1.
 */

#include <c1timer.h>
#include <interrup.h>
#include <osassert.h>
#include <ostime.h>
#include <task.h>

#include "pwm.h"

#ifdef C1_CORE

static int limit (int min, int val, int max)
{
	return val < min ? min :
	       val > max ? max :
	                   val;
}

static void *pwm_base_address;
static int pwm_raised, pwm_number;

static void pwm_raise(void)
{
	pwm_raised = 1;
	interrupt_raise_number(pwm_number);
}

#define PWM3 ((pwm3_t *) pwm_base_address)
static int  pwm3_read(void)     { return PWM3->CaptureCount; }
static void pwm3_set(int value) { PWM3->CompareVal0 = value; }
static void pwm3_enable(void)   { PWM3->IntEnable.CompareInt0 = 1; }
static void pwm3_disable(void)  { PWM3->IntEnable.CompareInt0 = 0; }
static timer_api_t pwm3_api = { pwm3_read, pwm3_set, pwm3_enable, pwm3_disable, pwm_raise };

static void pwm3_interrupt(pwm3_t *pwm3)
{
	while ((pwm3->IntStatus.CompareInt0 && pwm3->IntEnable.CompareInt0) || pwm_raised) {
		pwm_raised = 0;
		pwm3->IntAck.CompareInt0 = 1;
		timer_interrupt();
	}
}

static void pwm3_init(pwm3_t *pwm3, int freq)
{
	/* timeslice tick is hardwired. no config required. */

	/* calculate the system clock frequency (see pwm4_init for details) and enable */
	pwm3->Control.CaptureClkValue = limit(0, (freq*1000 / 15625) - 1, 31);
	time_ticks_per_sec_set((freq * 1000) / (pwm3->Control.CaptureClkValue + 1));
	pwm3->Control.CaptureEnable = 1;
   
	/* set up capture counter hardware */
	pwm3->CaptureCount = 0;
	pwm3->IntEnable.CompareInt0 = 0;
	pwm3->IntAck.CompareInt0 = ~0;
}

#define PWM4 ((pwm4_t *) pwm_base_address)
static int pwm4_read(void)      { return PWM4->CaptureCount; }
static void pwm4_set(int value) { PWM4->CompareVal0 = value; }
static void pwm4_enable(void)   { PWM4->IntEnable.CompareInt0 = 1; }
static void pwm4_disable(void)  { PWM4->IntEnable.CompareInt0 = 0; }
static timer_api_t pwm4_api = { pwm4_read, pwm4_set, pwm4_enable, pwm4_disable, pwm_raise };

static void pwm4_interrupt(pwm4_t *pwm4)
{
	while ((pwm4->IntStatus.CompareInt0 && pwm4->IntEnable.CompareInt0) || pwm_raised) {
		pwm_raised = 0;
		pwm4->IntAck.CompareInt0 = 1;
		timer_interrupt();
	}
}

static void pwm4_init(pwm4_t *pwm4, int freq)
{
	/* calculate and enable the C1 timeslice tick (freq is in khz)
	 *
	 * based on: target_khz * c1_slice_divide = freq / (pwm_divide * (prescale + 1)
         *
	 * where:         target_khz = 0.5 (2ms timeslice)
	 *           c1_slice_divide = 64
	 *                pwm_divide = 256
	 *
	 * thus:     0.5 * 64 = freq / 256 * (prescale+1)
	 * or:       prescale = (freq / (256 * 0.5 * 64)) - 1
	 *                    = (freq / 8192) - 1
	 *
	 */
	pwm4->Control.PWMClkValue = limit(0, (freq / 8192) - 1, 15);
	pwm4->Control.PWMEnable = 1;

	/* calculate the system clock frequency (freq is in khz) and enable
	 *
	 * based on: target_khz = freq / (prescale + 1)
	 *
	 * where:    target_khz = 15.625
         *
	 * thus:       15.625 = freq / (prescale + 1)
	 * or:	     prescale = (freq / 15.625) - 1
	 *
	 * note: since we perform the calculation as integers then we will
	 * overflow if freq is greater than 2GHz.
	 */
	pwm4->Control.CaptureClkValue = limit(0, (freq*1000 / 15625) - 1, 31);
	time_ticks_per_sec_set((freq * 1000) / (pwm4->Control.CaptureClkValue + 1));
	pwm4->Control.CaptureEnable = 1;

	/* set up capture counter hardware */
	pwm4->CaptureCount = 0;
	pwm4->IntEnable.CompareInt0 = 0;
	pwm4->IntAck.CompareInt0 = ~0;
}


int timer_init_pwm(void *base, int number, int level, int freq, 
                         timer_init_pwm_flags_t flags)
{
	void (*interrupt)();
	void (*init)();
	timer_api_t *api;

	int err;

	FATAL_ERROR_IF_NOT_TASK();
	FATAL_ERROR_IF_NULL(base);
	FATAL_ERROR_IF(freq > 2000000, "at frequencies over 2GHz internal "
	                               "calculations will overflow");
	FATAL_ERROR_IF(pwm_base_address, "timer_init_pwm() can only be called once");

	/* switch between PWM3 and PWM4 */
	if (timer_init_pwm_flags_pwm3 & flags) {
		interrupt = pwm3_interrupt;
		init = pwm3_init;
		api = &pwm3_api;
	} else {
		interrupt = pwm4_interrupt;
		init = pwm4_init;
		api = &pwm4_api;
	}

	err = interrupt_install(number, level, interrupt, base);
	if (0 != err) {
		return err;
	}

	pwm_base_address = base;
	pwm_number = number;
	
	init(base, freq);
	timer_initialize(api);

	return 0;
}

#endif /* C1_CORE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三区在线成人av| 在线观看91视频| 日韩专区在线视频| 中文字幕乱码日本亚洲一区二区| 欧美精选午夜久久久乱码6080| 91麻豆自制传媒国产之光| 成人丝袜高跟foot| 国产成人精品影视| 成人aaaa免费全部观看| 成人动漫一区二区| www.欧美日韩国产在线| 一本色道a无线码一区v| 欧美亚洲综合一区| 欧美日韩国产在线播放网站| 5566中文字幕一区二区电影 | 日韩成人伦理电影在线观看| 亚洲国产精品欧美一二99| 性感美女极品91精品| 日韩激情一区二区| 美女视频网站久久| 国产大陆a不卡| 欧美久久久久久久久| 欧美大片一区二区三区| 久久久久久一二三区| 国产精品色呦呦| 一区二区三区在线不卡| 日韩综合小视频| 国产成人高清在线| 91国产免费看| 91精品国产免费| 国产欧美日韩卡一| 亚洲综合色网站| 久久99国产精品成人| 成人av免费网站| 欧美日韩亚洲国产综合| 久久先锋影音av鲁色资源网| 亚洲视频在线观看三级| 视频一区二区欧美| 成人在线视频一区| 欧美老女人第四色| 国产精品污网站| 天堂成人国产精品一区| 风间由美一区二区三区在线观看 | 国产精品影视在线| 一本大道av一区二区在线播放| 欧美福利视频一区| 国产精品欧美久久久久一区二区| 亚洲午夜视频在线观看| 福利电影一区二区| 日韩欧美激情一区| 亚洲成在线观看| 成人自拍视频在线| 欧美成va人片在线观看| 亚洲精品成人a在线观看| 国产一区二区三区四区五区入口| 色婷婷av久久久久久久| 国产视频一区不卡| 美女视频黄免费的久久| 欧美三级日韩三级国产三级| 国产精品色呦呦| 国产一区欧美一区| 欧美一级淫片007| 亚洲国产aⅴ天堂久久| 成人av在线影院| 久久久一区二区| 久久99久久精品欧美| 欧美日韩一本到| 夜夜精品浪潮av一区二区三区| 成人深夜在线观看| 中文字幕免费不卡| 国产不卡视频一区| 国产亚洲精品中文字幕| 激情深爱一区二区| 日韩一区二区精品葵司在线| 午夜精品久久久| 欧美人与z0zoxxxx视频| 一区二区三区四区蜜桃| 91黄色在线观看| 一区二区三区中文字幕电影 | 91香蕉视频黄| 精品一区二区影视| 欧美一区二区三区日韩视频| 亚洲一二三区在线观看| 在线欧美小视频| 亚洲综合色噜噜狠狠| 在线免费观看日本一区| 亚洲成av人片在www色猫咪| 欧洲亚洲精品在线| 五月婷婷综合激情| 日韩一级在线观看| 国产一区二区0| 日本一二三不卡| 91在线精品秘密一区二区| 成人欧美一区二区三区黑人麻豆| 91视频91自| 亚洲电影在线播放| 日韩亚洲欧美成人一区| 国产毛片精品国产一区二区三区| 国产性做久久久久久| 99在线精品观看| 亚洲图片欧美一区| 精品欧美乱码久久久久久| 国产精品一二三四五| 亚洲欧美日韩一区| 制服丝袜成人动漫| 欧美精品123区| 国产一区二区在线影院| 中文字幕制服丝袜成人av| 在线观看视频一区二区| 理论片日本一区| 亚洲欧洲精品一区二区精品久久久 | 中文字幕在线视频一区| 欧美午夜一区二区三区| 久久成人羞羞网站| 中文字幕欧美一| 欧美一级高清片在线观看| 国产福利精品导航| 亚洲在线视频一区| 国产日韩亚洲欧美综合| 欧洲另类一二三四区| 国产精品一区二区三区乱码| 亚洲欧美在线高清| 欧美成人a∨高清免费观看| 99v久久综合狠狠综合久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美激情资源网| 5566中文字幕一区二区电影| av成人动漫在线观看| 捆绑变态av一区二区三区| 亚洲激情一二三区| 国产亚洲一本大道中文在线| 欧美日韩一区 二区 三区 久久精品 | 9人人澡人人爽人人精品| 免费一级片91| 亚洲一区二区三区中文字幕| 亚洲国产精华液网站w| 日韩欧美国产成人一区二区| 色婷婷久久综合| www.日韩精品| 国产成人精品亚洲日本在线桃色 | 色婷婷亚洲精品| 国产乱国产乱300精品| 日韩高清在线电影| 一级日本不卡的影视| 国产精品大尺度| 国产欧美日韩在线观看| 精品三级av在线| 日韩欧美的一区二区| 在线电影欧美成精品| 欧美三级视频在线| 91国产精品成人| 91九色02白丝porn| 91国偷自产一区二区开放时间 | 97久久人人超碰| 顶级嫩模精品视频在线看| 国产综合色在线| 日韩不卡一区二区| 蜜桃一区二区三区在线| 免费在线观看精品| 久久精品国产精品青草| 久久精品国产第一区二区三区| 日韩1区2区日韩1区2区| 美女任你摸久久 | 2021国产精品久久精品| 精品国产成人在线影院| 精品国产成人系列| 国产女同互慰高潮91漫画| 国产日韩欧美综合一区| 国产精品久久久久永久免费观看| 国产精品另类一区| 亚洲精品视频自拍| 午夜视黄欧洲亚洲| 久久精品国产精品亚洲精品| 韩国三级中文字幕hd久久精品| 精品视频在线免费看| 欧美日韩在线精品一区二区三区激情| 91成人国产精品| 欧美绝品在线观看成人午夜影视| 欧美一区二区三区视频免费播放| 精品国产乱码久久| 国产精品久久毛片| 亚洲一级片在线观看| 麻豆精品在线观看| www.视频一区| 欧美欧美欧美欧美首页| 久久影院电视剧免费观看| 中文字幕在线不卡视频| 亚洲成av人片一区二区| 狠狠色伊人亚洲综合成人| 色综合天天综合在线视频| 69久久夜色精品国产69蝌蚪网| 精品噜噜噜噜久久久久久久久试看 | 中文字幕一区在线| 日日夜夜免费精品| 风间由美中文字幕在线看视频国产欧美 | 国产一区二区三区精品欧美日韩一区二区三区| 国产一区二区三区视频在线播放| 成人一区二区三区| 制服丝袜中文字幕一区| 国产精品另类一区|