⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bspi.c

📁 arm(str710)usb功能的实现
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                      
**                                          STR710 development team
**                                          
**
**                                 http://www.appchip.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: tim.c
** 创 建 人: lhl
** 创建日期: 2006年5月11日
** 描    述: 该文件包含了timer的基本功能函数
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: lhl
** 版    本: V1.0
** 日   期: 2006年5月11日
** 描   述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include "bspi.h"

#if EN_ARM_BSPI > 0		/* 决定是否编译该文件 */

/******************************************* 全局变量定义 ***********************************************/

/******************************************* 局部函数声明 ***********************************************/



/*********************************************************************************************************
;** 函数名称: BSPI_Reset
;** 功能描述: 复位指定的SPI接口为复位值
;** 
;** 参    数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_Reset(BSPI_TYPES_T bspi)
{
  BSPIx_CSR2(bspi) = 0x41;
  BSPIx_CSR1(bspi) = 0x00;
  BSPIx_CLK(bspi)  = 0x06;
}

/*********************************************************************************************************
;** 函数名称: BSPI_TransmitItCfg
;** 功能描述: 配置BSPI接口传送时中断类型
;** 
;** 参    数: bspi: 	指定的SPI类型(BSPI0, BSPI1)
;**           tr_it_src:中断类型(BSPI_TR_DIS, BSPI_TR_FE, BSPI_TR_UFL, BSPI_TR_FF)
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_TransmitItCfg(BSPI_TYPES_T bspi, BSPI_TR_IT_SRCS_T tr_it_src)
{
	switch (tr_it_src)
  	{
    	case BSPI_TR_DIS:
      		BSPIx_CSR2(bspi) &= ~0xC000;
     	 	break;
		case BSPI_TR_FE:
	  		BSPIx_CSR2(bspi) &= ~0x8000;
	  		BSPIx_CSR2(bspi) |= 0x4000;
      		break;
		case BSPI_TR_UFL:
	  		BSPIx_CSR2(bspi) &= ~0x4000;
	  		BSPIx_CSR2(bspi) |= 0x8000;
	  		break;
		case BSPI_TR_FF:
	  		BSPIx_CSR2(bspi) |= 0xC000;
	  		break;
  }
}

/*********************************************************************************************************
;** 函数名称: BSPI_ReceiveItCfg
;** 功能描述: 配置BSPI接口接收时中断类型
;** 
;** 参    数: bspi: 	 指定的SPI类型(BSPI0, BSPI1)
;**           rec_it_src:中断类型(BSPI_RC_DIS, BSPI_RC_FNE, BSPI_RC_FF)
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_ReceiveItCfg(BSPI_TYPES_T bspi, BSPI_RC_IR_SRCS_T rec_it_src)
{
	switch (rec_it_src)
  	{
    	case BSPI_RC_DIS:
      		BSPIx_CSR1(bspi) &= ~0x000C;
      		break;
		case BSPI_RC_FNE:
	  		BSPIx_CSR1(bspi) &= ~0x0008;
	  		BSPIx_CSR1(bspi) |= 0x0004;
      		break;
		case BSPI_RC_FF:
	  		BSPIx_CSR1(bspi) |= 0x000C;
      		break;
  }
}
/*********************************************************************************************************
;** 函数名称: BSPI_TransmitFifoCfg
;** 功能描述: 配置BSPI接口发送缓冲区深度
;** 
;** 参    数: bspi :指定的SPI类型(BSPI0, BSPI1)
;**           depth:缓冲区(FIFO)长度
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_TransmitFifoCfg(BSPI_TYPES_T bspi, UWORD8 depth)
{
	if (depth > 0 && depth < 10)
  	{
    	depth--;
    	BSPIx_CSR2(bspi) &= (depth * 0x400) | ~0x3C00;
    	BSPIx_CSR2(bspi) |= depth * 0x400;
  	}
  	else 
  		BSPIx_CSR2(bspi) &= ~0x3C00;
}
/*********************************************************************************************************
;** 函数名称: BSPI_ReceiveFifoCfg
;** 功能描述: 配置BSPI接口接收缓冲区深度
;** 
;** 参    数: bspi :指定的SPI类型(BSPI0, BSPI1)
;**           depth:缓冲区(FIFO)长度
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_ReceiveFifoCfg(BSPI_TYPES_T bspi, UWORD8 depth)
{
	if (depth > 0 && depth < 10)
  	{
    	depth--;
    	BSPIx_CSR1(bspi) &= (depth * 0x1000) | ~0xF000;
    	BSPIx_CSR1(bspi) |= depth * 0x1000;
  	}
  	else 
  		BSPIx_CSR1(bspi) &= ~0xF000;
}

/*********************************************************************************************************
;** 函数名称: BSPI_BufferSend
;** 功能描述: BSPI 从指定的FIFO发送数据
;** 
;** 参    数: bspi:       指定的SPI类型(BSPI0, BSPI1)
;**           ptr_buffer: 指向发送缓冲区的指针
;**           word_number:发送数据长度
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_BufferSend(BSPI_TYPES_T bspi, UWORD8 *ptr_buffer, UWORD8 word_number)
{
	volatile UWORD8 send_word = 0;
	
  	while (send_word < word_number)
  	{
    	BSPI_SalveWordSend(bspi, (UWORD16)*(ptr_buffer + send_word));
    	send_word++;
  	}
}

/*********************************************************************************************************
;** 函数名称: BSPI_BufferReceive
;** 功能描述: BSPI 从指定的FIFO接收数据
;** 
;** 参    数: bspi:       指定的SPI类型(BSPI0, BSPI1)
;**           ptr_buffer: 指向接收缓冲区的指针
;**           word_number:接收数据长度
;**          
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_BufferReceive(BSPI_TYPES_T bspi, UWORD8 *ptr_buffer, UWORD8 word_number)
{
 	volatile UWORD16 receive_word = 0;
 	
  	while (receive_word < word_number)
  	{
    	*(ptr_buffer+receive_word) = BSPI_SalveWordReceive(bspi);
    	receive_word++;
  	}
}

/*********************************************************************************************************
;** 函数名称: BSPI_Init
;** 功能描述: 初始化SPI接口
;** 
;** 参    数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;**           mode: BSPI模式选择--MASTER, SLAVE
;**
;** 返 回 值: None
;**         
;** 作   者: lhl
;** 日   期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_Init(BSPI_TYPES_T bspi, BSPI_MODES_T mode)
{
	
	if(bspi == BSPI0)							/* 配置指定BSPI对应的GIPO模式 				*/
	{
		BSPI_Reset(bspi);						/* 复位指定的BSPI							*/			
		BSPI_ClockDividerConfig(bspi, 8);		/* 配置BSPI波特率为APB1/8       			*/
		BSPI_Enable(bspi, ENABLE);				/* 允许指定类型的BSPI           			*/
		BSPI_MasterEnable(bspi, DISABLE);		/* 配置指定的BSPI为SLAVE模式   				*/
		BSPI_ClkActiveHigh(bspi, ENABLE);		/* 配置SCK为高激活 							*/
		BSPI_ClkFEdge(bspi, DISABLE);			/* 允许捕捉的第一个数据在SCK的第一个边沿 	*/
		BSPI_8bLEn(bspi, ENABLE);				/* 设置数据宽度为8位 						*/
		BSPI_ReceiveFifoCfg(bspi, 5);			/* 配置发送FIFO的长度为5 WORDS 				*/
		BSPI_BSPI0Config(ENABLE);				/* 允许BSPI0接口							*/
	}
	else
	{  
		BSPI_Reset(bspi);						/* 复位指定的BSPI							*/
		BSPI_ClockDividerConfig(bspi,6);		/* 配置BSPI波特率为APB1/6       			*/
		BSPI_Enable(bspi, ENABLE);				/* 允许指定类型的BSPI           			*/
		if(mode == MASTER)						/* 指定BSPI模式为MASTER 					*/
			BSPI_MasterEnable(bspi, ENABLE);	/* 配置指定的BSPI为MASTER模式   			*/
		else									/* 指定BSPI模式为SLAVE 						*/
			BSPI_MasterEnable(bspi, DISABLE);	/* 配置指定的BSPI为MASTER模式   			*/
			
		BSPI_ClkActiveHigh(bspi, ENABLE);	
		BSPI_ClkFEdge(bspi,DISABLE );			/* 允许捕捉的第一个数据在SCK的第一个边沿 	*/
		BSPI_8bLEn(bspi, ENABLE);				/* 设置数据宽度为8位 						*/
		BSPI_TransmitFifoCfg(bspi, 1);			/* 配置发送FIFO的长度为1 WORDS 				*/
		BSPI_ReceiveFifoCfg(bspi, 1);			/* 配置发送FIFO的长度为8 WORDS 				*/
	
		//BSPI_FifoDisable(bspi);
		                                      		
	}
	
}

#endif	//EN_ARM_BSPI > 0

/********************************************* end of file **********************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -