Other Parts Discussed in Thread: AFE5809EVM, AFE5809
主题中讨论的其他器件: TSW1400EVM、 AFE5809
工具/软件:Starterware
尊敬的朋友:
我一直在努力使用 OMAP L138 LCDK 的 SPI 模块来初始化 AFE5809EVM。 之前、我 已使用 AFE5809EVM GUI 成功初始化 AFE5809EVM 和 TSW1400EVM。 我决定在此处创建有关如何初始化 AFE5809EVM 的全面参考。 希望我们能解决这个问题、而这条线程将对未来的用户有益。
正如本主题(e2e.ti.com/.../576643)中建议的、我有:
- 首先、使用 AFE5809EVM GUI 启动 AFE5809EVM
- 第二、我已断开 AFE EVM 板上的 FB17 (在此阶段、AFE5809EVM 已由 GUI 成功初始化。 现在、我们断开 FB17、因此我们可以使用 P14引脚启动 SPI 连接。)
- 第三、我已将 OMAP L138 EVM 的 SPI 引脚连接到 AFE5809EVM 的 P14。
- 我测试是否可以通过 SPI 正确通信。 为此,我只需启用读出(通过设置寄存器00 =(值) 0x0002),然后读取寄存器04。
- 当我执行此测试时、我看不到 TP 12上的任何更改。
请验证以下陈述是否正确:
- AFE5809EVM 的 SPI 使用高极性和异相时钟(图83。 afe5809的 SPI 时序)。 在代码中、我们需要此行中包含以下信息:
SPIConfigClkFormat (SOC_SPI_1_regs、(SPI_CLK_POL_HIGH | SPI_CLK_OUTOFPHASE)、
数据格式); - 为了初始化 AFE5809、我只需将 P14的 SCLK、SDATA、GND 和 SEN 引脚连接到 OMAP L138LCDK 的适当 SPI 引脚。 (我不需要连接以下任何引脚:PDN_GLOBAL、PDN_VCA、SPI_DIG_EN 或 AFE5809EVM P14上的任何其他引脚)
- 此代码是 Starterware SPI 示例的修改版本。 代码是否正常?
-
请验证下面示波器上显示的 SPI 信号是否正常。
非常感谢您的观看。 我真的很感激:)
我的代码:
/** *\file spi.c * \brief 这是一个调用某些 API 的示例应用文件* 从 SPI 器件抽象层执行配置 、* 传输和接收操作。 */ * *版权所有(C) 2012德州仪器(TI)公司- http://www.ti.com/ * 只要 符合以下条件*、就允许以源代码和二进制形式重新分发和使用*进行修改或不进行修改: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * *二进制形式的再发行必须在 * 发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * *未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。 * *本软件由版权所有者和贡献者 *按原样"提供、 且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权 *所有者或贡献者都不对任何直接、间接、偶然、 *特殊、模范、 或相应的损害(包括但不 限于*采购替代产品或服务;丧失使用、 *数据或利润; 或业务中断)、但出于 任何*责任理论、无论是合同、严格责任还是侵权 行为*(包括疏忽或其他原因)、即使 被告知可能会造成此类损坏、也是出于此类责任理论。 */ #include #include "SoC_OMAPL138.h" #include "HW_PSC_OMAPL138.h" #include "lcdkOMAPL138.h" #include "UART.h" #include "SPI.h" #include "interrupt.h" #include "uartStdio.h" /********* ** 内部宏定义 //* 将 SMIO、SOMI、CLK 和 CS 引脚配置为功能引脚的值*/ #define SIMO_SOMI_CLK_CS 0x00000E01 #define char_length 0x8 /********* ** 内部函数原型 / static void SPIConfigDataFmtReg (unsigned int dataFormat); static void SpiTransfer (void); static void SetUpInt (void); static void SetUpSPI (void); static void GetStatusCommand (void); static void SendCommand (void); void SPIIsr (void); /********* ** 内部变量定义 / volatile unsigned int flag = 1; unsigned int TX_len; unsigned int Rx_len; unsigned char vrf_data[260]; unsigned char TX_DATA[260]; volatile unsigned char Rx_data[260]; unsigned char * p_TX; volatile unsigned char * p_Rx; volatile unsigned char StatusResponseMessage[16]; / ** 内部功能定义 / int main (void) { /*唤醒 SPI1实例。 * PSCModuleControl (SOC_PSC_1_regs、HW_PSC_SPI1、PSC_POWERDOMAIN_AYS_ON、 PSC_MDCTL_NEW_ENABLE); /*为串行通信初始化 UART 实例。 // // UARTStdioInit(); /*执行 SPI1的引脚复用。 * SPIPinMuxSetup (1); /* **使用 SPI1的芯片选择(CS) 0引脚与指纹传感器通信。 * SPI1CSPinMuxSetup (0); /*启用 SPI1中断的使用。 * SetUpInt(); /*配置和启用 SPI1实例。 * SetUpSPI(); while (1) { SendCommand(); printf ("已发送"); } } 静态 void SendCommand (void) { //发出命令启用 TP12的读出 TX_DATA[0]= 0x00; TX_DATA[0]= 0x00; TX_DATA[0]= 0x02; TX_LEN = 3; RX_LEN = 3; SPIDat1Config (SOC_SPI_1_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、0x01); SpiTransfer(); int i = 0; while (I < 10000) { i++; } //发出命令读取寄存器04 TX_DATA[0]= 0x04; TX_DATA[0]= 0x00; TX_DATA[0]= 0x18; TX_LEN = 3; RX_LEN = 3; SPIDat1Config (SOC_SPI_1_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、0x01); SpiTransfer(); }//** 将 ARM 中断控制器配置为生成 SPI 中断 ** */ STATIC void SetUpInt(void){ //设置 ARM 或 DSP 中断控制 器#ifdef _TMS320C6x //初始化 DSP 中断控制器 IntDSPINTCMINIT(); //在矢量表中注册 ISR IntRegister (C674x_MASK_INT4、SPIIsr); //将系统中断映射到 DSP 可屏蔽中断 IntEventMap (C674x_MASK_INT4、SYS_INT_SPI1_INT); //启用 DSP 可屏蔽中断 IntEnable (C674x_MASK_INT4); //全局启用 DSP 中断 IntGlobalEnable(); #else /*初始化 ARM 中断控制器。*/ IntAINTCInit(); /*在中断矢量表中注册 ISR。*/ 内部寄存器(SYS_INT_SPINT1、SPIIsr); /*为系统中断56设置 AINTC 的通道编号2。 *通道2被映射到 ARM9的 IRQ 中断。 * IntChannelSet (SYS_INT_SPINT1、2); /*为 AINTC 启用系统中断。*/ IntSystemEnable (SYS_INT_SPINT1); /*在 CPSR 中启用 IRQ。*/ IntMasterIRQEnable(); /*在 AINTC 的 GER 中启用中断。*/ IntGlobalEnable(); /*在 AINTC 的 HIER 中启用中断。*/ IntIRQEnable(); #endif } /* **配置 SPI 控制器 ** */ static void SetUpSPI (void) { unsigned char cs = 0x01;//警告:更改后、也会在 SpiTransfer 中更改0x01 unsigned char dcs = 0x01; unsigned int val = SIMO_SOMI_CLK_CS; SPIReset (SOC_SPI_1_regs); SPIOutOfReset (SOC_SPI_1_regs); SPIModeConfigure (SOC_SPI_1_regs、SPI_MASTER_MODE); //SPIClkConfigure (SOC_SPI_1_regs、150000000、20000000、SPI_DATA_FORMAT0); SPIClkConfigure (SOC_SPI_1_regs、150000000、1000000、SPI_DATA_FORMAT0); SPIPinControl (SOC_SPI_1_regs、0、0、&val); SPIDefaultCSSet (SOC_SPI_1_regs、dcs); /*配置 SPI 数据格式寄存器*/ SPIConfigDataFmtReg (SPI_DATA_FORMAT0); /*选择要使用的 SPI 数据格式寄存器并设置 CSHOLD *将 CS 引脚置为有效(LINE) * SPIDat1Config (SOC_SPI_1_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、cs); /*将中断映射到中断线路 INT1 */ SPIIntLevelSet (SOC_SPI_1_regs、SPI_RECV_INTLVL | SPI_Transmit _INTLVL); /*启用 SPI 通信*/ SPIEnable (SOC_SPI_1_regs); } // ***配置 SPI 的数据格式寄存器 ** * 静态空 SPIConfigDataFmtReg (unsigned int dataFormat) { /*配置 SPI 时钟的极性和相位*/ /* SPIConfigClkFormat (SOC_SPI_1_regs、 (SPI_CLK_POL_HIGH | SPI_CLK_INPHASE)、 数据格式); * SPIConfigClkFormat (SOC_SPI_1_regs、(SPI_CLK_POL_HIGH | SPI_CLK_OUTOFPHASE)、 数据格式); /*将 SPI 配置为在数据传输期间首先发送 MSB 位*/ SPIShiftMsbFirst (SOC_SPI_1_regs、dataFormat); /*设置字符长度*/ SPICharLengthSet (SOC_SPI_1_regs、char_length、dataFormat); } // ***启用 SPI 发送和接收中断。 **断言芯片选择线路。 */ 静态 void SpiTransfer (void) { P_TX =&TX_DATA[0]; P_Rx =&Rx_DATA[0]; SPIIntEnable (SOC_SPI_1_regs、(SPI_RECV_INT | SPI_Transmit _INT)); while (标志) ; FLAG = 1; /*断言 CS 引脚(LINE)*/ SPIDat1Config (SOC_SPI_1_regs、SPI_DATA_FORMAT0、0x01);// cs Value } // ***数据传输和接收 SPIIsr ** */ void SPIIsr (void) { unsigned int 代码= 0; #ifdef _TMS320C6x IntEventClear (SYS_INT_SPI1_INT); #else IntSystemStatusClear (56); #endif intCode = SPIInterruptVectorGet (SOC_SPI_1_regs); while (intCode) { if (intCode = SPI_TX_BUF_EMPTY) { TX_LEN --; SPITransmitData1 (SOC_SPI_1_regs、* p_tx); P_TX++; 如果(!TX_Len) { SPIIntDisable (SOC_SPI_1_regs、SPI_Transmit _INT); } } if (intCode = SPI_RECV_FULL) { RX_LEN --; * p_rx =(char) SPIDataReceive (SOC_SPI_1_regs); P_RX++; 如果(!rx_len) { 标志= 0; SPIIntDisable (SOC_SPI_1_regs、SPI_RECV_INT); } } intCode = SPIInterruptVectorGet (SOC_SPI_1_regs); } } /********* 文件结尾 /
这是整个系统:
以下是 OMAP L138 LCDK 的 SPI1模块的输出:
PIC。 1:SDATA 和 ENA
PIC。 2:SCLK 和 ENA
PIC。 3:SCLK 的关闭视图



