mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
367 lines
9.3 KiB
C
367 lines
9.3 KiB
C
/********************************** (C) COPYRIGHT *******************************
|
||
* File Name : CH58x_SPI0.c
|
||
* Author : WCH
|
||
* Version : V1.2
|
||
* Date : 2021/11/17
|
||
* Description
|
||
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*******************************************************************************/
|
||
|
||
#include "CH58x_common.h"
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterDefInit
|
||
*
|
||
* @brief <20><><EFBFBD><EFBFBD>ģʽĬ<CABD>ϳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ģʽ0+3<><33>ȫ˫<C8AB><CBAB>+8MHz
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_MasterDefInit(void)
|
||
{
|
||
R8_SPI0_CLOCK_DIV = 4; // <20><>Ƶʱ<C6B5><CAB1>4<EFBFBD><34>Ƶ
|
||
R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
|
||
R8_SPI0_CTRL_MOD = RB_SPI_MOSI_OE | RB_SPI_SCK_OE;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF; // <20><><EFBFBD><EFBFBD>BUFFER/FIFO<46>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>IF_BYTE_END<4E><44>־
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<4D><41>ʽ
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_CLKCfg
|
||
*
|
||
* @brief SPI0 <20><>ʱ<D7BC><CAB1><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>= d*Tsys
|
||
*
|
||
* @param c - ʱ<>ӷ<EFBFBD>Ƶϵ<C6B5><CFB5>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_CLKCfg(uint8_t c)
|
||
{
|
||
if(c == 2)
|
||
{
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_MST_DLY_EN;
|
||
}
|
||
else
|
||
{
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_MST_DLY_EN;
|
||
}
|
||
R8_SPI0_CLOCK_DIV = c;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_DataMode
|
||
*
|
||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||
*
|
||
* @param m - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ refer to ModeBitOrderTypeDef
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_DataMode(ModeBitOrderTypeDef m)
|
||
{
|
||
switch(m)
|
||
{
|
||
case Mode0_LowBitINFront:
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_MST_SCK_MOD;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_BIT_ORDER;
|
||
break;
|
||
case Mode0_HighBitINFront:
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_MST_SCK_MOD;
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_BIT_ORDER;
|
||
break;
|
||
case Mode3_LowBitINFront:
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_MST_SCK_MOD;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_BIT_ORDER;
|
||
break;
|
||
case Mode3_HighBitINFront:
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_MST_SCK_MOD;
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_BIT_ORDER;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterSendByte
|
||
*
|
||
* @brief <20><><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD> (buffer)
|
||
*
|
||
* @param d - <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_MasterSendByte(uint8_t d)
|
||
{
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;
|
||
R8_SPI0_BUFFER = d;
|
||
while(!(R8_SPI0_INT_FLAG & RB_SPI_FREE));
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterRecvByte
|
||
*
|
||
* @brief <20><><EFBFBD>յ<EFBFBD><D5B5>ֽ<EFBFBD> (buffer)
|
||
*
|
||
* @param none
|
||
*
|
||
* @return <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||
*/
|
||
uint8_t SPI0_MasterRecvByte(void)
|
||
{
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;
|
||
R8_SPI0_BUFFER = 0xFF; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
while(!(R8_SPI0_INT_FLAG & RB_SPI_FREE));
|
||
return (R8_SPI0_BUFFER);
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterTrans
|
||
*
|
||
* @brief ʹ<><CAB9>FIFO<46><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ֽ<EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>4095
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_MasterTrans(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
uint16_t sendlen;
|
||
|
||
sendlen = len;
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||
R16_SPI0_TOTAL_CNT = sendlen; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END;
|
||
while(sendlen)
|
||
{
|
||
if(R8_SPI0_FIFO_COUNT < SPI_FIFO_SIZE)
|
||
{
|
||
R8_SPI0_FIFO = *pbuf;
|
||
pbuf++;
|
||
sendlen--;
|
||
}
|
||
}
|
||
while(R8_SPI0_FIFO_COUNT != 0); // <20>ȴ<EFBFBD>FIFO<46>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterRecv
|
||
*
|
||
* @brief ʹ<><CAB9>FIFO<46><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>ֽ<EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>4095
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_MasterRecv(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
uint16_t readlen;
|
||
|
||
readlen = len;
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||
R16_SPI0_TOTAL_CNT = len; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD>FIFO<46><4F><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>볤<EFBFBD>Ȳ<EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END;
|
||
while(readlen)
|
||
{
|
||
if(R8_SPI0_FIFO_COUNT)
|
||
{
|
||
*pbuf = R8_SPI0_FIFO;
|
||
pbuf++;
|
||
readlen--;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterDMATrans
|
||
*
|
||
* @brief DMA<4D><41>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_MasterDMATrans(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;
|
||
R16_SPI0_DMA_BEG = (uint32_t)pbuf;
|
||
R16_SPI0_DMA_END = (uint32_t)(pbuf + len);
|
||
R16_SPI0_TOTAL_CNT = len;
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_DMA_ENABLE;
|
||
while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END));
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_MasterDMARecv
|
||
*
|
||
* @brief DMA<4D><41>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_MasterDMARecv(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR;
|
||
R16_SPI0_DMA_BEG = (uint32_t)pbuf;
|
||
R16_SPI0_DMA_END = (uint32_t)(pbuf + len);
|
||
R16_SPI0_TOTAL_CNT = len;
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_DMA_ENABLE;
|
||
while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END));
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveInit
|
||
*
|
||
* @brief <20>豸ģʽĬ<CABD>ϳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MISO<53><4F>GPIO<49><4F>ӦΪ<D3A6><CEAA><EFBFBD><EFBFBD>ģʽ
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_SlaveInit(void)
|
||
{
|
||
R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
|
||
R8_SPI0_CTRL_MOD = RB_SPI_MISO_OE | RB_SPI_MODE_SLAVE;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveRecvByte
|
||
*
|
||
* @brief <20>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @return <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
uint8_t SPI0_SlaveRecvByte(void)
|
||
{
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR;
|
||
while(R8_SPI0_FIFO_COUNT == 0);
|
||
return R8_SPI0_FIFO;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveSendByte
|
||
*
|
||
* @brief <20>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param d - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_SlaveSendByte(uint8_t d)
|
||
{
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;
|
||
R8_SPI0_FIFO = d;
|
||
while(R8_SPI0_FIFO_COUNT != 0); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveRecv
|
||
*
|
||
* @brief <20>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_SlaveRecv(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
uint16_t revlen;
|
||
|
||
revlen = len;
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR;
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END;
|
||
while(revlen)
|
||
{
|
||
if(R8_SPI0_FIFO_COUNT)
|
||
{
|
||
*pbuf = R8_SPI0_FIFO;
|
||
pbuf++;
|
||
revlen--;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveTrans
|
||
*
|
||
* @brief <20>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>4095
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_SlaveTrans(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
uint16_t sendlen;
|
||
|
||
sendlen = len;
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END;
|
||
while(sendlen)
|
||
{
|
||
if(R8_SPI0_FIFO_COUNT < SPI_FIFO_SIZE)
|
||
{
|
||
R8_SPI0_FIFO = *pbuf;
|
||
pbuf++;
|
||
sendlen--;
|
||
}
|
||
}
|
||
while(R8_SPI0_FIFO_COUNT != 0); // <20>ȴ<EFBFBD>FIFO<46>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveDMARecv
|
||
*
|
||
* @brief DMA<4D><41>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_SlaveDMARecv(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR;
|
||
R16_SPI0_DMA_BEG = (uint32_t)pbuf;
|
||
R16_SPI0_DMA_END = (uint32_t)(pbuf + len);
|
||
R16_SPI0_TOTAL_CNT = len;
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_DMA_ENABLE;
|
||
while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END));
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn SPI0_SlaveDMATrans
|
||
*
|
||
* @brief DMA<4D><41>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param pbuf - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
|
||
* @param len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void SPI0_SlaveDMATrans(uint8_t *pbuf, uint16_t len)
|
||
{
|
||
R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR;
|
||
R16_SPI0_DMA_BEG = (uint32_t)pbuf;
|
||
R16_SPI0_DMA_END = (uint32_t)(pbuf + len);
|
||
R16_SPI0_TOTAL_CNT = len;
|
||
R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END | RB_SPI_IF_DMA_END;
|
||
R8_SPI0_CTRL_CFG |= RB_SPI_DMA_ENABLE;
|
||
while(!(R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END));
|
||
R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;
|
||
}
|