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

📄 qspi.c

📁 基于32位ColdFire构建嵌入式系统书本原程序.rar
💻 C
字号:
#include "qspi.h"
//-------------------------------------------------------------------------*
//函数名: QSPI_init                                                        *
//功  能: 初始化MCF5223x的QSPI模块                                         *
//返  回: 无                                                               * 
//说  明: QSPI不能工作在从机模式下                                         *
//-------------------------------------------------------------------------*
void QSPI_init(QSPI_InitPara QSPIpara)
{
    
    //1.主机模式,传输位数,以及波特率配置
    MCF_QSPI_QMR = (0
                    |MCF_QSPI_QMR_MSTR        
                    |MCF_QSPI_QMR_BITS(QSPIpara.bitcnt) 		   	                    
			        |MCF_QSPI_QMR_BAUD(QSPIpara.fsys * 1000 /(2 * QSPIpara.Baud))
			        );   
    //2.时钟相位和极性配置
    if(QSPIpara.CPHA==1)
          MCF_QSPI_QMR |=MCF_QSPI_QMR_CPHA ;
    if(QSPIpara.CPOL==1)
          MCF_QSPI_QMR |=MCF_QSPI_QMR_CPOL ;
     	  MCF_QSPI_QDLYR = (0
     	                    |MCF_QSPI_QDLYR_DTL(QSPIpara.QCD)
                            |MCF_QSPI_QDLYR_QCD(QSPIpara.DTL)
     	                    );
    //3.片选信号空闲电平配置
	if(QSPIpara.csiv==1)
	      MCF_QSPI_QWR =0 | MCF_QSPI_QWR_CSIV | MCF_QSPI_QWR_NEWQP(QSPIpara.NEWQP);
    else
	   	  MCF_QSPI_QWR =0 | MCF_QSPI_QWR_NEWQP(QSPIpara.NEWQP);
    //4.环绕模式配置
    if(QSPIpara.WREN==1)
    {
     if(QSPIpara.WRTO==1) 
          MCF_QSPI_QWR = MCF_QSPI_QWR_WRTO 
                          |MCF_QSPI_QWR_WREN;
     else
          MCF_QSPI_QWR = MCF_QSPI_QWR_WRTO; 
    }
    //5.中断配置 
    if(QSPIpara.SPIFE==1)               
       	  MCF_QSPI_QIR =0|MCF_QSPI_QIR_SPIFE;   
    //6.QSPI模块引脚配置:
    //QSPI共使用7个引脚:QSPI_DOUT,QSPI_DIN,QSPI_CLK,CS0,CS1,CS2,CS3
    //引脚分配:PQSPAR0-QSPI_DOUT  PQSPAR1-QSPI_DIN   PQSPAR2-QSPI_CLK 
	//          PQSPAR3-QSPI_CS0   PQSPAR4-QSPI_CS1   PQSPAR5-QSPI_CS2 
	//          PQSPAR6-QSPI_CS3 
	//PQSPAR:端口QS引脚分配寄存器    0x01:主功能
	MCF_GPIO_PQSPAR =(0  
	                 |MCF_GPIO_PQSPAR_PQSPAR0(0x1)
	                 |MCF_GPIO_PQSPAR_PQSPAR1(0x1)
	                 |MCF_GPIO_PQSPAR_PQSPAR2(0x1)
	                 |MCF_GPIO_PQSPAR_PQSPAR3(0x1) 
	                 |MCF_GPIO_PQSPAR_PQSPAR4(0x1)
	                 |MCF_GPIO_PQSPAR_PQSPAR5(0x1)
					 |MCF_GPIO_PQSPAR_PQSPAR6(0x1)); 

}
//-------------------------------------------------------------------------*
//函数名: QSPI_WriteToRAM1                                                 *
//功  能: 写一个数据到发送RAM                                              *
//参  数: address:发送RAM起始地址                                          *     
//           data:要写入发送RAM的数据                                      *
//返  回: 无                                                               * 
//说  明:                                                                  *
//QSPI模块RAM(包括发送接收RAM和命令RAM)可以通过QAR 和 QDR间接访问。QAR决定 *
//写RAM的起始地址。QDR为数据存放寄存器,写入到QDR寄存器中的数据将按照QAR指 *
//定的地址依次放后位置。                                                   *  
//-------------------------------------------------------------------------*
void QSPI_WriteToRAM1( uint8 address, uint16 data )
{
    MCF_QSPI_QAR = address;
    MCF_QSPI_QDR = data;
}
//-------------------------------------------------------------------------*
//函数名: QSPI_WriteToRAMN                                                 *
//功  能: 写N个数据到发送RAM                                               *
//参  数: address:发送RAM起始地址                                          *     
//        data:要写入发送RAM的数组 bytes:写入数据长度                     *
//返  回: 无                                                               * 
//-------------------------------------------------------------------------*
void QSPI_WriteToRAMN(uint8 address, uint16 data[],uint8 N)
{
    uint8 i=0;
    for(;i<N;i++)  
    {
     QSPI_WriteToRAM1(address + i,data[i]);
    }//发送数据      
}

