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

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

?? hal_cc2520.c

?? zigbee 無線通信 CC2520 芯片 C語言 原代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***********************************************************************************

  Filename:     hal_cc2520.c

  Description:  This file implements the CC2520 Radio HAL.

***********************************************************************************/

/***********************************************************************************
* INCLUDES
*/
#include "hal_cc2520.h"
#include "hal_mcu.h"


/***********************************************************************************
* CONSTANTS AND DEFINES
*/
#define BLOCK_SIZE  255


/***********************************************************************************
* LOCAL FUNCTIONS
*/
static uint8 GotException(uint8 index);
static uint8 waitException(uint8 exc, uint16 timeOut);
static void clearException(uint32 dwMap);
static void CC2520_INS_RD_ARRAY(uint16 count, uint8  *pData);
static uint8 CC2520_INS_MEMCP_COMMON(uint8 instr, uint8 pri, uint16 count, \
    uint16 src, uint16 dest);

static uint8 CC2520_SPI_TXRX(uint8 x)
{
    CC2520_SPI_TX(x);
    CC2520_SPI_WAIT_RXRDY();
    return CC2520_SPI_RX();
}

/***********************************************************************************
* @fn      GotException
*
* @brief   Check if exception is set
*
* @param  uint8 index
*
* @return  uint8
*/
static uint8 GotException(uint8 index)
{
    uint8 exceptions = CC2520_REGRD8(CC2520_EXCFLAG0 + (index >> 3));
    if (exceptions & BV(index & 0x07)) {
        return TRUE;
    } else {
        return FALSE;
    }
}


/***********************************************************************************
* @fn      waitException
*
* @brief   Wait for exception
*
* @param  uint8 exc
*         uint16 timeOut
*
* @return  uint8
*/
static uint8 waitException(uint8 exc, uint16 timeOut)
{
    while (--timeOut>0) {
        if (GotException(exc))
            break;
        halMcuWaitUs(10);
    }
    return timeOut>0;
}


/***********************************************************************************
* @fn      clearException
*
* @brief   Clear exception flag
*
* @param  uint32 dwMap
*
* @return  none
*/
static void clearException(uint32 dwMap)
{
    CC2520_REGWR24(CC2520_EXCFLAG0, ~dwMap);
}


/***********************************************************************************
* @fn      CC2520_INS_RD_ARRAY
*
* @brief   Read array from CC2520
*
* @param   uint16 count -
*          uint8  *pData -
*
* @return  none
*/
static void CC2520_INS_RD_ARRAY(uint16 count, uint8  *pData)
{
    while (count--) {
        CC2520_SPI_TX(0x00);
        CC2520_SPI_WAIT_RXRDY();
        *pData = CC2520_SPI_RX();
        pData++;
    }
}



/***********************************************************************************
* @fn      CC2520_INS_MEMCP_COMMON
*
* @brief   memory copy
*
* @param   uint8 instr -
*          uint8 pri -
*          uint16 count -
*          uint16 src -
*          uint16 dest -
*
* @return  uint8 - status byte
*/
static uint8 CC2520_INS_MEMCP_COMMON(uint8 instr, uint8 pri, uint16 count, \
    uint16 src, uint16 dest)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(instr | pri);
    CC2520_SPI_TXRX(count);
    CC2520_SPI_TXRX((HIBYTE(src) << 4) | HIBYTE(dest));
    CC2520_SPI_TXRX(LOBYTE(src));
    CC2520_SPI_TXRX(LOBYTE(dest));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* GLOBAL FUNCTIONS
*/

/***********************************************************************************
* @fn      CC2520_INS_WR_ARRAY
*
* @brief   Write array to CC2520
*
* @param   uint16 count -
*          uint8  *pData -
*
* @return  none
*/
void CC2520_INS_WR_ARRAY(uint16 count, uint8  *pData)
{
    while (count--) {
        CC2520_SPI_TX(*pData);
        pData++;
        CC2520_SPI_WAIT_RXRDY();
    }
}


/***********************************************************************************
* @fn      CC2520_INS_STROBE
*
* @brief   send strobe commane
*
* @param   uint8 strobe - strobe command
*
* @return  uint8 - status byte
*/
uint8 CC2520_INS_STROBE(uint8 strobe)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(strobe);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_SNOP
*
* @brief   SNOP instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SNOP(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SNOP);
}


