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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ssi.c

?? 飛利浦LM3S系列ARM的庫文件,在進行arm開發(fā)時所必須的庫文件,直接加到工程中,一般不必修改.
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*****************************************************************************
//
// ssi.c - Driver for Synchronous Serial Interface.
//
// Copyright (c) 2005,2006 Luminary Micro, Inc.  All rights reserved.
//
// Software License Agreement
//
// Luminary Micro, Inc. (LMI) is supplying this software for use solely and
// exclusively on LMI's Stellaris Family of microcontroller products.
//
// The software is owned by LMI and/or its suppliers, and is protected under
// applicable copyright laws.  All rights are reserved.  Any use in violation
// of the foregoing restrictions may subject the user to criminal sanctions
// under applicable laws, as well as to civil liability for the breach of the
// terms and conditions of this license.
//
// THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 687 of the Stellaris Driver Library.
//
//*****************************************************************************

//*****************************************************************************
//
//! \addtogroup ssi_api
//! @{
//
//*****************************************************************************

#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_ssi.h"
#include "hw_types.h"
#include "debug.h"
#include "interrupt.h"
#include "ssi.h"
#include "sysctl.h"

//*****************************************************************************
//
//! Configures the synchronous serial interface.
//!
//! \param ulBase specifies the SSI module base address.
//! \param ulProtocol specifies the data transfer protocol.
//! \param ulMode specifies the mode of operation.
//! \param ulBitRate specifies the clock rate.
//! \param ulDataWidth specifies number of bits transfered per frame.
//!
//! This function configures the synchronous serial interface. It sets
//! the SSI protocol, mode of operation, bit rate, and data width.
//!
//! The parameter \e ulProtocol defines the data frame format. The parameter
//! \e ulProtocol can be one of the following values: SSI_FRF_MOTO_MODE_0,
//! SSI_FRF_MOTO_MODE_1, SSI_FRF_MOTO_MODE_2, SSI_FRF_MOTO_MODE_3,
//! SSI_FRF_TI, or SSI_FRF_NMW. The Motorola frame formats imply the
//! following polarity and phase configurations:
//! <pre>
//! Polarity Phase       Mode
//!   0       0   SSI_FRF_MOTO_MODE_0
//!   0       1   SSI_FRF_MOTO_MODE_1
//!   1       0   SSI_FRF_MOTO_MODE_2
//!   1       1   SSI_FRF_MOTO_MODE_3
//! </pre>
//!
//! The parameter \e ulMode defines the operating mode of the SSI module. The
//! SSI module can operate as a master or slave; if a slave, the SSI can be
//! configured to disable output on its serial output line. The parameter
//! \e ulMode can be one of the following values: SSI_MODE_MASTER,
//! SSI_MODE_SLAVE, or SSI_MODE_SLAVE_OD.
//!
//! The parameter \e ulBitRate defines the bit rate for the SSI. This bit rate
//! must satisfy the following clock ratio criteria:
//! - FSSI >= 2 * bit rate (master mode)
//! - FSSI >= 12 * bit rate (slave modes)
//!
//! where FSSI is the frequency of the clock supplied to the SSI module.
//!
//! The parameter \e ulDataWidth defines the width of the data transfers.
//! The parameter \e ulDataWidth can be a value between 4 and 16, inclusive.
//!
//! The SSI clocking is dependent upon the system clock rate returned by
//! SysCtlClockGet(); if it does not return the correct system clock rate then
//! the SSI clock rate will be incorrect.
//!
//! \return None.
//
//*****************************************************************************
void
SSIConfig(unsigned long ulBase, unsigned long ulProtocol, unsigned long ulMode,
          unsigned long ulBitRate, unsigned long ulDataWidth)
{
    unsigned long ulMaxBitRate;
    unsigned long ulRegVal;
    unsigned long ulPreDiv;
    unsigned long ulSCR;
    unsigned long ulSPH_SPO;
    unsigned long ulClock;

    //
    // Check the arguments.
    //
    ASSERT(ulBase == SSI_BASE);
    ASSERT((ulProtocol == SSI_FRF_MOTO_MODE_0) ||
           (ulProtocol == SSI_FRF_MOTO_MODE_1) ||
           (ulProtocol == SSI_FRF_MOTO_MODE_2) ||
           (ulProtocol == SSI_FRF_MOTO_MODE_3) ||
           (ulProtocol == SSI_FRF_TI) ||
           (ulProtocol == SSI_FRF_NMW));
    ASSERT((ulMode == SSI_MODE_MASTER) ||
           (ulMode == SSI_MODE_SLAVE) ||
           (ulMode == SSI_MODE_SLAVE_OD));
    ASSERT((ulDataWidth >= 4) && (ulDataWidth <= 16));

    //
    // Get the processor clock rate.
    //
    ulClock = SysCtlClockGet();

    //
    // Validate the clock speed.
    //
    ASSERT(((ulMode == SSI_MODE_MASTER) && (ulBitRate <= (ulClock / 2))) ||
           ((ulMode != SSI_MODE_MASTER) && (ulBitRate <= (ulClock / 12))));
    ASSERT((ulClock / ulBitRate) <= (254 * 256));

    //
    // Set the mode.
    //
    ulRegVal = (ulMode == SSI_MODE_SLAVE_OD) ? SSI_CR1_SOD : 0;
    ulRegVal |= (ulMode == SSI_MODE_MASTER) ? 0 : SSI_CR1_MS;
    HWREG(ulBase + SSI_O_CR1) = ulRegVal;

    //
    // Set the clock predivider.
    //
    ulMaxBitRate = ulClock / ulBitRate;
    ulPreDiv = 0;
    do
    {
        ulPreDiv += 2;
        ulSCR = (ulMaxBitRate / ulPreDiv) - 1;
    }
    while(ulSCR > 255);
    HWREG(ulBase + SSI_O_CPSR) = ulPreDiv;

    //
    // Set protocol and clock rate.
    //
    ulSPH_SPO = ulProtocol << 6;
    ulProtocol &= SSI_CR0_FRF_MASK;
    ulRegVal = (ulSCR << 8) | ulSPH_SPO | ulProtocol | (ulDataWidth - 1);
    HWREG(ulBase + SSI_O_CR0) = ulRegVal;
}

