⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_cc2520.c

📁 zigbee 无线通信 CC2520 芯片 C语言 原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
}


/***********************************************************************************
* @fn      CC2520_MEMRD24
*
* @brief   Read memory 24 bits
*
* @param   uint16 addr
*
* @return  uint32 - result
*/
uint32 CC2520_MEMRD24(uint16 addr)
{
    EDWORD 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);
    value.b.b2 = CC2520_SPI_TXRX(0x00);
    value.b.b3 = 0x00;
    CC2520_SPI_END();
    return value.dw;
}


/***********************************************************************************
* @fn      CC2520_MEMWR
*
* @brief   Write memory
*
* @param   uint16 addr
*          uint16 count
*          uint8  *pData
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMWR(uint16 addr, uint16 count, uint8  *pData)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_MEMWR | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_INS_WR_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_MEMWR8
*
* @brief   Write memory 8 bits
*
* @param   uint16 addr
*          uint8 value
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMWR8(uint16 addr, uint8 value)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_MEMWR | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_SPI_TXRX(value);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_MEMWR16
*
* @brief   Write memory 16 bits
*
* @param   uint16 addr
*          uint16 value
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMWR16(uint16 addr, uint16 value)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_MEMWR | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(value));
    CC2520_SPI_TXRX(HIBYTE(value));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_MEMWR24
*
* @brief   Write memory 24 bits
*
* @param   uint16 addr
*          uint32 value
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMWR24(uint16 addr, uint32 value)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_MEMWR | HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(LOWORD(value)));
    CC2520_SPI_TXRX(HIBYTE(LOWORD(value)));
    CC2520_SPI_TXRX(LOBYTE(HIWORD(value)));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_RXBUF
*
* @brief   Read bytes from RX buffer
*
* @param   uint8 count
*          uint8  *pData
*
* @return  uint8 - status byte
*/
uint8 CC2520_RXBUF(uint8 count, uint8  *pData)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_RXBUF);
    CC2520_INS_RD_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_RXBUF8
*
* @brief   Read 8 bits from RX buffer
*
* @param   none
*
* @return  uint8 - result
*/
uint8 CC2520_RXBUF8(void)
{
    uint8 value;
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_RXBUF);
    value = CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return value;
}


/***********************************************************************************
* @fn      CC2520_RXBUF16
*
* @brief   Read 16 bits from RX buffer
*
* @param   none
*
* @return  uint16 - result
*/
uint16 CC2520_RXBUF16(void)
{
    EWORD value;
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_RXBUF);
    value.b.b0 = CC2520_SPI_TXRX(0x00);
    value.b.b1 = CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return value.w;
}


/***********************************************************************************
* @fn      CC2520_RXBUFCP_BEGIN
*
* @brief   Copy RX buf to memory. Call this routine before CC2520_RXBUFCP_END
*
* @param   uint16 addr - copy destination
*          uint8 *pCurrCount - number of bytes in RX buf
*
* @return  uint8 - status byte
*/
uint8 CC2520_RXBUFCP_BEGIN(uint16 addr, uint8 *pCurrCount)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_RXBUFCP);
    if (pCurrCount) {
        *pCurrCount = CC2520_SPI_TXRX(HIBYTE(addr));
    } else {
        CC2520_SPI_TXRX(HIBYTE(addr));
    }
    return s;
}


/***********************************************************************************
* @fn      CC2520_RXBUFCP_END
*
* @brief   Copy RX buf to memory and read into buffer.
*          Call this routine after CC2520_RXBUFCP_BEGIN.
*
* @param   uint16 addr - copy destination
*          uint8 count - number of bytes
*          uint8  *pData - data buffer
*
* @return  uint8 - status byte
*/
uint8 CC2520_RXBUFCP_END(uint16 addr, uint8 count, uint8  *pData)
{
    uint8 s;
    s = CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_INS_RD_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_RXBUFMOV
*
* @brief   RXBUFMOV instruction - moves oldest bytes from RX buffer to the memory
*          location addr.
*
* @param   uint8 pri - instruction priority
*          uint16 addr - memory location
*          uint8 count - number of bytes
*          uint8 *pCurrCount
*
* @return  uint8 - status byte
*/
uint8 CC2520_RXBUFMOV(uint8 pri, uint16 addr, uint8 count, uint8 *pCurrCount)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_RXBUFMOV | pri);
    if (pCurrCount) {
        *pCurrCount = CC2520_SPI_TXRX(count);
    } else {
        CC2520_SPI_TXRX(count);
    }
    CC2520_SPI_TXRX(HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_TXBUF
*
* @brief   Write data to TX buffer
*
* @param   uint8 count - number of bytes
*          uint8  *pData - pointer to data buffer
*
* @return  uint8 - status byte
*/
uint8 CC2520_TXBUF(uint8 count, uint8  *pData)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_TXBUF);
    CC2520_INS_WR_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_TXBUF8
*
* @brief   Write 8 bits to TX buffer
*
* @param   uint8 data
*
* @return  none
*/
void CC2520_TXBUF8(uint8 data)
{
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_TXBUF);
    CC2520_SPI_TXRX(data);
    CC2520_SPI_END();
}


/***********************************************************************************
* @fn      CC2520_TXBUF16
*
* @brief   Write 16 bits to TX buffer
*
* @param   uint16 data
*
* @return  none
*/
void CC2520_TXBUF16(uint16 data)
{
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_TXBUF);
    CC2520_SPI_TXRX(LOBYTE(data));
    CC2520_SPI_TXRX(HIBYTE(data));
    CC2520_SPI_END();
}


