主题中讨论的其他器件:C2000WARE
您好!
我尝试将 C2000Ware SPI 环回中的示例提供配置为使用 SPI-B 而不是 SPI-A 我需要在最终设计中同时使用 SPI-A 和 SPI-B、因此我正在尝试确保我了解如何正确配置它们。 我使用的是 F28379D 实验套件。 我已经确认、如果我使用 SPI-A 提供的代码、一切正常。 我将使用示波器(GPIO 18)测量引脚71、我可以看到时钟。 然后、我尝试配置 SPI-B、在引脚79 (GPIO 79) SPIB-clk 上看不到任何内容。 我已更改 Example_2837xDSpi_FFDLB.c 和 F2837xD_SPI.c、请参阅下面的内容。 要使用 SPI-B、我还需要更改其他内容吗? 感谢您的任何帮助。
//######################################################################################################################
//
//文件:example_2837xDSpi_FFDLB.c
//
//标题:SPI 数字环回程序。
//
//! addtogroup cpu01_example_list
//!
SPI 数字回路(SPI_LOOP)
//!
//! 该程序使用外设的内部回路测试模式。
//! 而不是引导模式引脚配置、没有其他硬件配置
//! 要求。 不使用中断。
//!
//! 发送数据流、然后与接收到的数据流进行比较。
//! 发送的数据如下所示:\n
//! 0000 0001 0002 0003 0004 0005 0006 0007… FFFE FFFF \n
//! 这种模式会一直重复。
//!
//! b 监视\b 变量\n
//! -\b sdata -已发送数据
//! -\b RDATA -接收到的数据
//!
//
//######################################################################################################################
//$TI 版本:F2837xD 支持库 V210 $
//$Release Date:Tue Nov1 14:46:15 CDT 2016 $
//版权所有:版权所有(C) 2013-2016 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################
//
//包含的文件
//
#include "F28x_Project.h"
//
//函数原型
//
void delay_loop (void);
void SPI_xmit (uint16 a);
void SPI_Fifo_init (void);
void SPI_init (void);
void 错误(void);
void main (void)
{
uint16 sdata;//发送数据
uint16 RDATA;//接收的数据
//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xD_SYSCTRL.c 文件中。
//
InitSysCtrl();
//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//仅为 SPI-A 功能设置 GP I/O
//此函数位于 F2837xD_SPI.c 中
//
InitSpiaGpio();
//
//步骤3. 清除所有中断:
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE __interrupts 和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
InitPieCtrl();
//
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是__interrupt
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
InitPieVectTable();
//
//步骤4. 初始化器件外设:
//
SPI_Fifo_init();//初始化 SPI FIFO
//
//步骤5. 用户特定代码:
//
sdata = 0x0000;
for (;;)
{
//
//发送数据
//
SPI_xmit (sdata);
//
//等待数据被接收
//
while (SpibRegs.SPIFFRX.bit.RXFFST!=1){}
//
//检查已发送的数据
//
RDATA = SpibRegs.SPIRXBUF;
if (RDATA!= sdata)
{
error();
}
sdata++;
}
}
//
// delay_loop -短暂延迟的循环
//
void delay_loop ()
{
长 I;
对于(i = 0;i < 1000000;i++){}
}
//
//错误-停止调试器的错误函数
//
空错误(空)
{
asm (" ESTOP0");//测试失败!! 停下来!
适用于(;);
}
//
// SPI_xmit -通过 SPI 发送值
//
void SPI_xmit (uint16 A)
{
SpibRegs.SPITXBUF = A;
}
//
// SPI_Fifo_init -初始化 SPIA FIFO
//
void SPI_Fifo_init()
{
//
//初始化 SPI FIFO 寄存器
//
SpibRegs.SPIFFTX.ALL = 0xE040;
SpibRegs.SPIFFRX.ALL = 0x2044;
SpibRegs.SPIFFCT.ALL = 0x0;
//
//初始化内核 SPI 寄存器
//
InitSpi();
}
//######################################################################################################################
//
//文件:F2837xD_SPI.c
//
//标题:F2837xD SPI 初始化和支持函数。
//
//######################################################################################################################
//$TI 版本:F2837xD 支持库 V210 $
//$Release Date:Tue Nov1 14:46:15 CDT 2016 $
//版权所有:版权所有(C) 2013-2016 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################
//
//包含的文件
//
#include "F2837xD_DEVICE.h"
#include "F2837xD_examples.h"
//
//计算 BRR:7位波特率寄存器值
// SPI CLK 频率= 500kHz
// LSPCLK freq = CPU freq /4 (缺省情况下)
// BRR =(LSPCLK 频率/SPI CLK 频率)- 1.
//
#if CPU_FRQ_200MHz
#define SPI_BRR ((200E6/4)/500E3)- 1.
#endif
#if CPU_FRQ_150MHz
#define SPI_BRR ((150E6/4)/500E3)- 1.
#endif
#if CPU_FRQ_120MHz
#define SPI_BRR ((120E6/4)/500E3)- 1.
#endif
//
// InitSPI -此函数将 SPI 初始化为已知状态
//
空 InitSpi (空)
{
//初始化 SPI-A
//在配置更改之前将 RESET 设置为低电平
//时钟极性(0 =上升、1 =下降)
// 16位字符
//启用环回
SpibRegs.SPICCR.bit.SPISWRESET = 0;
SpibRegs.SPICCR.bit.CLKPOLARITY = 0;
SpibRegs.SPICCR.bit.SPICHAR =(16-1);
SpibRegs.SPICCR.bit.SPILBK = 1;
//启用主设备(0 =从设备,1 =主设备)
//启用传输(TALK)
//时钟相位(0 =正常、1 =延迟)
//禁用 SPI 中断
SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpibRegs.SPICTL.bit.TALK = 1;
SpibRegs.SPICTL.bit.CLK_PHASE = 0;
SpibRegs.SPICTL.bit.SPIINTENA=0;
//设置波特率
SpibRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
//设置空闲位
//在断点上停止不会停止 SPI
SpibRegs.SPIPRI.bit.FREE = 1;
//解除 SPI 复位
SpibRegs.SPICCR.bit.SPISWRESET = 1;
}
//
// InitSpiGpio -此函数初始化 GPIO 引脚以用作 SPI 引脚。
//每个 GPIO 引脚可配置为 GPIO 引脚或最多3个
//不同的外设功能引脚。 默认情况下、所有引脚都会出现
//在复位后向上作为 GPIO 输入。
//
//注意:
//对于每个 SPI 外设
//对于 SPISOMO 运行、只应启用一个 GPIO 引脚。
//对于 SPISOMI 操作、只应启用一个 GPIO 引脚。
// SPICLK 操作只应启用一个 GPIO 引脚。
// SPISTE 操作只应启用一个 GPIO 引脚。
//注释掉其他不需要的行。
//
空 InitSpiGpio()
{
InitSpiaGpio();
}
//
// InitSpiaGpio -初始化 SPIA GPIO
//
空 InitSpiaGpio()
{
EALLOW;
//
//为所选引脚启用内部上拉
//
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
//注释掉其他不需要的行。
//
GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;//启用 GPIO16上的上拉电阻器(SPISIMOA)
// GpioCtrlRegs.GPAPUD.bit.GPIO5=0;//启用 GPIO5上的上拉电阻器(SPISIMOA)
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;//启用 GPIO17上的上拉电阻器(SPISOMIA)
// GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;//启用 GPIO3上的上拉电阻器(SPISOMIA)
GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;//启用 GPIO18上的上拉电阻器(SPICLKA)
GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;//启用 GPIO19上的上拉电阻器(SPISTEA)
//
//仅将所选引脚的限定条件设置为异步
//
//这将为所选引脚选择异步(无限定条件)。
//注释掉其他不需要的行。
//
GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3;//异步输入 GPIO16 (SPISIMOA)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3;//异步输入 GPIO5 (SPISIMOA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;//异步输入 GPIO17 (SPISOMIA)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;//异步输入 GPIO3 (SPISOMIA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3;//异步输入 GPIO18 (SPICLKA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;//异步输入 GPIO19 (SPISTEA)
//
//使用 GPIO 寄存器配置 SPI-A 引脚
//
//这指定哪些可能的 GPIO 引脚将是 SPI 功能
//引脚。
//注释掉其他不需要的行。
//
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 6;//将 GPIO16配置为 SPISIMOA
// GpioCtrlRegs.GPAMUX1.bit.GPIO5=2;//将 GPIO5配置为 SPISIMOA
GpioCtrlRegs.GPAMUX2.bit.GPIO25=6;//将 GPIO17配置为 SPISOMIA
// GpioCtrlRegs.GPAMUX1.bit.GPIO3=2;//将 GPIO3配置为 SPISOMIA
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 6;//将 GPIO18配置为 SPICLKA
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 6;//将 GPIO19配置为 SPISTEA
EDIS;
}
//
//文件结束
//