add modbus slave support

add modbus slave support
This commit is contained in:
Supowang1989
2020-02-24 21:40:06 +08:00
parent 79be128f5f
commit ef82dbfc6d
1129 changed files with 295648 additions and 1776 deletions

View File

@@ -0,0 +1,171 @@
/******************** (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 <20>Transmit Interrupt Sources<65> 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 <20>Receive Interrupt Sources<65> 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 <20>u8<75> 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 <20>u8<75> 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****/