/***********************************************************************************
* @fn      CC2520_SIBUFEX
*
* @brief   SIBUFEX instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SIBUFEX(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SIBUFEX);
}


/***********************************************************************************
* @fn      CC2520_SSAMPLECCA
*
* @brief   Sample CCA instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SSAMPLECCA(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SSAMPLECCA);
}


/***********************************************************************************
* @fn      CC2520_SXOSCON
*
* @brief   SXOSCON instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SXOSCON(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SXOSCON);
}


/***********************************************************************************
* @fn      CC2520_STXCAL
*
* @brief   STXCAL instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_STXCAL(void)
{
    return CC2520_INS_STROBE(CC2520_INS_STXCAL);
}


/***********************************************************************************
* @fn      CC2520_SRXON
*
* @brief   SRXON instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SRXON(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SRXON);
}


/***********************************************************************************
* @fn      CC2520_STXON
*
* @brief   STXON instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_STXON(void)
{
    return CC2520_INS_STROBE(CC2520_INS_STXON);
}


/***********************************************************************************
* @fn      CC2520_STXONCCA
*
* @brief   STXONCCA instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_STXONCCA(void)
{
    return CC2520_INS_STROBE(CC2520_INS_STXONCCA);
}


/***********************************************************************************
* @fn      CC2520_SRFOFF
*
* @brief   SRFOFF instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SRFOFF(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SRFOFF);
}


/***********************************************************************************
* @fn      CC2520_SXOSCOFF
*
* @brief   SXOSCOFF instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SXOSCOFF(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SXOSCOFF);
}


/***********************************************************************************
* @fn      CC2520_SFLUSHRX
*
* @brief   SFLUSHRX instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SFLUSHRX(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
}


/***********************************************************************************
* @fn      CC2520_SFLUSHTX
*
* @brief   SFLUSHTX instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SFLUSHTX(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SFLUSHTX);
}


/***********************************************************************************
* @fn      CC2520_SACK
*
* @brief   SACK instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SACK(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SACK);
}


/***********************************************************************************
* @fn      CC2520_SACKPEND
*
* @brief   SACKPEND instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SACKPEND(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SACKPEND);
}


/***********************************************************************************
* @fn      CC2520_SNACK
*
* @brief   SNACK instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SNACK(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SNACK);
}


/***********************************************************************************
* @fn      CC2520_SRXMASKBITSET
*
* @brief   SRXMASKBITSET instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SRXMASKBITSET(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SRXMASKBITSET);
}


/***********************************************************************************
* @fn      CC2520_SRXMASKBITCLR
*
* @brief   SRXMASKBITCLR instruction strobe
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SRXMASKBITCLR(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SRXMASKBITCLR);
}


/***********************************************************************************
* @fn      CC2520_IBUFLD
*
* @brief   IBUFLD - load instruction to instruction buffer
*
* @param   uint8 i -
*
* @return  uint8 - status byte
*/
uint8 CC2520_IBUFLD(uint8 i)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_IBUFLD);
    CC2520_SPI_TXRX(i);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_SRES
*
* @brief   SRES - Reset device except SPI interface
*
* @param   none
*
* @return  uint8 - status byte
*/
uint8 CC2520_SRES(void)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_SRES);
    CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_MEMRD
*
* @brief   Read memory
*
* @param   uint16 addr
*          uint16 count
*          uint8  *pData
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMRD(uint16 addr, uint16 count, uint8  *pData)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_MEMRD | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_INS_RD_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_MEMRD8
*
* @brief   Read memory 8 bits
*
* @param   uint16 addr
*
* @return  uint8 - result
*/
uint8 CC2520_MEMRD8(uint16 addr)
{
    uint8 value;
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_MEMRD | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    value = CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return value;
}