//-------------------------------------------------------------------------*
//函数名: QSPI_ReadFromRAM1                                                *
//功  能: 接收一个数据                                                     *
//参  数: address:接收RAM起始地址                                          *     
//返  回: 接收到的数据                                                     * 
//说  明:                                                                  *
//QSPI模块RAM(包括发送接收RAM和命令RAM)可以通过QAR 和 QDR间接访问。QAR决定 *
//读RAM的起始地址。读QDR寄存器中可以得到相应RAM区的数据                    *  
//-------------------------------------------------------------------------*
uint16 QSPI_ReadFromRAM1(uint8 address )
{
    MCF_QSPI_QAR = address;
    return( MCF_QSPI_QDR );
}

//-------------------------------------------------------------------------*
//函数名: QSPI_ReadFromRAMN                                                *
//功  能: 接收N个数据                                                      *
//参  数: address:接收RAM起始地址                                          *
//         data[]:接收数据存放位置                                         *
//              N:数据个数                                                 *
//返  回: 接收到的数据                                                     *
//说  明:                                                                  *
//QSPI模块RAM(包括发送接收RAM和命令RAM)可以通过QAR 和 QDR间接访问。QAR决定 *
//读RAM的起始地址。读QDR寄存器中可以得到相应RAM区的数据                    *  
//-------------------------------------------------------------------------*
uint16 QSPI_ReadFromRAMN(uint8 address,uint16 data[],uint8 N)
{
    uint8 i=0;
    for(;i<N;i++)  
    {
     data[i]=QSPI_ReadFromRAM1(address);
    }
}
//-------------------------------------------------------------------------*
//函数名: QSPI_StartTrans                                                  *
//功  能: 该函数启动QSPI传输,并轮询SPIF标志以判断传输是否结束              * 
//参  数: N:QSPI传输数据长度                                               *
//返  回: 发送是否成功标志 0:失败 1:成功                                 * 
//-------------------------------------------------------------------------*
uint8 QSPI_StartTrans(uint8 N)
{
    uint16 i=0; 
    MCF_QSPI_QIR |= MCF_QSPI_QIR_SPIF;         //清发送完成中断
    MCF_QSPI_QWR |=MCF_QSPI_QWR_ENDQP(N-1);
    MCF_QSPI_QDLYR |= MCF_QSPI_QDLYR_SPE;     //启动SPI传输
    for(;i<0xFFFE;i++)                     //限时等待
    {
        if(MCF_QSPI_QIR & MCF_QSPI_QIR_SPIF)     //轮询QSPI传输结束使能位SPIF
        //同步接收数据 接收数据代码
       	return (1);
    }
    return (0) ;
}

⌨️ 快捷键说明

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