//*****************************************************************************
//
//! Enables the synchronous serial interface.
//!
//! \param ulBase specifies the SSI module base address.
//!
//! This will enable operation of the synchronous serial interface. It must be
//! configured before it is enabled.
//!
//! \return None.
//
//*****************************************************************************
void
SSIEnable(unsigned long ulBase)
{
    //
    // Check the arguments.
    //
    ASSERT(ulBase == SSI_BASE);

    //
    // Read-modify-write the enable bit.
    //
    HWREG(ulBase + SSI_O_CR1) |= SSI_CR1_SSE;
}

//*****************************************************************************
//
//! Disables the synchronous serial interface.
//!
//! \param ulBase specifies the SSI module base address.
//!
//! This will disable operation of the synchronous serial interface.
//!
//! \return None.
//
//*****************************************************************************
void
SSIDisable(unsigned long ulBase)
{
    //
    // Check the arguments.
    //
    ASSERT(ulBase == SSI_BASE);

    //
    // Read-modify-write the enable bit.
    //
    HWREG(ulBase + SSI_O_CR1) &= ~(SSI_CR1_SSE);
}

//*****************************************************************************
//
//! Registers an interrupt.handler for the synchronous serial interface.
//!
//! \param ulBase specifies the SSI module base address.
//! \param pfnHandler is a pointer to the function to be called when the
//! synchronous serial interface interrupt occurs.
//!
//! This sets the handler to be called when an SSI interrupt
//! occurs.  This will enable the global interrupt in the interrupt controller;
//! specific SSI interrupts must be enabled via SSIIntEnable().  If necessary,
//! it is the interrupt.handler's responsibility to clear the interrupt source
//! via SSIIntClear().
//!
//! \sa IntRegister() for important information about registering interrupt
//! handlers.
//!
//! \return None.
//
//*****************************************************************************
void
SSIIntRegister(unsigned long ulBase, void (*pfnHandler)(void))
{
    //
    // Check the arguments.
    //
    ASSERT(ulBase == SSI_BASE);

    //
    // Register the interrupt.handler, returning an error if an error occurs.
    //
    IntRegister(INT_SSI, pfnHandler);

    //
    // Enable the synchronous serial interface interrupt.
    //
    IntEnable(INT_SSI);
}