/***********************************************************************************
* @fn      CC2520_MEMRD16
*
* @brief   Read memory 16 bits
*
* @param   uint16 addr
*
* @return  uint16 - result
*/
uint16 CC2520_MEMRD16(uint16 addr)
{
    EWORD value;
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_MEMRD | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    value.b.b0 = CC2520_SPI_TXRX(0x00);
    value.b.b1 = CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return value.w;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久影院老司| 亚洲一二三区不卡| 亚洲精品亚洲人成人网在线播放| 日韩在线观看一区二区| 国产毛片精品视频| 欧美三级一区二区| 国产精品理论片| 五月激情综合色| av不卡在线观看| 亚洲精品一区二区三区蜜桃下载| 洋洋成人永久网站入口| 国产成人综合视频| 日韩一本二本av| 亚洲成人在线网站| av亚洲精华国产精华精华| 欧美成人精品1314www| 尤物在线观看一区| 不卡一二三区首页| 久久久三级国产网站| 青青草国产成人99久久| 欧美性受xxxx黑人xyx| 中文字幕中文字幕一区二区| 精品亚洲porn| 日韩免费视频线观看| 亚洲成人动漫精品| 欧美亚洲国产一区二区三区| 亚洲福利一二三区| 91一区二区三区在线观看| 国产精品天美传媒沈樵| 国内精品视频一区二区三区八戒| 7777精品伊人久久久大香线蕉超级流畅 | 91尤物视频在线观看| 久久尤物电影视频在线观看| 蜜臀av国产精品久久久久| 欧美三级蜜桃2在线观看| 一区二区三区四区视频精品免费| 91在线免费播放| 亚洲乱码国产乱码精品精的特点 | 久久精品亚洲精品国产欧美| 久久狠狠亚洲综合| 精品国产自在久精品国产| 免费观看91视频大全| 日韩一区二区电影在线| 日本亚洲视频在线| 欧美成人三级在线| 国产精品一区二区视频| 国产农村妇女毛片精品久久麻豆| 国产ts人妖一区二区| 国产精品萝li| 欧洲精品一区二区| 国产·精品毛片| 国产精品丝袜在线| 91免费视频观看| 五月开心婷婷久久| 精品99一区二区| 国产成人aaaa| 一区二区三区精品久久久| 精品视频1区2区| 久久狠狠亚洲综合| 亚洲国产成人私人影院tom| 91一区二区三区在线观看| 亚洲国产精品欧美一二99| 51精品国自产在线| 国产精品一区二区果冻传媒| 国产精品女主播在线观看| 欧美中文字幕一区| 国产在线不卡视频| 亚洲激情自拍偷拍| 欧美精品一区二区精品网| 色综合色狠狠综合色| 蜜乳av一区二区| 中文字幕欧美国产| 在线电影院国产精品| 成人综合在线网站| 日韩黄色一级片| 国产精品传媒入口麻豆| 欧美一三区三区四区免费在线看| 成人永久aaa| 天堂影院一区二区| 国产精品美女www爽爽爽| 91精品国产综合久久久久久| 成人伦理片在线| 麻豆成人久久精品二区三区小说| 成人免费在线视频| 久久综合久久综合亚洲| 欧美日韩国产高清一区二区三区 | www.av精品| 免费久久精品视频| 亚洲一区欧美一区| 中文字幕免费不卡| 日韩精品一区二区三区四区视频 | 91精品欧美福利在线观看| 成人黄色免费短视频| 久久成人精品无人区| 亚洲国产一二三| 亚洲男帅同性gay1069| 久久久不卡网国产精品一区| 在线不卡的av| 欧美日韩综合在线免费观看| 99这里都是精品| 国产黄色成人av| 韩国三级在线一区| 国产美女在线精品| 精彩视频一区二区三区| 天天综合天天综合色| 一区二区三区**美女毛片| 国产精品不卡一区| 中文字幕中文字幕中文字幕亚洲无线| 26uuu成人网一区二区三区| 欧美一级片在线| 欧美日韩黄色一区二区| 欧美日韩午夜在线| 欧美午夜片在线观看| 色诱亚洲精品久久久久久| 91亚洲精品一区二区乱码| av电影一区二区| 成人在线综合网| 高清视频一区二区| 成人h动漫精品| 96av麻豆蜜桃一区二区| 波波电影院一区二区三区| 成人av在线影院| 99国产精品久久久久| 91丨九色丨国产丨porny| 一本到不卡免费一区二区| 一本久久精品一区二区| 欧美曰成人黄网| 欧美日韩国产在线观看| 91精品国产欧美一区二区成人| 欧美女孩性生活视频| 日韩欧美电影一区| 久久亚洲影视婷婷| 国产精品白丝在线| 亚洲成人综合在线| 久久疯狂做爰流白浆xx| 国产老肥熟一区二区三区| 成人av网在线| 欧美日本韩国一区二区三区视频| 欧美一区二区私人影院日本| 精品国产免费一区二区三区四区| 国产欧美一区二区精品忘忧草 | 亚洲男同1069视频| 亚洲第一福利一区| 老司机免费视频一区二区三区| 国产精品资源站在线| av一本久道久久综合久久鬼色| 欧美色图免费看| 久久尤物电影视频在线观看| 亚洲蜜臀av乱码久久精品| 午夜精品福利一区二区三区av| 久久国产成人午夜av影院| 国产91精品露脸国语对白| 在线看一区二区| 久久人人97超碰com| 一区二区三区**美女毛片| 成人av在线电影| 91麻豆精品国产91久久久久久| 久久精品视频一区二区三区| 亚洲国产中文字幕在线视频综合| 国产一区久久久| 欧美日韩一级二级三级| 国产三区在线成人av| 亚洲午夜私人影院| 国产成人午夜精品影院观看视频| 91成人免费在线视频| 精品88久久久久88久久久| 一级女性全黄久久生活片免费| 国内精品不卡在线| 欧美军同video69gay| 国产精品国产三级国产普通话蜜臀| 日韩一区欧美二区| 99精品欧美一区二区蜜桃免费| 精品国产a毛片| 亚洲成人中文在线| av在线一区二区| 久久色成人在线| 日韩av中文字幕一区二区三区| 色诱亚洲精品久久久久久| 久久久久久久久一| 免费观看在线综合| 欧美性做爰猛烈叫床潮| 亚洲图片激情小说| 国产99久久久久久免费看农村| 制服视频三区第一页精品| 一区二区三区免费观看| 成人动漫一区二区在线| 国产三级精品三级在线专区| 麻豆一区二区在线| 欧美一卡在线观看| 亚洲第一会所有码转帖| 91福利区一区二区三区| 亚洲精选免费视频| 91视视频在线观看入口直接观看www | 国产日韩欧美一区二区三区乱码| 奇米精品一区二区三区在线观看| 欧美日精品一区视频| 亚洲一区欧美一区| 欧美日韩在线播| 亚洲成人激情社区| 日韩精品一区国产麻豆|