请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28069 //###################################################################################################################### // ////文件:example_2806xSpi_FFDLB.c // //标题:SPI 数字回路示例 // ! addtogroup f2806x_example_list //!SPI 数字回路(SPI_LOOP)
//! //! 该程序使用外设的内部回路测试模式。 //! 除引导模式引脚配置外、无其他硬件配置 //! 要求。 不使用中断。 //! //! 发送数据流、然后与接收到的数据流进行比较。 //! 发送的数据如下所示:\n //! 0000 0001 0002 0003 0004 0005 0006 0007… FFFE FFFF \n //! 这种模式会一直重复。 //! //! b 监视\b 变量\n //! -\n sdata、sent data //! -/b RDATA,接收数据 ////////################## ################################################################################ //$TI 发布:F2806x 支持库 v2.04.00.00 $ //$发布 日期:星期一5月27日06:46:38 CDT 2019 $ //版权所有: //版权所有(C) 2009-2019德州仪器(TI)公司- http://www.ti.com/ // 只要 满足以下条件,就允许以源代码和二进制形式重新分发和使用//修改或不修改//: // //重新分发源代码必须保留上述版权 //声明、此条件列表和以下免责声明。 // //二进制形式的再发行必须复制上述版权 //声明、此条件列表和// 分发随附的//文档和/或其他材料中的以下免责声明。 //// 未经 事先书面许可,不能使用德州仪器公司的名称或//其贡献者的名称来认可或推广源自此软件的产品//。 //// 本软件由版权所有者和贡献者提供 //“按原样”,不 承认任何明示或暗示的保证,包括但不限于//适销性和对//特定用途适用性的暗示保证。 在任何情况下、版权 //所有者或贡献者都不对任何直接、间接、偶然、 //特殊、模范、 或相应的损害(包括但不 限于采购替代产品或服务;丧失使用、 //数据或利润; 或业务中断)、无论 出于何种原因使用 本软件(即使被告知可能会造成此类损坏)、还是出于任何原因而产生的任何//责任理论(无论是合同、严格责任还是侵权行为)//(包括疏忽或其他)。 //$ //######################################################################################################################## // //包含的文件 // #include "DSP28x_Project.h" //设备头文件和示例包括文件 // //函数原型 // void SPI_xmit (uint16 a); void SPI_fifo_init (void); void SPI_init (void); void error (void); // Main // void main (void) { uint16 sdata;//发送数据 uint16 RDATA;//接收的数据 // //步骤1. 初始化系统控制: // PLL、安全装置、启用外设时钟 //此示例函数位于 F2806x_SYSCTRL.c 文件中。 // InitSysCtrl(); // //步骤2. 初始化 GPIO: //此示例函数位于 F2806x_GPIO.c 文件和中 //说明了如何将 GPIO 设置为其默认状态。 // //InitGpio();//针对此示例跳过 // //仅为 SPI-A 功能设置 GP I/O //此函数位于 F2806x_SPI.c 中 // InitSpiaGpio(); // //步骤3. 清除所有中断并初始化 PIE 矢量表: //禁用 CPU 中断 // Dint; // //将 PIE 控制寄存器初始化为默认状态。 //默认状态为禁用所有 PIE 中断和标志 //被清除。 //此函数位于 F2806x_PIECTRL.c 文件中。 // InitPieCtrl(); // //禁用 CPU 中断并清除所有 CPU 中断标志 // IER = 0x0000; IFR = 0x0000; // //使用指向 shell 中断的指针初始化 PIE 矢量表 //服务例程(ISR)。 //这将填充整个表,即使是中断也是如此 //在本例中未使用。 这对于调试很有用。 //可以在 F2806x_DefaultIsr.c 中找到 shell ISR 例程 //此函数可在 F2806x_PieVect.c 中找到 // InitPieVectTable(); // //步骤4. 初始化所有器件外设: //此函数可在 F2806x_InitPeripherals.c 中找到 // //InitPeripheral();//本示例不需要 SPI_Fifo_init();//初始化 SPI FIFO SPI_init();// init SPI // //步骤5. 用户特定代码: //此示例中不使用中断。 // sdata = 0x0000; for (;;) { // //发送数据 // SPI_xmit (sdata); // //等待数据被接收 // while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1) { } // //检查已发送的数据 // RDATA = SpiaRegs.SPIRXBUF; if (RDATA!= sdata) { error(); } sdata++; } } // //错误-步骤7。 在 此处插入所有本地中断服务例程(ISR)//和函数 // void error (void) { _asm (" ESTOP0");//测试失败!! 停下来! 对于(;;); } // spi_init - // void spi_init () { SpiaRegs.SPICCR.all =0x000F;//复位打开、上升沿、16位字符位 // //启用主控模式、正常阶段、启用通话和禁用 SPI int。 // SpiaRegs.SPICTL.ALL =0x0006; SpiaRegs.SPIBRR = 0x007F; SpiaRegs.SPICCR.all =0x009F;//从复位中撤回 SPI SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以使断点不会干扰 xmission } // SPI_xmit - // void SPI_xmit (uint16 a) { SpiaRegs.SPITXBUF=a; } // SPI_Fifo_init - // void SPI_Fifo_init (void) { // //初始化 SPI FIFO 寄存器 // SpiaRegs.SPIFFTX.All=0xE040; SpiaRegs.SPIFFRX.All=0x2044; SpiaRegs.SPIFFCT.ALL=0x0; } // //文件结束 //
上述代码来自 SPI 的 TI 示例代码、尽管在 RDATA 中正确接收数据、但我探测引脚(GPIO18)、没有时钟脉冲。 我还尝试关闭回送、但引脚上没有时钟脉冲。
我们非常感谢您的任何帮助。 谢谢。