You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

218 lines
5.3 KiB

/********************************** (C) COPYRIGHT *******************************
* File Name : CH59x_SPI.h
* Author : WCH
* Version : V1.2
* Date : 2021/11/17
* Description
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
#ifndef __CH59x_SPI_H__
#define __CH59x_SPI_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief SPI0 interrupt bit define
*/
#define SPI0_IT_FST_BYTE RB_SPI_IE_FST_BYTE // �ӻ�ģʽ�����ֽ�����ģʽ�£����յ����ֽ��ж�
#define SPI0_IT_FIFO_OV RB_SPI_IE_FIFO_OV // FIFO ����
#define SPI0_IT_DMA_END RB_SPI_IE_DMA_END // DMA ��������
#define SPI0_IT_FIFO_HF RB_SPI_IE_FIFO_HF // FIFO ʹ�ù���
#define SPI0_IT_BYTE_END RB_SPI_IE_BYTE_END // ���ֽڴ�������
#define SPI0_IT_CNT_END RB_SPI_IE_CNT_END // ȫ���ֽڴ�������
/**
* @brief Configuration data mode
*/
typedef enum
{
Mode0_LowBitINFront = 0, // ģʽ0����λ��ǰ
Mode0_HighBitINFront, // ģʽ0����λ��ǰ
Mode3_LowBitINFront, // ģʽ3����λ��ǰ
Mode3_HighBitINFront, // ģʽ3����λ��ǰ
} ModeBitOrderTypeDef;
/**
* @brief Configuration SPI0 slave mode
*/
typedef enum
{
Mode_DataStream = 0, // ������ģʽ
Mose_FirstCmd, // ���ֽ�����ģʽ
} Slave_ModeTypeDef;
/**
* @brief ģʽĬϳʼģʽ0+3ȫ˫+8MHz
*/
void SPI0_MasterDefInit(void);
/**
* @brief SPI0 ׼ʱã= d*Tsys
*
* @param c - ʱӷƵϵ
*/
void SPI0_CLKCfg(uint8_t c);
/**
* @brief ģʽ
*
* @param m - ģʽ refer to ModeBitOrderTypeDef
*/
void SPI0_DataMode(ModeBitOrderTypeDef m);
/**
* @brief ͵ֽ (buffer)
*
* @param d - ֽ
*/
void SPI0_MasterSendByte(uint8_t d);
/**
* @brief յֽ (buffer)
*
* @param none
*/
uint8_t SPI0_MasterRecvByte(void);
/**
* @brief ʹFIFOͶֽ
*
* @param pbuf - ͵׵ַ
* @param len - ͵ݳȣ4095
*/
void SPI0_MasterTrans(uint8_t *pbuf, uint16_t len);
/**
* @brief ʹFIFOնֽ
*
* @param pbuf - յ׵ַ
* @param len - յݳȣ4095
*/
void SPI0_MasterRecv(uint8_t *pbuf, uint16_t len);
/**
* @brief DMAʽ
*
* @param pbuf - ʼַ,Ҫֽڶ
* @param len - ݳ
*/
void SPI0_MasterDMATrans(uint8_t *pbuf, uint16_t len);
/**
* @brief DMAʽ
*
* @param pbuf - ݴʼַ,Ҫֽڶ
* @param len - ݳ
*/
void SPI0_MasterDMARecv(uint8_t *pbuf, uint16_t len);
void SPI1_MasterDefInit(void); /* ����ģʽĬ�ϳ�ʼ����ģʽ0+3��ȫ˫��+8MHz */
void SPI1_CLKCfg(UINT8 c); /* SPI1 ��׼ʱ�����ã�= d*Tsys */
void SPI1_DataMode(ModeBitOrderTypeDef m); /* ����������ģʽ */
void SPI1_MasterSendByte(UINT8 d); /* ���͵��ֽ� (buffer) */
UINT8 SPI1_MasterRecvByte(void); /* ���յ��ֽ� (buffer) */
void SPI1_MasterTrans(UINT8 *pbuf, UINT16 len); /* ʹ��FIFO�������Ͷ��ֽ� */
void SPI1_MasterRecv(UINT8 *pbuf, UINT16 len); /* ʹ��FIFO�������ն��ֽ� */
/**
* @brief ģʽĬϳʼMISOGPIOӦΪģʽ
*/
void SPI0_SlaveInit(void);
/**
* @brief ֽ
*
* @param d - ֽ
*/
#define SetFirstData(d) (R8_SPI0_SLAVE_PRE = d)
/**
* @brief ӻģʽһֽ
*
* @param d -
*/
void SPI0_SlaveSendByte(uint8_t d);
/**
* @brief ӻģʽһֽ
*
* @return յ
*/
uint8_t SPI0_SlaveRecvByte(void);
/**
* @brief ӻģʽͶֽ
*
* @param pbuf - ͵׵ַ
* @param len - ͵ݳȣ4095
*/
void SPI0_SlaveTrans(uint8_t *pbuf, uint16_t len);
/**
* @brief ӻģʽնֽ
*
* @param pbuf - ݴʼַ
* @param len - ݳ
*/
void SPI0_SlaveRecv(uint8_t *pbuf, uint16_t len);
/**
* @brief DMAʽ
*
* @param pbuf - ʼַ,Ҫֽڶ
* @param len - ݳ
*/
void SPI0_SlaveDMATrans(uint8_t *pbuf, uint16_t len);
/**
* @brief DMAʽ
*
* @param pbuf - ݴʼַ,Ҫֽڶ
* @param len - ݳ
*/
void SPI0_SlaveDMARecv(uint8_t *pbuf, uint16_t len);
/**
* @brief SPI0ж
*
* @param s - ʹ/ر
* @param f - refer to SPI0 interrupt bit define
*/
#define SPI0_ITCfg(s, f) ((s) ? (R8_SPI0_INTER_EN |= f) : (R8_SPI0_INTER_EN &= ~f))
/**
* @brief ȡжϱ־״̬0-δλ(!0)-
*
* @param f - refer to SPI0 interrupt bit define
*/
#define SPI0_GetITFlag(f) (R8_SPI0_INT_FLAG & f)
/**
* @brief ǰжϱ־
*
* @param f - refer to SPI0 interrupt bit define
*/
#define SPI0_ClearITFlag(f) (R8_SPI0_INT_FLAG = f)
/**
* @brief رSPI0
*/
#define SPI0_Disable() (R8_SPI0_CTRL_MOD &= ~(RB_SPI_MOSI_OE | RB_SPI_SCK_OE | RB_SPI_MISO_OE))
uint8_t SPI0_MasterSendByte_tang(uint8_t data);
#ifdef __cplusplus
}
#endif
#endif // __CH59x_SPI_H__