工具/软件:Code Composer Studio
你(们)好
我尝试通过具有外部闪存(Microchip SST26VF064B)的 SPI 进行连接、但遇到了问题。 当我尝试读取存储器的 ID 时、我不会得到我应该得到的结果。 有人可以帮助我解决这个问题吗?
#include "F28x_Project.h" void delay_loop (void); void SPI_xmit (uint16 a); void SPI_fifo_init (void); void SPI_init (void); void error (void); void main (void) { uint16 sdata;//发送数据 uint16 RDATA;//接收到的数据 InitSysCtrl(); GpioDataRegs.GPBCLEAR .BIO63 = 1; InitSpiaGpio(); InitSpi(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable (); // sdata = 0x009F; for (;) { GpioDataRegs.GPCCLEAR.bit.GPIO64=1; SPI_Xmit (0x9F); RDATA = SpiaRegs.SPIRXBUF; GpioDataRegs.GPCSET.BIPOL64 = 1; } void error (void) { asm (" ESTOP0"); //测试失败!! 停下来! 对于(;;); } void SPI_xmit (uint16 a) { SpiaRegs.SPITXBUF = A; }
//###################################################################################################################### // //文件:F2837xS_SPI.c // //标题:F2837xS SPI 初始化和支持函数。 // //########################################################################################################################## //$TI 发行版:F2837xS 支持库 v3.04.00.00 $ //$发行 日期:Sun Mar 25 13:27:27 CDT 2018 $ //版权所有: //版权所有(C) 2014-2018 Texas Instruments Incorporated - http://www.ti.com/ // 只要 满足以下条件,就允许以源代码和二进制形式重新分发和使用//修改或不修改//: // //重新分发源代码必须保留上述版权 //声明、此条件列表和以下免责声明。 // //二进制形式的再发行必须复制上述版权 //声明、此条件列表和// 分发随附的//文档和/或其他材料中的以下免责声明。 //// 未经 事先书面许可,不能使用德州仪器公司的名称或//其贡献者的名称来认可或推广源自此软件的产品//。 //// 本软件由版权所有者和贡献者提供 //“按原样”,不 承认任何明示或暗示的保证,包括但不限于//适销性和对//特定用途适用性的暗示保证。 在任何情况下、版权 //所有者或贡献者都不对任何直接、间接、偶然、 //特殊、模范、 或相应的损害(包括但不 限于采购替代产品或服务;丧失使用、 //数据或利润; 或业务中断)、无论 出于何种原因使用 本软件(即使被告知可能会造成此类损坏)、还是出于任何原因而产生的任何//责任理论(无论是合同、严格责任还是侵权行为)//(包括疏忽或其他)。 //$ //######################################################################################################################## // //包含的文件 // #include "F2837xS_device.h" #include "F2837xS_examples.h" // 计算 BRR:7位波特率寄存器值 // SPI CLK freq = 500kHz // LSPCLK freq = CPU freq /4 (默认) // BRR =(LSPCLK 频率/ SPI CLK 频率)- 1 // #if CPU_FRQ_200MHz #define SPI_BRR (((200E6 / 4)/ 500E3)- 1 #endif CPU_FRQ_150MHz #define SPI_BRR (((150E6 / 4)/ 500E3)- 1 #endif CPU_FRQ_120MHz #define SPI_BRR (((120E6 / 4)/ 500E3)- 1 #endif // InitSPI -此函数将 SPI 初始化为已知状态 // void InitSpi (void) { //初始化 SPI-A //在配置更改之前将 RESET 设置为低电平 //时钟极性(0 =上升、1 =下降) // 16位字符 //启用环回 SpiaRegs.SPICCR.bit.SPISWRESET = 0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; SpiaRegs.SPICCR.bit.SPICHAR =(7); SpiaRegs.SPICCR.bit.SPILBK = 0; //启用主设备(0 =从设备,1 =主设备) //启用传输(TALK) //时钟相位(0 =正常、1 =延迟) //禁用 SPI 中断 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; SpiaRegs.SPICTL.bit.TALK = 1; SpiaRegs.SPICTL.bit.CLK_PHASE = 0; SpiaRegs.SPICTL.bit.SPIINTENA=0; //设置波特率 SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR; //设置空闲位 //在断点上停止不会停止 SPI SpiaRegs.SPIPRI.bit.FREE = 1; //解除 SPI 复位 SpiaRegs.SPICCR.bit.SPISWRESET = 1; }// InitSpiGpio -此函数初始化 GPIO 引脚以用作 SPI 引脚。 // 每个 GPIO 引脚可配置为 GPIO 引脚或最多3 // 不同的外设功能引脚。 默认情况下、所有引脚均为 // 复位后作为 GPIO 输入。 // // 注意: // 每个 SPI 外设// 对于 SPISOMO 运行、只应启用一个 GPIO 引脚。 // 对于 SPISOMI 运行、只应启用一个 GPIO 引脚。 // 对于 SPICLK 运行、只应启用一个 GPIO 引脚。 // SPISTE 操作只应启用一个 GPIO 引脚。 // 注释掉其他不需要的行。 // void InitSpiGpio() {InitSpiaGpio() ; }// InitSpiaGpio -初始化 SPIA GPIO // void InitSpiaGpio() {EALLOW ; // //为所选引脚启用内部上拉 // //用户可以启用或禁用上拉。 //这将启用指定引脚的上拉电阻。 //注释掉其他不需要的行。 // GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO16上的上拉电阻器(SPISIMOA) GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO17上的上拉电阻器(SPISOMIA) GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO18上的上拉电阻器(SPICLKA) // //仅将所选引脚的限定条件设置为异步 // //注释掉其他不需要的行。 // GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO16 (SPISIMOA) GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO17 (SPISOMIA) GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO18 (SPICLKA) // //使用 GPIO 寄存器配置 SPI-A 引脚 // //这指定哪些可能的 GPIO 引脚将是 SPI 功能 //引脚。 //注释掉其他不需要的行。 // GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;//将 GPIO16配置为 SPISIMOA GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;//将 GPIO17配置为 SPISOMIA GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将 GPIO18配置为 SPICLKA GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO16配置为 SPISIMOA GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//将 GPIO17配置为 SPISOMIA GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将 GPIO18配置为 SPICLKA GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0;//启用 GPIO58上的上拉电阻器(SPISTEA) GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 0;// 0=GPIO、1=MCLKRA、2=SCITXDB、3=EPWM7A GpioCtrlRegs.GPCDIR.bit.GPIO64=1; // 1=输出,0=输入 // GpioDataRegs.GPCSET.BIT.GPIO64 = 1; //取消注释 if ->初始设置为高电平 GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;//启用 GPIO58上的上拉电阻(WP) GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 0;// 0=GPIO、1=MCLKRA、2=SCITXDB、3=EPWM7A GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1; // 1=输出,0=输入 // GpioDataRegs.GPBSET.BIO63 = 1; //取消注释 if ->初始设置为高电平 EDIS; } //// 文件结束 //
此致
Szymon