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

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

?? tc.c

?? FreeRTOS is a portable, open source, mini Real Time Kernel - a free to download and royalty free RTO
?? C
字號:
/*This file is prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
 *
 * \brief TC driver for AVR32 UC3.
 *
 * AVR32 Timer/Counter driver module.
 *
 * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32
 * - Supported devices:  All AVR32 devices with a TC module can be used.
 * - AppNote:
 *
 * \author               Atmel Corporation: http://www.atmel.com \n
 *                       Support and FAQ: http://support.atmel.no/
 *
 ******************************************************************************/

/* Copyright (c) 2007, Atmel Corporation All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. The name of ATMEL may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
 * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


#include <avr32/io.h>
#include "compiler.h"
#include "tc.h"


int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  return tc->channel[channel].imr;
}


int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // Enable the appropriate interrupts.
  tc->channel[channel].ier = bitfield->etrgs << AVR32_TC_ETRGS_OFFSET |
                             bitfield->ldrbs << AVR32_TC_LDRBS_OFFSET |
                             bitfield->ldras << AVR32_TC_LDRAS_OFFSET |
                             bitfield->cpcs << AVR32_TC_CPCS_OFFSET |
                             bitfield->cpbs << AVR32_TC_CPBS_OFFSET |
                             bitfield->cpas << AVR32_TC_CPAS_OFFSET |
                             bitfield->lovrs << AVR32_TC_LOVRS_OFFSET |
                             bitfield->covfs << AVR32_TC_COVFS_OFFSET;

  // Disable the appropriate interrupts.
  tc->channel[channel].idr = (~bitfield->etrgs & 1) << AVR32_TC_ETRGS_OFFSET |
                             (~bitfield->ldrbs & 1) << AVR32_TC_LDRBS_OFFSET |
                             (~bitfield->ldras & 1) << AVR32_TC_LDRAS_OFFSET |
                             (~bitfield->cpcs & 1) << AVR32_TC_CPCS_OFFSET |
                             (~bitfield->cpbs & 1) << AVR32_TC_CPBS_OFFSET |
                             (~bitfield->cpas & 1) << AVR32_TC_CPAS_OFFSET |
                             (~bitfield->lovrs & 1) << AVR32_TC_LOVRS_OFFSET |
                             (~bitfield->covfs & 1) << AVR32_TC_COVFS_OFFSET;

  return 0;
}


int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS || ext_clk_sig_src >= 1 << AVR32_TC_BMR_TC0XC0S_SIZE)
    return TC_INVALID_ARGUMENT;

  // Clear bit-field and set the correct behavior.
  tc->bmr = (tc->bmr & ~(AVR32_TC_BMR_TC0XC0S_MASK << (channel * AVR32_TC_BMR_TC0XC0S_SIZE))) |
            (ext_clk_sig_src << (channel * AVR32_TC_BMR_TC0XC0S_SIZE));

  return 0;
}


int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt)
{
  // Check for valid input.
  if (opt->channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // MEASURE SIGNALS: Capture operating mode.
  tc->channel[opt->channel].cmr = opt->ldrb << AVR32_TC_LDRB_OFFSET |
                                  opt->ldra << AVR32_TC_LDRA_OFFSET |
                                  0 << AVR32_TC_WAVE_OFFSET |
                                  opt->cpctrg << AVR32_TC_CPCTRG_OFFSET |
                                  opt->abetrg << AVR32_TC_ABETRG_OFFSET |
                                  opt->etrgedg << AVR32_TC_ETRGEDG_OFFSET|
                                  opt->ldbdis << AVR32_TC_LDBDIS_OFFSET |
                                  opt->ldbstop << AVR32_TC_LDBSTOP_OFFSET |
                                  opt->burst << AVR32_TC_BURST_OFFSET |
                                  opt->clki << AVR32_TC_CLKI_OFFSET |
                                  opt->tcclks << AVR32_TC_TCCLKS_OFFSET;

  return 0;
}


int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt)
{
  // Check for valid input.
  if (opt->channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // GENERATE SIGNALS: Waveform operating mode.
  tc->channel[opt->channel].cmr = opt->bswtrg << AVR32_TC_BSWTRG_OFFSET |
                                  opt->beevt << AVR32_TC_BEEVT_OFFSET |
                                  opt->bcpc << AVR32_TC_BCPC_OFFSET |
                                  opt->bcpb << AVR32_TC_BCPB_OFFSET |
                                  opt->aswtrg << AVR32_TC_ASWTRG_OFFSET |
                                  opt->aeevt << AVR32_TC_AEEVT_OFFSET |
                                  opt->acpc << AVR32_TC_ACPC_OFFSET |
                                  opt->acpa << AVR32_TC_ACPA_OFFSET |
                                  1 << AVR32_TC_WAVE_OFFSET |
                                  opt->wavsel << AVR32_TC_WAVSEL_OFFSET |
                                  opt->enetrg << AVR32_TC_ENETRG_OFFSET |
                                  opt->eevt << AVR32_TC_EEVT_OFFSET |
                                  opt->eevtedg << AVR32_TC_EEVTEDG_OFFSET |
                                  opt->cpcdis << AVR32_TC_CPCDIS_OFFSET |
                                  opt->cpcstop << AVR32_TC_CPCSTOP_OFFSET |
                                  opt->burst << AVR32_TC_BURST_OFFSET |
                                  opt->clki << AVR32_TC_CLKI_OFFSET |
                                  opt->tcclks << AVR32_TC_TCCLKS_OFFSET;

  return 0;
}


int tc_start(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // Enable, reset and start the selected timer/counter channel.
  tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK | AVR32_TC_CLKEN_MASK;

  return 0;
}


int tc_stop(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // Disable the selected timer/counter channel.
  tc->channel[channel].ccr = AVR32_TC_CLKDIS_MASK;

  return 0;
}


int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // Reset the selected timer/counter channel.
  tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK;

  return 0;
}


void tc_sync_trigger(volatile avr32_tc_t *tc)
{
  // Reset all channels of the selected timer/counter.
  tc->bcr = AVR32_TC_BCR_SYNC_MASK;
}


int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  return tc->channel[channel].sr;
}


int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  return Rd_bitfield(tc->channel[channel].cv, AVR32_TC_CV_MASK);
}


int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  return Rd_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK);
}


int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  return Rd_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK);
}


int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  return Rd_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK);
}


int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // This function is only available in WAVEFORM mode.
  if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK))
    Wr_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK, value);

  return value;
}


int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // This function is only available in WAVEFORM mode.
  if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK))
    Wr_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK, value);

  return value;
}


int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value)
{
  // Check for valid input.
  if (channel >= TC_NUMBER_OF_CHANNELS)
    return TC_INVALID_ARGUMENT;

  // This function is only available in WAVEFORM mode.
  if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK))
    Wr_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK, value);

  return value;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美国产三级| 极品销魂美女一区二区三区| 91精品午夜视频| 精品视频在线看| 99久久免费视频.com| 成人午夜在线免费| 国产一区二区看久久| 韩国精品久久久| 图片区小说区区亚洲影院| 洋洋成人永久网站入口| 亚洲国产成人av好男人在线观看| 午夜精品福利一区二区三区av| 亚洲欧美韩国综合色| 亚洲国产精品综合小说图片区| 一区二区三区免费| 日韩电影在线看| 裸体健美xxxx欧美裸体表演| 日韩**一区毛片| 国精品**一区二区三区在线蜜桃| 国产乱国产乱300精品| 成人动漫一区二区| 在线免费观看一区| 91麻豆精品国产91久久久使用方法 | 国产黄色91视频| 成人黄页在线观看| 日本韩国精品在线| 91精品蜜臀在线一区尤物| 精品国产免费一区二区三区四区 | 日韩欧美激情四射| 国产亚洲一区二区三区四区 | 国产成人午夜高潮毛片| 色婷婷av一区二区三区软件| 在线不卡免费av| 国产性做久久久久久| 最近日韩中文字幕| 麻豆精品在线看| 色婷婷国产精品| 久久久五月婷婷| 亚洲一二三四区| 国产不卡视频在线观看| 欧美人与禽zozo性伦| 国产精品久久久久9999吃药| 日韩黄色免费电影| 91热门视频在线观看| 日韩一区二区三| 亚洲男人的天堂一区二区| 国精产品一区一区三区mba视频| 在线免费精品视频| 欧美韩国一区二区| 久久精品99国产精品| 欧美自拍丝袜亚洲| 国产精品欧美久久久久一区二区| 日韩和欧美的一区| 91国偷自产一区二区三区成为亚洲经典 | 亚洲欧美成人一区二区三区| 国产在线不卡一卡二卡三卡四卡| 欧美日韩久久一区| 亚洲精品老司机| 成人高清视频在线| 久久婷婷国产综合精品青草 | 国产麻豆成人精品| 91精品国产综合久久精品麻豆| 亚洲人妖av一区二区| 国产一区二区伦理| 欧美r级在线观看| 日本女人一区二区三区| 欧美色中文字幕| 亚洲综合男人的天堂| 91丨porny丨户外露出| 欧美韩国日本一区| 国产成人午夜片在线观看高清观看| 日韩情涩欧美日韩视频| 秋霞电影网一区二区| 欧美一区二区在线免费观看| 亚洲观看高清完整版在线观看| 日本精品一级二级| 一区二区三区日本| 在线区一区二视频| 亚洲一区二区在线播放相泽| 在线欧美日韩国产| 五月天亚洲精品| 911精品国产一区二区在线| 亚洲成年人影院| 在线播放一区二区三区| 欧美大片在线观看一区| 午夜国产不卡在线观看视频| 一本色道久久加勒比精品| 久久精品夜色噜噜亚洲a∨| 久久99日本精品| 欧美精品一区二| 国产精品888| 国产欧美日韩在线| 91亚洲精品一区二区乱码| 亚洲一区二区三区国产| 欧美日韩精品一二三区| 蜜桃一区二区三区在线观看| 国产亚洲1区2区3区| 91麻豆蜜桃一区二区三区| 一区二区在线观看免费| 欧美久久久久久久久久| 激情五月婷婷综合网| 国产精品美女久久久久久久久| 99re热视频精品| 午夜视频在线观看一区二区| 亚洲免费观看高清在线观看| 成人av网站免费| 亚洲午夜久久久久| 欧美电影免费观看完整版| 福利视频网站一区二区三区| 亚洲黄一区二区三区| 制服丝袜一区二区三区| 成人国产精品免费观看视频| 亚洲成人一区在线| 亚洲国产精品成人久久综合一区| 色哟哟一区二区在线观看| 久久精品99国产精品日本| 国产精品黄色在线观看| 日韩一区二区视频| eeuss鲁片一区二区三区在线观看| 亚洲国产另类av| 国产欧美一区二区精品性色| 欧美午夜一区二区三区免费大片| 精品在线亚洲视频| 亚洲线精品一区二区三区八戒| 精品国产一区久久| 欧美日韩亚洲综合一区二区三区 | 在线成人小视频| 国产成人一区二区精品非洲| 午夜精品久久久久久久久久| 国产精品久久久久久久久久久免费看| 制服丝袜亚洲色图| 色婷婷狠狠综合| 成人免费视频caoporn| 蜜桃av噜噜一区| 午夜久久久影院| 亚洲色图另类专区| 中文天堂在线一区| 26uuu色噜噜精品一区| 91精品国产综合久久福利软件| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲天天做日日做天天谢日日欢| 欧美va亚洲va| 日韩午夜电影av| 欧美午夜不卡在线观看免费| 91丨九色丨蝌蚪富婆spa| 国产91精品入口| 国产成人av自拍| 国产福利精品一区| 国产激情一区二区三区四区| 国产最新精品精品你懂的| 久久精品国产一区二区三| 视频一区视频二区在线观看| 亚洲午夜久久久久久久久电影院| 1024成人网| 亚洲欧美日韩中文播放| 综合欧美一区二区三区| 成人免费在线视频| **性色生活片久久毛片| 亚洲精品一二三区| 一区二区三区精品在线| 一区二区三区免费网站| 伊人性伊人情综合网| 亚洲福利电影网| 视频一区欧美日韩| 久久99热这里只有精品| 国产一区二区h| 成人深夜在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 一区二区三区四区国产精品| 一二三四社区欧美黄| 偷拍与自拍一区| 久久精品99久久久| 成人午夜激情视频| 在线观看日韩一区| 91精品国产欧美日韩| 久久免费精品国产久精品久久久久| 337p日本欧洲亚洲大胆精品| 国产精品免费aⅴ片在线观看| 中文字幕在线一区二区三区| 一个色妞综合视频在线观看| 日韩成人一级片| 国产福利精品一区| 91国产福利在线| 精品国产在天天线2019| 日韩理论片在线| 日本欧美大码aⅴ在线播放| 成人免费高清在线观看| 欧美视频中文一区二区三区在线观看| 欧美一级二级在线观看| 亚洲欧洲成人精品av97| 日本欧美韩国一区三区| 99久久综合99久久综合网站| 欧美色成人综合| 久久久精品国产99久久精品芒果| 中文字幕一区二区不卡| 美女视频免费一区| 91香蕉视频在线| 欧美精品一区二区在线观看| 一区二区三区在线免费观看| 久久超碰97人人做人人爱|