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

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

?? led.c

?? freertosV4.40 是一種small的嵌入式系統。利于嵌入式開好者入門學習嵌入式操作系統。通過對于源碼的學習可以很好的掌握freertos的運行機制。
?? C
字號:
/*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 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 "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 volatile 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一区二区三区免费野_久草精品视频
麻豆成人免费电影| 欧美经典一区二区| 亚洲不卡av一区二区三区| 成人av网址在线观看| 亚洲男人的天堂av| 欧美在线一二三| 午夜精品福利视频网站| 在线综合+亚洲+欧美中文字幕| 午夜精品视频一区| 欧美一级淫片007| 国产一区二区三区| 国产精品超碰97尤物18| 成人激情校园春色| 一区二区三区毛片| 日韩欧美久久一区| 91美女片黄在线| 日本亚洲天堂网| 亚洲国产成人一区二区三区| av电影在线观看完整版一区二区| 亚洲日穴在线视频| 日韩欧美高清dvd碟片| 9i在线看片成人免费| 日韩不卡一二三区| 国产精品乱码久久久久久| 在线观看一区二区精品视频| 麻豆中文一区二区| 亚洲国产wwwccc36天堂| 国产精品私房写真福利视频| 欧美精品亚洲二区| 91福利视频久久久久| 激情综合色播激情啊| 亚洲精品美国一| 久久精品亚洲国产奇米99| 精品视频1区2区3区| 成人晚上爱看视频| 久久国产精品无码网站| 亚洲精品欧美综合四区| 亚洲天堂福利av| 日本一区二区不卡视频| 久久久91精品国产一区二区精品| 欧美私模裸体表演在线观看| 一本到不卡免费一区二区| 国产98色在线|日韩| 国产精品一色哟哟哟| 国产一区啦啦啦在线观看| 美女脱光内衣内裤视频久久影院| 丝袜a∨在线一区二区三区不卡| 亚洲美女免费视频| 亚洲成国产人片在线观看| 亚洲高清视频中文字幕| 五月天激情小说综合| 亚洲综合色区另类av| 亚洲乱码国产乱码精品精98午夜| 中文字幕国产一区二区| 中文字幕一区三区| 国产精品福利av| 亚洲一区二区在线视频| 日一区二区三区| 久久不见久久见免费视频7| 国产福利一区二区三区| 99久久99久久久精品齐齐| 欧洲一区在线电影| 欧美精品一卡两卡| 国产欧美一区二区三区网站| 亚洲品质自拍视频网站| 免费观看在线色综合| 国产伦精品一区二区三区视频青涩| 成人精品gif动图一区| 欧美日韩一区久久| 中文字幕乱码亚洲精品一区| 一二三四社区欧美黄| 国产精品一区二区久激情瑜伽 | 亚洲欧美日韩国产手机在线| 午夜视频在线观看一区二区三区| 麻豆精品视频在线观看免费 | 国产不卡一区视频| 欧美另类久久久品| 亚洲欧美激情一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 9久草视频在线视频精品| 日韩视频123| 亚洲综合激情另类小说区| 日韩国产精品91| 精品亚洲porn| 91丝袜美女网| 精品国产91亚洲一区二区三区婷婷| 久久老女人爱爱| 一区二区三区在线观看国产| 国产欧美日韩三级| 久久激情综合网| 欧美色爱综合网| 日韩一区欧美小说| 韩国三级中文字幕hd久久精品| 色94色欧美sute亚洲线路二| 精品电影一区二区| 国产尤物一区二区在线| 日韩一区二区三区在线观看 | 欧美猛男男办公室激情| 国产精品久久福利| 国产在线视频一区二区三区| 欧美日韩成人综合在线一区二区 | 91精品福利视频| 一区二区三区资源| 91精品欧美综合在线观看最新| 亚洲综合丝袜美腿| 972aa.com艺术欧美| 国产精品美女视频| 波多野洁衣一区| 国产欧美日韩久久| 国产精品一区二区三区四区| 日本一区二区三区免费乱视频| 国产专区欧美精品| 中文字幕一区在线| 欧美日韩电影在线| 经典三级视频一区| 亚洲乱码国产乱码精品精98午夜| 91亚洲大成网污www| 亚洲一级在线观看| 精品久久久久久久久久久久久久久| 一区二区三区不卡视频 | 国产米奇在线777精品观看| 国产免费成人在线视频| www.色精品| 国产一区二区福利| 亚洲尤物在线视频观看| 欧美电影免费观看高清完整版| 国产又黄又大久久| 亚洲自拍偷拍网站| 久久久www成人免费无遮挡大片| 波多野结衣精品在线| 青青青伊人色综合久久| 国产精品网站导航| 欧美日本在线播放| 国产尤物一区二区在线| 日本视频一区二区| 亚洲激情网站免费观看| 久久亚洲一区二区三区明星换脸| 色天使久久综合网天天| 国产ts人妖一区二区| 免费av网站大全久久| 亚洲va欧美va人人爽| 久久精品视频在线免费观看| 欧美精品一区男女天堂| 在线播放视频一区| 欧美日韩中文精品| 欧美日韩久久久久久| 91国产福利在线| 欧美精三区欧美精三区| 欧美日韩国产影片| 欧美日韩高清不卡| 777午夜精品视频在线播放| 色94色欧美sute亚洲13| 欧美精品色一区二区三区| 欧美性一二三区| 欧美一级黄色录像| 日韩一区二区中文字幕| 99国产精品国产精品久久| 久久综合色天天久久综合图片| 精品少妇一区二区三区| 日韩视频123| 中文在线一区二区| 亚洲男同性恋视频| 午夜不卡av在线| 麻豆精品一区二区三区| 国产精品影音先锋| 91美女福利视频| 色综合夜色一区| 精品免费视频.| 亚洲日本在线天堂| 美女一区二区久久| 成人在线视频一区| 91精品在线一区二区| 国产精品婷婷午夜在线观看| 一区二区三区国产豹纹内裤在线| 午夜视频一区在线观看| 国产精品综合av一区二区国产馆| 色老头久久综合| 久久久一区二区三区捆绑**| 国产精品视频一区二区三区不卡| 亚洲一级二级三级| 国产成人精品免费| 2021国产精品久久精品| 亚洲一区免费在线观看| 久久99蜜桃精品| 91成人国产精品| 亚洲欧美成aⅴ人在线观看| 亚洲卡通动漫在线| 亚洲男人的天堂在线aⅴ视频| 日韩黄色一级片| 欧美精品一区二区三区在线播放 | 日韩影院在线观看| 久久综合一区二区| 成人综合婷婷国产精品久久蜜臀 | 91麻豆成人久久精品二区三区| 欧美mv和日韩mv国产网站| 奇米精品一区二区三区在线观看一| 日韩一区二区麻豆国产| 极品销魂美女一区二区三区| 精品对白一区国产伦| 国产美女一区二区三区|