//*****************************************************************************
//
//! Unregisters an interrupt.handler for the synchronous serial interface.
//!
//! \param ulBase specifies the SSI module base address.
//!
//! This function will clear the handler to be called when a SSI
//! interrupt occurs.  This will also mask off the interrupt in the interrupt
//! controller so that the interrupt.handler no longer is called.
//!
//! \sa IntRegister() for important information about registering interrupt
//! handlers.
//!
//! \return None.
//
//*****************************************************************************
void
SSIIntUnregister(unsigned long ulBase)
{
    //
    // Check the arguments.
    //
    ASSERT(ulBase == SSI_BASE);

    //
    // Disable the interrupt.
    //
    IntDisable(INT_SSI);

    //
    // Unregister the interrupt.handler.
    //
    IntUnregister(INT_SSI);
}

//*****************************************************************************
//
//! Enables individual SSI interrupt sources.
//!
//! \param ulBase specifies the SSI module base address.
//! \param ulIntFlags is a bit mask of the interrupt sources to be enabled.
//!
//! Enables the indicated SSI interrupt sources.  Only the sources that are

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区产品免费精品久久75| 韩国视频一区二区| 蜜桃av噜噜一区二区三区小说| 国产成人精品1024| 欧美一区二区播放| 一区二区三区精品视频| 国产精品自拍av| 91精品欧美福利在线观看| 亚洲欧美偷拍另类a∨色屁股| 久久91精品久久久久久秒播| 在线观看日韩av先锋影音电影院| www国产精品av| 免费在线观看一区| 欧美日韩五月天| 一区二区三区在线视频播放| 成人丝袜高跟foot| 久久久久久黄色| 欧美日韩成人在线| 亚洲视频资源在线| 国产乱码精品一区二区三区av| 欧美一区二区视频在线观看| 亚洲不卡在线观看| 欧美日韩1234| 婷婷亚洲久悠悠色悠在线播放| 日本电影欧美片| 最新国产精品久久精品| eeuss影院一区二区三区| 国产精品女上位| 国产成人午夜电影网| 久久精品视频在线免费观看| 国产一区二区不卡| 欧美精品一区二区三区蜜桃视频 | 91久久线看在观草草青青| 中文字幕 久热精品 视频在线 | 亚洲电影中文字幕在线观看| 色婷婷激情一区二区三区| 亚洲天堂av老司机| 色综合天天做天天爱| 亚洲精品国产成人久久av盗摄| 色综合一个色综合亚洲| 亚洲午夜精品网| 7799精品视频| 国产一本一道久久香蕉| 国产欧美久久久精品影院| 成人av免费在线观看| 日韩一区中文字幕| 亚洲精品午夜久久久| 日本福利一区二区| 日韩黄色片在线观看| 精品蜜桃在线看| 成人福利视频在线| 亚洲国产精品一区二区www在线 | 久久一二三国产| 成人网页在线观看| 亚洲国产视频在线| 精品国产一区二区三区忘忧草 | 久久综合久色欧美综合狠狠| 成人亚洲一区二区一| 亚洲精品国产一区二区精华液| 欧美一a一片一级一片| 免费亚洲电影在线| 欧美国产精品一区| 欧美日韩国产综合视频在线观看| 免费xxxx性欧美18vr| 国产精品久久精品日日| 91精品久久久久久久99蜜桃| 高清国产一区二区三区| 亚洲第一福利视频在线| 精品国产乱码久久| 色素色在线综合| 国内精品国产成人国产三级粉色 | 精品国产在天天线2019| 成人激情开心网| 日日骚欧美日韩| 椎名由奈av一区二区三区| 制服.丝袜.亚洲.另类.中文| 99久久伊人网影院| 久久精品国产澳门| 亚洲午夜久久久久中文字幕久| 久久久久88色偷偷免费 | av亚洲精华国产精华| 日韩高清中文字幕一区| 中文字幕一区二区三区蜜月| 日韩欧美国产三级| 在线一区二区三区四区五区| 国产成人免费视频一区| 日韩电影在线观看网站| 亚洲精品久久嫩草网站秘色| 久久品道一品道久久精品| 3d成人动漫网站| 欧美性xxxxxxxx| 91视频在线观看免费| 国产精品一区专区| 麻豆精品新av中文字幕| 丝袜美腿亚洲一区| 一区二区三区欧美激情| 国产欧美一区视频| 欧美成va人片在线观看| 91精品啪在线观看国产60岁| 欧美性受极品xxxx喷水| 99re6这里只有精品视频在线观看| 国产露脸91国语对白| 久久99深爱久久99精品| 免费高清在线一区| 蜜桃av噜噜一区| 免费成人av在线播放| 美女任你摸久久| 美国精品在线观看| 轻轻草成人在线| 日产精品久久久久久久性色| 午夜精品影院在线观看| 五月天精品一区二区三区| 亚洲国产成人porn| 亚洲国产精品久久久久婷婷884| 亚洲同性同志一二三专区| 国产精品久久久久久久久免费桃花| 久久久久国产精品厨房| 国产欧美日韩不卡| 日韩毛片一二三区| 亚洲精品国产无套在线观| 99国产欧美久久久精品| 成人国产精品免费观看动漫 | 欧美性淫爽ww久久久久无| 欧美体内she精高潮| 欧美日韩亚洲不卡| 日韩欧美国产综合| 国产欧美日韩视频在线观看| 日本一二三四高清不卡| 综合色中文字幕| 一区二区不卡在线播放| 亚洲成av人影院在线观看网| 蜜臀久久久久久久| 国产精品性做久久久久久| eeuss影院一区二区三区| 色综合久久综合| 日韩一区二区在线看片| 国产欧美视频在线观看| 亚洲一区二区三区爽爽爽爽爽 | 亚洲一区二区三区三| 午夜久久久久久电影| 精品一区二区三区av| 不卡电影一区二区三区| 欧美日韩一区二区不卡| 日韩欧美高清一区| 国产精品乱码一区二区三区软件| 亚洲精品国产精华液| 免费观看91视频大全| 国产99久久久久久免费看农村| 色呦呦国产精品| 精品国精品自拍自在线| 亚洲人成网站色在线观看| 午夜久久久影院| 成人理论电影网| 69堂国产成人免费视频| 欧美韩国日本综合| 五月天亚洲婷婷| 成人一区在线看| 欧美一级片在线观看| 国产精品久久久久久妇女6080 | 国产米奇在线777精品观看| 91污片在线观看| 精品少妇一区二区三区| 一区二区三区中文字幕电影 | av一区二区久久| 日韩视频免费观看高清在线视频| 中文字幕在线播放不卡一区| 日韩成人dvd| 欧洲视频一区二区| 国产精品久久久久天堂| 精品一区二区三区视频| 欧美日韩一本到| 自拍偷拍欧美精品| 国产高清亚洲一区| 日韩欧美自拍偷拍| 亚洲韩国一区二区三区| 白白色 亚洲乱淫| 精品国产乱码久久久久久蜜臀| 亚洲第一久久影院| 午夜不卡av免费| 美女国产一区二区三区| 欧美激情一二三区| 精品日韩99亚洲| 国产一区二区三区在线看麻豆| 蜜乳av一区二区三区| 天天做天天摸天天爽国产一区| 久久99久国产精品黄毛片色诱| 粉嫩高潮美女一区二区三区| 91福利在线看| 久久众筹精品私拍模特| 亚洲欧洲制服丝袜| 激情六月婷婷综合| 欧日韩精品视频| 国产日韩欧美一区二区三区综合| 夜夜嗨av一区二区三区网页| 国产一区二区伦理| 欧美精选在线播放| 亚洲国产精品黑人久久久| 免费高清视频精品| 色哟哟一区二区在线观看| 久久久综合九色合综国产精品|