工具/软件:Code Composer Studio
尊敬的所有人:
你好
我是 CCS 领域的初学者、我需要有关我正在执行的项目的帮助。 问题是、我正在尝试从一个 F28379d Launchpad 向第二个 LaunchPad 发送一个特定值(例如 ADC 值)。 我的目的是将值从主器件发送到从器件。
我已经在论坛上完成了许多示例(SPI_loopback、SPI_ex3_externallobak 等)和不同的讨论。 但这让我更加困惑。
因此、我从"SPI_loopback"示例开始。 我想将值1 (就像一个常量示例一样)从主器件发送到从器件。
对于主器件、我有以下代码:
sdata = 1;
for (;;)
{
//发送数据
SPI_xmit (sdata);
}
*********
void SPI_init()
{
SpiaRegs.SPICCR.all =0x000F;//复位打开、上升沿、16位字符位
SpiaRegs.SPICTL.ALL =0x0006;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR.ALL =0x007F;
SpiaRegs.SPICCR.all =0x009F;//从复位中撤回 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰 xmission
}
void SPI_xmit (uint16 A)
{
SpiaRegs.SPITXBUF=A;
}
void SPI_Fifo_init()
{
//初始化 SPI FIFO 寄存器
SpiaRegs.SPIFFTX.All=0xE040;
SpiaRegs.SPIFFRX.All=0x2044;
SpiaRegs.SPIFFCT.All=0x0;
}
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
GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO16配置为 SPISIMOA
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//将 GPIO17配置为 SPISOMIA
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将 GPIO18配置为 SPICLKA
GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;//将 GPIO19配置为 SPISTEA
对于从器件、我有以下代码:
RDATA = 0;
for (;;)
{
GPIO_WritePin (19、1);
RDATA = SpiaRegs.SPIRXBUF;
GPIO_WritePin (19、0);
}
小部分
void SPI_init()
{
SpiaRegs.SPICCR.all =0x000F;//复位打开、上升沿、16位字符位
SpiaRegs.SPICTL.ALL =0x0006;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR.ALL =0x007F;
SpiaRegs.SPICCR.all =0x009F;//从复位中撤回 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点不会干扰
// xmission
}
void SPI_Fifo_init()
{
SpiaRegs.SPIFFRX.bit.RXFFIL = 0x00;// 4:0中断级别
SpiaRegs.SPIFFRX.bit.RXFFIENA =0;// 5中断使能0
SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1;// 6清除 INT 标志
SpiaRegs.SPIFFRX.bit.RXFFINT = 0;// 7 INT 标志
SpiaRegs.SPIFFRX.bit.RXFFST = 0;// 12:8 FIFO 状态
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;// 13 FIFO 复位
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 0;// 14清除溢出
SpiaRegs.SPIFFRX.bit.RXFFOVF = 0;// 15 FIFO 溢出
SpiaRegs.SPIFFCT.All=0x0;
}
//在配置更改之前将 RESET 设置为低电平
//时钟极性(0 =上升、1 =下降)
// 16位字符
//启用环回
SpiaRegs.SPICCR.bit.SPISWRESET = 0;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICCR.bit.SPICHAR =(16-1);
SpiaRegs.SPICCR.bit.SPILBK = 1;
//启用主设备(0 =从设备,1 =主设备)
//启用传输(TALK)
//时钟相位(0 =正常、1 =延迟)
//禁用 SPI 中断
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0;
SpiaRegs.SPICTL.bit.TALK = 1;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
SpiaRegs.SPICTL.bit.SPIINTENA=0;
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
SpiaRegs.SPIPRI.bit.FREE = 1;
//解除 SPI 复位
SpiaRegs.SPICCR.bit.SPISWRESET = 1;
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
GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO16配置为 SPISIMOA
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//将 GPIO17配置为 SPISOMIA
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将 GPIO18配置为 SPICLKA
GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;//将 GPIO19配置为 SPISTEA
(第5颗星
问题是、一旦我将 SPICTL.bit.MASTER_SLAVE 从0更改为1 (作为主器件工作)、我就可以看到一切正常(当然、两个微器件都作为主器件)。
但是、一旦第二个微控制器在从模式下运行、它就会卡在 GPIO_WritePin (19、1)上。
如果您能帮我解决问题、我将不胜感激。
此致、
森