📄 dsp28_spi.c
字号:
//
// TMDX ALPHA RELEASE
// Intended for product evaluation purposes
//
//###########################################################################
//
// FILE: DSP28_Spi.c
//
// TITLE: DSP28 SPI Initialization & Support Functions.
//
//###########################################################################
//
// Ver | dd mmm yyyy | Who | Description of changes
// =====|=============|======|===============================================
// 0.55| 06 May 2002 | L.H. | EzDSP Alpha Release
// 0.56| 20 May 2002 | L.H. | No change
// 0.57| 27 May 2002 | L.H. | No change
//###########################################################################
#include "DSP28_Device.h"
#include "DSP28_Spi.h"
//---------------------------------------------------------------------------
// InitSPI:
//---------------------------------------------------------------------------
// This function initializes the SPI(s) to a known state.
//
void InitSpi(void)
{
// Initialize SPI-A:
// Initialize SCI-A:
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x0007; //GPIOF0-3
GpioMuxRegs.GPFDIR.bit.GPIOF14 = 1; //out
GpioMuxRegs.GPFDIR.bit.GPIOF3 = 1; //out SPISTEA(I/O)ADS8361 CS
GpioMuxRegs.GPAMUX.all=0x0000; // 配置GPIOA13,GPIOA14和GPIOA15为普通IO口,分别控
// 制ADS8361的M1,M0和RD_CONVST; 配置GPIOA0, GPIOA1,
// GPIOA2为PWM1, PWM2, PWM3来提供抗混叠滤波器MAX291
// 的时钟
GpioMuxRegs.GPADIR.all=0xE000; // 配置GPIOA13,GPIOA14和GPIOA15的方向为输出
EDIS;
/* loopback 8 bit data */
SpiaRegs.SPICCR.all = 0x000f; //0x1f 自测模式,内部SIMO SOMI连接
SpiaRegs.SPICTL.all = 0x07;
SpiaRegs.SPIBRR = 0x7f; //LSPCLK/127+1
//----------------------------------------------
SpiaRegs.SPIFFTX.all = 0xE042; // SPI能重新开始发送或接收;SPI FIFO被使能;重新
// 使能发送FIFO操作;清除TXFFINT标志位;禁止TX FIFO
// 中断;发送FIFO中断级别为0级
SpiaRegs.SPIFFRX.all = 0x2062; // 重新使能接收FIFO操作;清除RXFFINT标志位;禁止
// RX FIFO中断;接收FIFO中断级别为1级
SpiaRegs.SPIFFCT.all = 0x0000; // FIFO发送延迟位为2
//--------------------------------------------------
SpiaRegs.SPICCR.all = 0x008f; //SW RESET = 1
PieCtrl.PIEIER6.bit.INTx1 = 1; //SPIRXINTA
PieCtrl.PIEIER6.bit.INTx2 = 1; //SPITXINTA
//tbd...
//tbd...
}
unsigned int Spi_TxReady(void)
{
unsigned int i;
if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1) //发送缓冲区满
{
i = 0;
}
else
{
i = 1;
}
return(i);
}
unsigned int Spi_RxReady(void)
{
unsigned int i;
if(SpiaRegs.SPISTS.bit.INT_FLAG == 1) //完成发送 接收了最后一位
{
i = 1;
}
else
{
i = 0;
}
return(i);
}
// 控制开始转换RD_CONVST的子函数
void ADS8361_RDCONVST()
{
GpioDataRegs.GPACLEAR.bit.GPIOA15 = 1;// RD_CONVST置1 rising edge
asm (" RPT #30 || NOP"); // 延时30个时钟周期
GpioDataRegs.GPASET.bit.GPIOA15 = 1; // RD_CONVST置0
}
void ADS8361_CS(int state)
{
switch(state)
{
case 0:
GpioDataRegs.GPFCLEAR.bit.GPIOF3 =1; //CS
break;
case 1:
GpioDataRegs.GPFSET.bit.GPIOF3 =1; // CS置1
break;
}
}
void ADS8361_M1(int state)
{
switch(state)
{
case 0:
GpioDataRegs.GPACLEAR.bit.GPIOA13 = 1; // M1置0
break;
case 1:
GpioDataRegs.GPASET.bit.GPIOA13 = 1; // M1置1
break;
}
}
// 控制工作模式M0的子函数
void ADS8361_M0(int state)
{
switch(state)
{
case 0:
GpioDataRegs.GPACLEAR.bit.GPIOA14 = 1; // M0置0
break;
case 1:
GpioDataRegs.GPASET.bit.GPIOA14 = 1; // M0置1
break;
}
}
//interrupt void SPIRXINTA_ISR(void); // SPI
//interrupt void SPITXINTA_ISR(void); // SPI
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -