Files
TencentOS-tiny/components/connectivity/Modbus/3rdparty/freemodbus-v1.6/demo/STR71X/library/bspi.c
Supowang1989 ef82dbfc6d add modbus slave support
add modbus slave support
2020-02-24 21:40:06 +08:00

172 lines
6.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
* File Name : bspi.c
* Author : MCD Application Team
* Date First Issued : 05/16/2003
* Description : This file provides all the BSPI software functions
********************************************************************************
* History:
* 24/05/2005 : V3.0
* 30/11/2004 : V2.0
* 14/07/2004 : V1.3
* 01/01/2004 : V1.2
*******************************************************************************
THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT
OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/
#include "bspi.h"
/*******************************************************************************
* Function Name : BSPI_Init
* Description : Initializes BSPI peripheral control and registers to their default reset values.
* Input : BSPIx where x can be 0 or 1 to select the BSPI peripheral.
* Output : BSPI peripheral registers and BSPI global variables are initialized.
* Return : None.
*******************************************************************************/
void BSPI_Init(BSPI_TypeDef *BSPIx)
{
BSPIx->CSR2 = 0x41;
BSPIx->CSR1 = 0x00;
BSPIx->CLK = 0x06;
}
/*******************************************************************************
* Function Name : BSPI_TrItSrc.
* Description : Configures the transmit interrupt source.
* Input 1 : BSPIx where x can be 0 or 1 to select the BSPI peripheral.
* Input 2 : TrItSrc: specifies the transmit interrupt source.
* : Refer to the section Transmit Interrupt Sources for more details on the
* : allowed values of this parameter.
* Output : TIE bit in BSPCSR2 register.
* Return : None.
*******************************************************************************/
void BSPI_TrItSrc(BSPI_TypeDef *BSPIx, BSPI_TR_IT_SRCS TrItSrc)
{
switch (TrItSrc)
{
case BSPI_TR_DIS:
BSPIx->CSR2 &= ~0xC000;
break;
case BSPI_TR_FE:
BSPIx->CSR2 &= ~0x8000;
BSPIx->CSR2 |= 0x4000;
break;
case BSPI_TR_UFL:
BSPIx->CSR2 &= ~0x4000;
BSPIx->CSR2 |= 0x8000;
break;
case BSPI_TR_FF:
BSPIx->CSR2 |= 0xC000;
break;
}
}
/*******************************************************************************
* Function Name : BSPI_RcItSrc.
* Description : Configures the receive interrupt source.
* Input 1 : BSPIx where x can be 0 or 1 to select the BSPI peripheral.
* Input 2 : RcItSrc: specifies the source for the receive interrupt.
* : Refer to the section Receive Interrupt Sources for more details on the
* : allowed values of this parameter.
* Output : RIE bit in BSPCSR1 is register.
* Return : None.
*******************************************************************************/
void BSPI_RcItSrc(BSPI_TypeDef *BSPIx, BSPI_RC_IR_SRCS RcItSrc)
{
switch (RcItSrc)
{
case BSPI_RC_DIS:
BSPIx->CSR1 &= ~0x000C;
break;
case BSPI_RC_FNE:
BSPIx->CSR1 &= ~0x0008;
BSPIx->CSR1 |= 0x0004;
break;
case BSPI_RC_FF:
BSPIx->CSR1 |= 0x000C;
break;
}
}
/*******************************************************************************
* Function Name : BSPI_TrFifoDepth
* Description : Configures BSPI transmission FIFO number of words.
* Input 1 : BSPIx where x can be 0 or 1 to select the BSPI.
* Input 2 : TDepth:specifies the depth of the transmit FIFO.
* Output : TFE bit in BSPCSR2 register.
* Return : None.
*******************************************************************************/
void BSPI_TrFifoDepth(BSPI_TypeDef *BSPIx, u8 TDepth)
{
if (TDepth > 0 && TDepth < 11)
{
TDepth--;
BSPIx->CSR2 &= (TDepth*0x400) | ~0x3C00;
BSPIx->CSR2 |= TDepth*0x400;
}
else BSPIx->CSR2 &= ~0x3C00;
}
/*******************************************************************************
* Function Name : BSPI_RcFifoDepth
* Description : Configures BSPI reception FIFO number of words.
* Input 1 : BSPIx where x can be 0 or 1 to select the BSPI peripheral.
* Input 2 : RDepth:specifies the depth of the receive FIFO.
* Output : RFE bits [3:0] in BSPCSR1 register.
* Return : None.
*******************************************************************************/
void BSPI_RcFifoDepth(BSPI_TypeDef *BSPIx, u8 RDepth)
{
if (RDepth > 0 && RDepth < 11)
{
RDepth--;
BSPIx->CSR1 &= (RDepth*0x1000) | ~0xF000;
BSPIx->CSR1 |= RDepth*0x1000;
}
else BSPIx->CSR1 &= ~0xF000;
}
/*******************************************************************************
* Function Name : BSPI_BufferSend.
* Description : Transmits data from a buffer.
* Input 1 : BSPIx where x can be 0 or 1 to select the BSPI peripheral.
* Input 2 : PtrToBuffer is an u8 pointer to the first word of the buffer to be transmitted.
* Input 3 : NbOfWords parameter indicates the number of words saved in the buffer to be sent.
* Output : None.
* Return : None.
*******************************************************************************/
void BSPI_BufferSend(BSPI_TypeDef *BSPIx, u8 *PtrToBuffer, u8 NbOfWords)
{
vu8 SendWord = 0;
while (SendWord < NbOfWords)
{
BSPI_WordSend(BSPIx, *(PtrToBuffer+SendWord));
SendWord++;
}
}
/*******************************************************************************
* Function Name : BSPI_BufferReceive.
* Description : Receives number of data words and stores them in user defined area.
* Input 1 : BSPIx where x can be 0 or 1 to select the BSPI peripheral.
* Input 2 : PtrToBuffer is an u8 pointer to the first word of the defined area to save the received buffer.
* Input 3 : NbOfWords parameter indicates the number of words to be received in the buffer.
* Output : None.
* Return : None.
*******************************************************************************/
void BSPI_BufferReceive(BSPI_TypeDef *BSPIx, u8 *PtrToBuffer, u8 NbOfWords)
{
vu16 ReceiveWord = 0;
while (ReceiveWord < NbOfWords)
{
*(PtrToBuffer+ReceiveWord) = BSPI_WordReceive(BSPIx);
ReceiveWord++;
}
}
/******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/