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

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

?? led.c

?? FreeRTOS V4.2.1,增加了AVR32 UC3 和 LPC2368 的支持
?? C
字號:
/* This source file is part of the ATMEL FREERTOS-0.9.0 Release */

/*This file is prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
 *
 * \brief AT32UC3A EVK1100 board LEDs support package.
 *
 * This file contains definitions and services related to the LED features of
 * the EVK1100 board.
 *
 * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32
 * - Supported devices:  All AVR32 AT32UC3A devices can be used.
 * - AppNote:
 *
 * \author               Atmel Corporation: http://www.atmel.com \n
 *                       Support email: avr32@atmel.com
 *
 ******************************************************************************/

/* 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.
 */


#if __GNUC__
#  include <avr32/io.h>
#elif __ICCAVR32__
#  include <avr32/iouc3a0512.h>
#else
#  error Unknown compiler
#endif

#include "preprocessor.h"
#include "compiler.h"
#include "evk1100.h"
#include "led.h"


//! Structure describing LED hardware connections.
typedef const struct
{
  struct
  {
    U32 PORT;     //!< LED GPIO port.
    U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port.
  } GPIO; //!< LED GPIO descriptor.
  struct
  {
    S32 CHANNEL;  //!< LED PWM channel (< 0 if N/A).
    S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A).
  } PWM;  //!< LED PWM descriptor.
} tLED_DESCRIPTOR;


//! Hardware descriptors of all LEDs.
static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] =
{
#define INSERT_LED_DESCRIPTOR(LED_NO, unused)                 \
  {                                                           \
    {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\
    {LED##LED_NO##_PWM,       LED##LED_NO##_PWM_FUNCTION    } \
  },
  MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~)
#undef INSERT_LED_DESCRIPTOR
};


//! Saved state of all LEDs.
static U32 LED_State = (1 << LED_COUNT) - 1;


U32 LED_Read_Display(void)
{
  return LED_State;
}


void LED_Display(U32 leds)
{
  tLED_DESCRIPTOR *led_descriptor;
  volatile avr32_gpio_port_t *led_gpio_port;

  leds &= (1 << LED_COUNT) - 1;
  LED_State = leds;
  for (led_descriptor = &LED_DESCRIPTOR[0];
       led_descriptor < LED_DESCRIPTOR + LED_COUNT;
       led_descriptor++)
  {
    led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT];
    if (leds & 1)
    {
      led_gpio_port->ovrc  = led_descriptor->GPIO.PIN_MASK;
    }
    else
    {
      led_gpio_port->ovrs  = led_descriptor->GPIO.PIN_MASK;
    }
    led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK;
    leds >>= 1;
  }
}


U32 LED_Read_Display_Mask(U32 mask)
{
  return Rd_bits(LED_State, mask);
}


void LED_Display_Mask(U32 mask, U32 leds)
{
  tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1;
  volatile avr32_gpio_port_t *led_gpio_port;
  U8 led_shift;

  mask &= (1 << LED_COUNT) - 1;
  Wr_bits(LED_State, mask, leds);
  while (mask)
  {
    led_shift = 1 + ctz(mask);
    led_descriptor += led_shift;
    led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT];
    leds >>= led_shift - 1;
    if (leds & 1)
    {
      led_gpio_port->ovrc  = led_descriptor->GPIO.PIN_MASK;
    }
    else
    {
      led_gpio_port->ovrs  = led_descriptor->GPIO.PIN_MASK;
    }
    led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK;
    leds >>= 1;
    mask >>= led_shift;
  }
}


Bool LED_Test(U32 leds)
{
  return Tst_bits(LED_State, leds);
}


void LED_Off(U32 leds)
{
  tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1;
  volatile avr32_gpio_port_t *led_gpio_port;
  U8 led_shift;

  leds &= (1 << LED_COUNT) - 1;
  Clr_bits(LED_State, leds);
  while (leds)
  {
    led_shift = 1 + ctz(leds);
    led_descriptor += led_shift;
    led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT];
    led_gpio_port->ovrs  = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK;
    leds >>= led_shift;
  }
}


void LED_On(U32 leds)
{
  tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1;
  volatile avr32_gpio_port_t *led_gpio_port;
  U8 led_shift;

  leds &= (1 << LED_COUNT) - 1;
  Set_bits(LED_State, leds);
  while (leds)
  {
    led_shift = 1 + ctz(leds);
    led_descriptor += led_shift;
    led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT];
    led_gpio_port->ovrc  = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK;
    leds >>= led_shift;
  }
}


