📄 hal_cc2520.c
字号:
}
/***********************************************************************************
* @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 + -