TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28388D: 无法对SpiaRegs赋值

Part Number:TMS320F28388DOther Parts Discussed in Thread:C2000WARE

你好,我在调试的时候发现我写的初始化程序无法对SPI寄存器赋值,但GPIO的寄存器却可以正常写入。使用的开发板是28388CotrolCARD,附上我的初始化程序代码。非常感谢您能为我提供一些思路!

#include "f2838x_device.h"
#include "f2838x_examples.h"
#include "f2838x_globalprototypes.h"
#include "rtwtypes.h"

#define Fs_Set GpioDataRegs.GPBSET.bit.GPIO35 = 1 //FS Pin
#define Fs_Clr GpioDataRegs.GPBCLEAR.bit.GPIO35 = 1
#define Load_Set GpioDataRegs.GPBSET.bit.GPIO37 = 1 //Load Pin
#define Load_Clr GpioDataRegs.GPBCLEAR.bit.GPIO37 = 1

void init_SPI_GPIO(void) //GPIO Configuration Spia:GPIO16,17,18
{
EALLOW;
GpioCtrlRegs.GPAGMUX2.bit.GPIO16=0; //configure GPIO16 as SPIASIMO
GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;

GpioCtrlRegs.GPAGMUX2.bit.GPIO17=0; //configure GPIO17 as SPIASOMI
GpioCtrlRegs.GPAMUX2.bit.GPIO17=1;
GpioCtrlRegs.GPAGMUX2.bit.GPIO18=0; //configure GPIO18 as SPISCK
GpioCtrlRegs.GPAMUX2.bit.GPIO18=1;
GpioCtrlRegs.GPBGMUX1.bit.GPIO35=0; //configure GPIO35 as GPIO(siganl FS)
GpioCtrlRegs.GPBMUX1.bit.GPIO35=0;
GpioCtrlRegs.GPBGMUX1.bit.GPIO37=0; //configure GPIO37 as GPIO(signal LOAD)
GpioCtrlRegs.GPBMUX1.bit.GPIO37=0;
EDIS;
}

void init_SPI_A(void)
{
EALLOW;
SpiaRegs.SPICCR.bit.SPISWRESET=0;
SpiaRegs.SPICTL.bit.MASTER_SLAVE=1; //Master Mode
SpiaRegs.SPICCR.bit.CLKPOLARITY=1;
SpiaRegs.SPICTL.bit.CLK_PHASE=0;
SpiaRegs.SPICCR.bit.SPICHAR=15; //16bit SPI
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE=39; //Set baud Rate
SpiaRegs.SPICTL.bit.TALK=1; //Enable transmit
SpiaRegs.SPIPRI.bit.FREE=1;

SpiaRegs.SPICCR.bit.SPISWRESET=1;
EDIS;
}

Green Deng:

你好,是单步运行还是连续运行的情况下没有写入寄存器?

有没有看过程序有没有运行到初始化代码中?

,

yeyuan zhu:

程序能进入初始化代码,单步运行与连续运行在watch window中寄存器对应bit的值都没有发生变化

,

yeyuan zhu:

此外,我还运行了C2000Ware中spi_ex5_external_loopback程序,调试例程时可以正常写入,由于例程是库函数的开发形式,我将ex5例程的一部分进行修改移植到我的程序中,在watch window中寄存器的数值也没有发生变化。移植后的程序如下:

另外的话我的这一部分代码是作为SimulinkC2000代码生成的外接初始化程序。

#include "driverlib.h"
#include "device.h"
#include "f2838x_device.h"
//#include "f2838x_examples.h"
//#include "f2838x_globalprototypes.h"
#include "rtwtypes.h"void init_SPI_GPIO(void)//GPIO Configuration Spia:GPIO16,17,18
{EALLOW;GpioCtrlRegs.GPAGMUX2.bit.GPIO16=0;//configure GPIO16 as SPIASIMOGpioCtrlRegs.GPAMUX2.bit.GPIO16=1;GpioCtrlRegs.GPAGMUX2.bit.GPIO17=0;//configure GPIO17 as SPIASOMIGpioCtrlRegs.GPAMUX2.bit.GPIO17=1;GpioCtrlRegs.GPAGMUX2.bit.GPIO18=0;//configure GPIO18 as SPISCKGpioCtrlRegs.GPAMUX2.bit.GPIO18=1;GpioCtrlRegs.GPBGMUX1.bit.GPIO35=0;//configure GPIO35 as GPIO(siganl FS)GpioCtrlRegs.GPBMUX1.bit.GPIO35=0;GpioCtrlRegs.GPBGMUX1.bit.GPIO37=0;//configure GPIO37 as GPIO(signal LOAD)GpioCtrlRegs.GPBMUX1.bit.GPIO37=0;EDIS;
}void init_SPI_A(void)
{
/*EALLOW;SpiaRegs.SPICCR.bit.SPISWRESET=0;SpiaRegs.SPICTL.bit.MASTER_SLAVE=1;//Master ModeSpiaRegs.SPICCR.bit.CLKPOLARITY=1;SpiaRegs.SPICTL.bit.CLK_PHASE=0;SpiaRegs.SPICCR.bit.SPICHAR=15;//16bit SPISpiaRegs.SPIBRR.bit.SPI_BIT_RATE=39;//Set baud RateSpiaRegs.SPICTL.bit.TALK=1;//Enable transmitSpiaRegs.SPIPRI.bit.FREE=1;SpiaRegs.SPICCR.bit.SPISWRESET=1;EDIS;*/SPI_disableModule(SPIA_BASE);// Must put SPI into reset before configuring itSPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0,// SPI configuration. Use a 500kHz SPICLK and 16-bit word size.SPI_MODE_MASTER, 500000, 16);SPI_disableLoopback(SPIA_BASE);SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN);SPI_enableModule(SPIA_BASE);// Configuration complete. Enable the module.}

,

Green Deng:

你看一下程序中有没有使能SPI的时钟?

,

yeyuan zhu:

我的程序中没有使能SPI时钟,但是我看C2000Ware的SPI例程ex5与官方的芯片使用指南(章节37.4.2 Configuring the SPI)都没有提到使能SPI时钟

,

yeyuan zhu:

我在我的初始化程序中对Epwm的寄存器赋值,在watch window中发现也无法正常写入( EPwm1Regs.TBCTL.bit.CTRMODE=2;)。而将该语句放到官方例程ex5的环境中执行可以写入。另外,可否告诉我一下如何使能SPI的时钟,我对这一块并不了解,非常感谢您的帮助!

,

yeyuan zhu:

使能了SPI时钟(增加了一句CpuSysRegs.PCLKCR8.bit.SPI_A = 1;   另外试了下例程ex5中的函数InitsysCtrl();函数,也失败了)但watch window中可以看都SPI_A的对应位已经附上值变1了。

,

yeyuan zhu:

解决了,还得加一句  DevCfgRegs.CPUSEL6.bit.SPI_A = 0;

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 无法对SpiaRegs赋值
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1