主题中讨论的其他器件:C2000WARE
尊敬的所有人:
你好
我是 CCS 领域的初学者、我需要帮助。 我正在尝试 使用 SPI 在两个 f28379D LaunchPad 之间进行通信。 我想将数据从主器件发送到从器件。 但是、问题即将出现。 在主器件中一切都很好。 我用示波器观察到主器件中的波形。 SPICLK、SPIMOSI 和 SPISTE 的波形正确。 但是 、SPIDAT 和 SPIRXBUF 的值为0。 我认为数据(MOSI)不会进入 寄存器。
对于主器件、我有以下代码:
#if CPU_FRQ_200MHz
#define SPI_BRR ((200E6/4)/5E6)- 1.
#endif
void main (void)
{
uint16 sdata;//发送数据
//
//初始化系统控制:
//
InitSysCtrl();
//
//初始化 GPIO:
//
InitSpiaGpio();
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
/
InitPieCtrl();
//
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
SPI_Fifo_init();//初始化 SPI FIFO
sdata = 0x05A9;
for (;;)
{
//
//发送数据
//
SPI_xmit (sdata<5);
}
}
void SPI_xmit (uint16 A)
{
SpiaRegs.SPITXBUF = A;
}
void SPI_Fifo_init()
{
//
//初始化 SPI FIFO 寄存器
//
SpiaRegs.SPIFFTX.All=0xA040;
SpiaRegs.SPIFFRX.All=0x2044;
SpiaRegs.SPIFFCT.All=0x0;
//
//初始化内核 SPI 寄存器
//
InitSpi();
}
空 InitSpi()
{
SpiaRegs.SPICCR.All=0x00AA;
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.TALK = 1;
SpiaRegs.SPICTL.bit.CLK_PHASE = 1;
SpiaRegs.SPICTL.bit.SPIINTENA=1;
//设置波特率
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
SpiaRegs.SPICCR.bit.SPISWRESET = 1;
SpiaRegs.SPIPRI.bit.FREE = 1;
}
空 InitSpiaGpio()
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO58上的上拉电阻器(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO59上的上拉电阻器(SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO60上拉(SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;//启用 GPIO61上的上拉电阻器(SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO58 (SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO59 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO60 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO61 (SPISTEA)
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;//将 GPIO58配置为 SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;//将 GPIO59配置为 SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将 GPIO60配置为 SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;//将 GPIO61配置为 SPISTEA
GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO58配置为 SPISIMOA
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//将 GPIO59配置为 SPISOMIA
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将 GPIO60配置为 SPICLKA
GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;//将 GPIO61配置为 SPISTEA
EDIS;
}
对于从器件、我有以下代码:
void main (void)
{
uint16 RDATA;//接收的数据
//
//初始化系统控制:
//
InitSysCtrl();
//
//初始化 GPIO:
//
InitSpiaGpio();
//
//清除所有中断:
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//
InitPieCtrl();
//
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
//
//初始化设备外设:
//
SPI_Fifo_init();//初始化 SPI FIFO
for (;;)
{
//
//等待数据被接收
//
while (!SpiaRegs.SPISTS.bit.INT_flag){}
RDATA = SpiaRegs.SPIRXBUF;
RDATA =RDATA>>5;
}
}
void SPI_xmit (uint16 A)
{
SpiaRegs.SPITXBUF = A;
}
//
// SPI_Fifo_init -初始化 SPIA FIFO
//
void SPI_Fifo_init()
{
//
//初始化 SPI FIFO 寄存器
//
SpiaRegs.SPIFFRX.bit.RXFFIL = 0x00;// 4:0中断级别
SpiaRegs.SPIFFRX.bit.RXFFIENA =0;// 5中断使能0
SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 0;// 6清除 INT 标志
SpiaRegs.SPIFFRX.bit.RXFFINT = 0;// 7 INT 标志
SpiaRegs.SPIFFRX.bit.RXFFST = 0;// 12:8 FIFO 状态
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0;// 13 FIFO 复位
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 0;// 14清除溢出
SpiaRegs.SPIFFRX.bit.RXFFOVF = 0;// 15 FIFO 溢出
SpiaRegs.SPIFFCT.All=0x0;
//
//初始化内核 SPI 寄存器
//
InitSpi();
}
空 InitSpi (空)
{
//设置波特率
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
//在断点上停止不会停止 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;
//初始化 SPI-A
SpiaRegs.SPICCR.All=0x00AA;
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0;
SpiaRegs.SPICTL.bit.TALK = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
SpiaRegs.SPICTL.bit.SPIINTENA=1;
SpiaRegs.SPIPRI.bit.STEINV = 0;
}
空 InitSpiaGpio()
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO16上的上拉电阻器(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO17上的上拉电阻器(SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO18上的上拉电阻器(SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;//启用 GPIO19上的上拉电阻器(SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO16 (SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO17 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO18 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO19 (SPISTEA)
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;//将 GPIO16配置为 SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;//将 GPIO17配置为 SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将 GPIO18配置为 SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;//将 GPIO19配置为 SPISTEA
EDIS;
}
//
//文件结束
//
我应该更改这部分代码的哪一部分、以便我的从器件可以读取数据?
如果您能帮我解决问题、我将不胜感激。
此致、
Jessie