void LED_Toggle(U32 leds)
{
  tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1;
  volatile avr32_gpio_port_t *led_gpio_port;
  U8 led_shift;

  leds &= (1 << LED_COUNT) - 1;
  Tgl_bits(LED_State, leds);
  while (leds)
  {
    led_shift = 1 + ctz(leds);
    led_descriptor += led_shift;
    led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT];
    led_gpio_port->ovrt  = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK;
    led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK;
    leds >>= led_shift;
  }
}


U32 LED_Read_Display_Field(U32 field)
{
  return Rd_bitfield(LED_State, field);
}


void LED_Display_Field(U32 field, U32 leds)
{
  LED_Display_Mask(field, leds << ctz(field));
}


U8 LED_Get_Intensity(U32 led)
{
  tLED_DESCRIPTOR *led_descriptor;

  // Check that the argument value is valid.
  led = ctz(led);
  led_descriptor = &LED_DESCRIPTOR[led];
  if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0;

  // Return the duty cycle value if the LED PWM channel is enabled, else 0.
  return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ?
           AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0;
}


void LED_Set_Intensity(U32 leds, U8 intensity)
{
  tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1;
  volatile avr32_pwm_channel_t *led_pwm_channel;
  volatile avr32_gpio_port_t *led_gpio_port;
  U8 led_shift;

  // For each specified LED...
  for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift)
  {
    // Select the next specified LED and check that it has a PWM channel.
    led_shift = 1 + ctz(leds);
    led_descriptor += led_shift;
    if (led_descriptor->PWM.CHANNEL < 0) continue;

    // Initialize or update the LED PWM channel.
    led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL];
    if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)))
    {
      led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) &
                             ~(AVR32_PWM_CALG_MASK |
                               AVR32_PWM_CPOL_MASK |
                               AVR32_PWM_CPD_MASK);
      led_pwm_channel->cprd = 0x000000FF;
      led_pwm_channel->cdty = intensity;
      AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL;
    }
    else
    {
      AVR32_PWM.isr;
      while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL)));
      led_pwm_channel->cupd = intensity;
    }

    // Switch the LED pin to its PWM function.
    led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT];
    if (led_descriptor->PWM.FUNCTION & 0x1)
    {
      led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK;
    }
    else
    {
      led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK;
    }
    if (led_descriptor->PWM.FUNCTION & 0x2)
    {
      led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK;
    }
    else
    {
      led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK;
    }
    led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩影院免费视频| 狠狠色丁香婷综合久久| 国产精品视频一二| 久久久久99精品一区| 欧美精品一区二区三区久久久| 69成人精品免费视频| 欧美日韩国产欧美日美国产精品| 欧美色图激情小说| 91久久精品一区二区三区| 91精品1区2区| 欧美私模裸体表演在线观看| 欧美午夜片在线观看| 欧美久久久一区| 日韩免费视频线观看| 久久美女艺术照精彩视频福利播放| 26uuu欧美| 国产精品成人免费| 亚洲欧美日韩在线| 亚洲国产精品久久人人爱蜜臀| 亚洲国产日产av| 久久av资源站| www.欧美日韩国产在线| 色8久久人人97超碰香蕉987| 欧美一区永久视频免费观看| 久久久久久久久久久电影| 中文在线资源观看网站视频免费不卡| 亚洲日本在线天堂| 日韩成人av影视| 国产精品一区二区x88av| 国产999精品久久久久久 | 日韩午夜在线影院| 国产午夜精品久久久久久免费视| 国产精品美女久久久久aⅴ国产馆| 亚洲与欧洲av电影| 国产真实乱偷精品视频免| 91亚洲精品久久久蜜桃网站| 欧美一区二区三区免费视频 | 欧美日韩国产区一| 久久综合久久综合久久| 亚洲欧美另类久久久精品| 麻豆精品视频在线观看视频| 不卡的av电影| 亚洲精品在线电影| 一区二区欧美国产| 国产精品18久久久久久久久久久久| 99久久99久久久精品齐齐| 精品少妇一区二区三区免费观看 | 国产麻豆午夜三级精品| 欧美三级电影在线看| 最新国产精品久久精品| 精品一区在线看| 精品视频在线视频| 一区二区三区色| 成人精品国产一区二区4080| 精品少妇一区二区三区在线播放| 亚洲自拍欧美精品| 91色婷婷久久久久合中文| 国产婷婷色一区二区三区在线| 无吗不卡中文字幕| 色综合久久综合网97色综合| 中文av一区二区| 国产乱人伦精品一区二区在线观看| 91精品国产综合久久久久久久| 亚洲天堂福利av| 成人av集中营| 国产欧美日韩激情| 国产制服丝袜一区| 日韩亚洲欧美高清| 日韩影院精彩在线| 欧美另类变人与禽xxxxx| 亚洲理论在线观看| 日本高清不卡一区| 亚洲精品乱码久久久久久| 97精品久久久久中文字幕| 国产精品久久久久一区| 成人久久视频在线观看| 成人欧美一区二区三区小说| 波多野结衣亚洲一区| 中文字幕一区二区三| 99re这里只有精品6| 亚洲婷婷综合色高清在线| 97久久精品人人爽人人爽蜜臀| 国产精品亲子乱子伦xxxx裸| 成人免费高清在线| 亚洲三级电影全部在线观看高清| 91一区在线观看| 亚洲成人一二三| 7777精品伊人久久久大香线蕉最新版| 五月婷婷欧美视频| 日韩欧美一级二级三级久久久| 捆绑调教一区二区三区| 久久久久国产一区二区三区四区| 国产91精品精华液一区二区三区| 日韩理论片中文av| 欧美三级日韩在线| 韩国理伦片一区二区三区在线播放| 久久夜色精品国产噜噜av| 丰满少妇在线播放bd日韩电影| 国产丝袜美腿一区二区三区| 成人激情午夜影院| 亚洲一区在线看| 精品久久久影院| 99热这里都是精品| 日韩在线观看一区二区| 久久蜜桃香蕉精品一区二区三区| 91丝袜高跟美女视频| 午夜精品久久久久久久久久久| 精品剧情在线观看| 成人白浆超碰人人人人| 日本视频一区二区| 国产精品嫩草久久久久| 欧美精品久久久久久久多人混战 | 色94色欧美sute亚洲线路一ni | 免费视频最近日韩| 国产精品久久久久久户外露出| 在线成人免费视频| 不卡的电影网站| 久久国产免费看| 亚洲成人av福利| 亚洲欧美怡红院| 日韩欧美精品在线| 日本韩国欧美一区二区三区| 美女被吸乳得到大胸91| 一区二区三区在线视频观看 | 欧美日韩日日夜夜| 成人sese在线| 国产一区二区三区在线观看免费视频| 亚洲曰韩产成在线| 国产精品久久久久久久久久久免费看 | 日韩精品乱码免费| 亚洲欧美激情视频在线观看一区二区三区 | 精品播放一区二区| 欧美在线三级电影| 波多野结衣精品在线| 激情另类小说区图片区视频区| 午夜精品久久久久久久久久 | 国产欧美一区二区精品性| 欧美另类videos死尸| 色综合一区二区| 国产精品18久久久久久久久| 久久精品久久综合| 日本强好片久久久久久aaa| 一区二区国产盗摄色噜噜| 国产精品国产精品国产专区不片| 久久综合久久鬼色中文字| 日韩一卡二卡三卡| 欧美肥妇毛茸茸| 在线不卡免费av| 欧美人动与zoxxxx乱| 欧美色图天堂网| 欧美日韩国产一区二区三区地区| 在线国产亚洲欧美| 日本高清免费不卡视频| 91福利资源站| 欧美网站大全在线观看| 在线观看不卡视频| 91国偷自产一区二区开放时间| www.日韩av| 欧美亚一区二区| 欧美精品第一页| 日韩午夜在线播放| 精品国产91乱码一区二区三区| 精品国精品国产| 国产精品视频看| 亚洲图片激情小说| 午夜久久福利影院| 老司机免费视频一区二区| 久久激情五月婷婷| 成人高清免费观看| 欧美综合一区二区| 日韩一区二区三| 欧美—级在线免费片| 一区二区三区免费看视频| 午夜电影网一区| 狠狠v欧美v日韩v亚洲ⅴ| 不卡区在线中文字幕| 欧美日免费三级在线| 精品国产在天天线2019| 国产精品久久毛片| 亚洲va天堂va国产va久| 久久99精品久久只有精品| 99久久精品情趣| 51精品久久久久久久蜜臀| 久久亚洲精品小早川怜子| 亚洲伦在线观看| 久久精品国产精品青草| 成人久久18免费网站麻豆| 欧美日韩在线电影| 国产精品免费视频网站| 日韩精品一区第一页| bt欧美亚洲午夜电影天堂| 正在播放一区二区| 中文字幕av在线一区二区三区| 天堂影院一区二区| eeuss国产一区二区三区| 欧美tk—视频vk| 亚洲成人免费在线观看| av在线综合网| 久久久久久**毛片大全| 日韩精品1区2区3区|