#include "DA_SPIH.h"
#include"p30f6010A.h"\
/*DA端口初始化*/
void InitDA_port(void)
{
TRISGbits.TRISG9 = 0; // DA-CS ->RG9 -> 输出
LATGbits.LATG9=0; //初始低电平
TRISGbits.TRISG6 = 0; // DA-SCLK ->RG6 -> 输出
LATGbits.LATG6 =0; //SKC初始低电平
TRISGbits.TRISG8 = 0; // DA-DIN ->RG8 -> 输出
LATGbits.LATG8=0; //初始低电平
TRISGbits.TRISG7 = 1; // DA-DOUT ->RG7 -> 输入
LATGbits.LATG7=0; //初始低电平
TRISDbits.TRISD5 = 0; // DA-SW ->RD5 -> 输出
LATDbits.LATD5=1; //初始低电平
TRISDbits.TRISD6 = 0; // DA-SYNC ->RD6 -> 输出
PORTDbits.RD6 =0; //DA_SYNC初始低电平
TRISDbits.TRISD4 = 0; // DA-RESET ->RD4 -> 输出
PORTDbits.RD4 =1; //DA_RESET 初始高电平
}
/*******************************************************************************
* 函数名称 : OpenSPI2 *
* 描述 : 用于初始化SPI模块并启用SPI模块 *
* 参数 : unsigned int config3,unsigned int config4 *
* 返回值 : *
* 注 : Config3:包含有关帧SPI支持,帧同步脉冲,禁用SDO引脚,字/字节 *
通信数据输入采样相位位,时钟沿选择位,从动选择,时 *
钟极性选择位,主使能位,次级预分频位,初级预分频位 *
的信息. *
* Config4:包含有关在CPU 空闲模式下启用/禁用SPI,SPI操作的信息 * *
*******************************************************************************/
void OpenSPI2(unsigned int config3, unsigned int config4)
{
SPI2CON = config3; /* 初始化spi模块 */
SPI2STAT = config4; /* 启用/禁用SPI模块 */
}
/********************************************************************
* 函数名称 : CloseSPI2 *
* 描述 : 禁用SPI模块及其中断位 *
* 参数 : *
* 返回值 : *
********************************************************************/
void CloseSPI2()
{
IEC1bits.SPI2IE = 0; /* 禁用中断允许控制寄存器中的中断位 */
SPI2STATbits.SPIEN = 0; /* 禁用模块。所有引脚均由PORT功能控制 */
}
/********************************************************************
* 函数名称 : DataRdySPI2 *
* 描述 : 确定是否从SPIBUF寄存器中读取字节/字 *
* 参数 : *
* 返回值 : 状态位,指示RBF = 1 还是 0 *
********************************************************************/
char DataRdySPI2()
{
return SPI2STATbits.SPIRBF; /* 返回RBF位状态 */
}
/********************************************************************
* 函数名称 : WriteSPI2 *
* 描述 : 将单个字节/字写入SPI总线 *
* 参数 : 待写入SPI总线的字/字节 *
* 返回值 : *
********************************************************************/
void WriteSPI2(unsigned int data_out)
{
if (SPI2CONbits.MODE16) //写字
SPI2BUF = data_out;
else
SPI2BUF = data_out & 0xff; //写字节
}
/******************************************************************************
* 函数名称 : ReadSPI2 *
* 描述 : 从SP2总线读取单字节/字 *
* 参数 : *
* 返回值 : SPIBUF寄存器的内容 *
******************************************************************************/
unsigned char ReadSPI2()
{
return (SPI2BUF & 0xff); /* 返回字节 8位,中断or查询?*/
}
/****************************************************************************
* 函数名称 : config_SPI2 *
* 描述 : 配置SPI端口 *
* 参数 : *
* 返回值 : *
****************************************************************************/
void config_SPI2(void)
{
unsigned int SPICONValue; /* 包含有关SPI配置的信息 */
unsigned int SPISTATValue; /* 包含有关SPI启用/禁用的信息 */
/* 配置SPI1模块在主机模式下传输8位数据 */
SPICONValue = FRAME_ENABLE_OFF & //帧SPI禁用
FRAME_SYNC_OUTPUT &//帧同步脉冲输出(主机)
ENABLE_SDO_PIN &//模块使用SDO引脚
SPI_MODE16_OFF &//字节通信
SPI_SMP_OFF &//在数据输出时间中间对输入数据进行采样
SPI_CKE_ON & //串行输出数据在时钟从工作状态转变为空闲状态时变化
SLAVE_ENABLE_OFF& //模块不使用 SS2 引脚
CLK_POL_ACTIVE_HIGH& //时钟信号的空闲状态为低电平;工作状态为高电平
MASTER_ENABLE_ON & //主模式
SEC_PRESCAL_4_1 & //辅助预分频比 4:1
PRI_PRESCAL_16_1; //主预分频比 16:1
/* 使能SPI2+空闲模式继续工作 */
SPISTATValue = SPI_ENABLE & /* 使能SPI模块 */
SPI_IDLE_CON & /* 在空闲模式下模块继续工作 */
SPI_RX_OVFLOW_CLR;/* 一个新字节 / 字已被完全接收并丢弃*/
OpenSPI2(SPICONValue,SPISTATValue );
}
/************************************************************************
* 函数名称 : ConfigIntSPI2 *
* 描述 : 配置中断并设置中断优先级 *
* 参数 : unsigned int config *
* 返回值 : None *
************************************************************************/
void ConfigIntSPI2( unsigned int config)
{
IFS1bits.SPI2IF = 0; //清除IF位
IPC6bits.SPI2IP = (config &0x0007); // 分配中断优先级
IEC1bits.SPI2IE = (config &0x0008)>>3; //中断允许/禁止位
}
评论1