资源简介
该代码主要是ad7794具体操作使用方法,ad7794主要应用不高精度测量上面的AD转换器
代码片段和文件信息
/******************** (C) COPYRIGHT 2014 XX ********************************** * 文件名 :ad7794_spi.c
* 描述 :本函数是XX仪表项目的AD7794的驱动程序
* 平台 :Keil 4 A51
* 库版本 :使用了宏晶科技的相关资料及程序
* 作者 :XXX
* 时间 :2014.3.19
**********************************************************************************/
#include
#include “ad7794_spi.h“
float L_IN = 0 PA_IN = 0 PT_IN = 0 PT_Z = 0;
u32 atemp = 0;
/********************************* SPI *******************************/
/************************************************
AD7794 SPI初始化
入口参数: 无
出口参数: 无
************************************************/
void AD7794InitSpi(void)
{
ACC = P_SW1; //切换到第一组SPI ACC &= ~(SPI_S0 | SPI_S1); //SPI_S0=0 SPI_S1=0
P_SW1 = ACC; //(P1.2/SS P1.3/MOSI P1.4/MISO P1.5/SCLK)
// ACC = P_SW1; //可用于测试U7U7使用的是第二组SPI控制Flash
// ACC &= ~(SPI_S0 | SPI_S1); //SPI_S0=1 SPI_S1=0
// ACC |= SPI_S0; //(P2.4/SS_2 P2.3/MOSI_2 P2.2/MISO_2 P2.1/SCLK_2)
// P_SW1 = ACC;
// ACC = P_SW1; //切换到第三组SPI
// ACC &= ~(SPI_S0 | SPI_S1); //SPI_S0=0 SPI_S1=1
// ACC |= SPI_S1; //(P5.4/SS_3 P4.0/MOSI_3 P4.1/MISO_3 P4.3/SCLK_3)
// P_SW1 = ACC;
SPSTAT = SPIF | WCOL; //清除SPI状态
SS = 1; //关闭SPI片选
SPCTL = SSIG | SPEN | MSTR | CPOL | CPHA | SPDH; //设置SPI为主模式 空闲为高 前沿驱动后沿采样
//CPU_CLK/16 CPU:33.1776Hz
//IE2 |= ESPI; //使能SPI传输中断
//EA = 1; //开总中断
//P1M1 |= 0x00;
//P1M0 |= 0x04; //配置SS引脚为推挽输出
//P1M1 |= 0x00;
//P1M0 |= 0x08; //配置DIN引脚为推挽输出
//P1M1 |= 0x10; //配置DOUT引脚为高阻输入
//P1M0 |= 0x00;
//P1M1 |= 0x00;
//P1M0 |= 0x20; //配置SCLK引脚为推挽输出
//DIN = 1;
//SS = 1;
//SCLK = 1;
}
/************************************************
SPI中断服务程序
************************************************/
/*void spi_isr() interrupt 9 using 1 //SPI传输完成中断
{
SPSTAT = SPIF | WCOL; //清除SPI状态位
g_fSpiBusy = FALSE;
//user code
}*/
/************************************************
使用SPI方式与目标设备进行数据交换
入口参数:
dat : 准备写入的数据
出口参数:
从目标设备中读出的数据
************************************************/
BYTE SpiShift(BYTE dat)
{
SPDAT = dat; //触发SPI发送
while (!(SPSTAT & SPIF)); //等待发送完成
SPSTAT = SPIF | WCOL; //清除SPI状态位
return SPDAT;
}
/*
BYTE SpiShift(BYTE dat)
{
u8 i = 0;
u8 temp = 0;
for(i = 0; i < 8; i++)
{
temp <<= 1;
SCLK = 0;
if((dat & 0x80) == 0x80)
DIN = 1;
else
DIN = 0;
dat <<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11378 2015-12-18 10:31 ad7794_spi.c
文件 12010 2015-12-16 16:33 ad7794_spi.h
----------- --------- ---------- ----- ----
23388 2
评论
共有 条评论