/***********************************************************************************
* @fn      CC2520_TXBUFCP
*
* @brief   Copy data from memory location addr to TX buf
*
* @param   uint8 pri - priority
*          uint16 addr - memory location
*          uint8 count - number of bytes
*          uint8 *pCurrCount
*
* @return  uint8 - status byte
*/
uint8 CC2520_TXBUFCP(uint8 pri, uint16 addr, uint8 count, uint8 *pCurrCount)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_TXBUFCP | pri);
    if (pCurrCount) {
        *pCurrCount = CC2520_SPI_TXRX(count);
    } else {
        CC2520_SPI_TXRX(count);
    }
    CC2520_SPI_TXRX(HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_RANDOM
*
* @brief   Random generated bytes
*
* @param   uint8 count
*          uint8  *pData
*
* @return  uint8 - status byte
*/
uint8 CC2520_RANDOM(uint8 count, uint8  *pData)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_RANDOM);
    CC2520_SPI_TXRX(0x00);
    CC2520_INS_RD_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_RANDOM8
*
* @brief   Random generated byte
*
* @param  none
*
* @return  uint8
*/
uint8 CC2520_RANDOM8(void)
{
    uint8 value;
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_RANDOM);
    CC2520_SPI_TXRX(0x00);
    value = CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return value;
}


/***********************************************************************************
* @fn      CC2520_RANDOM16
*
* @brief   Random generated bytes
*
* @param  none
*
* @return  uint16
*/
uint16 CC2520_RANDOM16(void)
{
    EWORD value;
    CC2520_SPI_BEGIN();
    CC2520_SPI_TXRX(CC2520_INS_RANDOM);
    CC2520_SPI_TXRX(0x00);
    value.b.b0 = CC2520_SPI_TXRX(0x00);
    value.b.b1 = CC2520_SPI_TXRX(0x00);
    CC2520_SPI_END();
    return value.w;
}


/***********************************************************************************
* @fn      CC2520_RXMASKOR
*
* @brief   RXMASKOR instruction - bitwise OR between RX enable mask and orMask
*
* @param  uint16 orMask -
*
* @return  uint8 - status byte
*/
uint8 CC2520_RXMASKOR(uint16 orMask)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_RXMASKOR);
    CC2520_SPI_TXRX(HIBYTE(orMask));
    CC2520_SPI_TXRX(LOBYTE(orMask));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_RXMASKAND
*
* @brief   RXMASKAND - bitwise AND between RX enable mask and andMask
*
* @param  uint16 andMask
*
* @return  uint8 - status byte
*/
uint8 CC2520_RXMASKAND(uint16 andMask)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_RXMASKAND);
    CC2520_SPI_TXRX(HIBYTE(andMask));
    CC2520_SPI_TXRX(LOBYTE(andMask));
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_MEMCP
*
* @brief   MEMCP - Copy data between memory blocks
*
* @param  uint8 pri - priority
*         uint16 count - number of bytes
*         uint16 src - source address
*         uint16 dest - destination address
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMCP(uint8 pri, uint16 count, uint16 src, uint16 dest)
{
    return CC2520_INS_MEMCP_COMMON(CC2520_INS_MEMCP, pri, count, src, dest);
}


/***********************************************************************************
* @fn      CC2520_MEMCPR
*
* @brief   MEMCPR - Copy data between memory blocks and revert endianess
*
* @param  uint8 pri - priority
*         uint16 count - number of bytes
*         uint16 src - source address
*         uint16 dest - destination address
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMCPR(uint8 pri, uint16 count, uint16 src, uint16 dest)
{
    return CC2520_INS_MEMCP_COMMON(CC2520_INS_MEMCPR, pri, count, src, dest);
}


/***********************************************************************************
* @fn      CC2520_MEMXCP
*
* @brief   MEMXCP - XOR one memory block with another memory block
*
* @param  uint8 pri - priority
*         uint16 count - number of bytes
*         uint16 src - source address
*         uint16 dest - destination address
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMXCP(uint8 pri, uint16 count, uint16 src, uint16 dest)
{
    return CC2520_INS_MEMCP_COMMON(CC2520_INS_MEMXCP, pri, count, src, dest);
}


/***********************************************************************************
* @fn      CC2520_MEMXWR
*
* @brief   MEMXWR - XOR memory
*
* @param  uint16 addr - memory address
*         uint16 count - number of bytes
*         uint8  *pData - unaltered data
*
* @return  uint8 - status byte
*/
uint8 CC2520_MEMXWR(uint16 addr, uint16 count, uint8  *pData)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_MEMXWR);
    CC2520_SPI_TXRX(HIBYTE(addr));
    CC2520_SPI_TXRX(LOBYTE(addr));
    CC2520_INS_WR_ARRAY(count, pData);
    CC2520_SPI_END();
    return s;
}


/***********************************************************************************
* @fn      CC2520_BSET
*
* @brief   BSET - set a single bit
*
* @param  uint8 bitAddr - address
*
* @return  uint8 - status byte
*/
uint8 CC2520_BSET(uint8 bitAddr)
{
    uint8 s;
    CC2520_SPI_BEGIN();
    s = CC2520_SPI_TXRX(CC2520_INS_BSET);
    CC2520_SPI_TXRX(bitAddr);
    CC2520_SPI_END();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -