工具/软件:Starterware
我在 C6748 Starterware SPI 示例中将 CS2更改为 CS0。 但是、我没有通过示波器看到任何 CS0信号。 此代码会出现什么问题。 有什么想法吗? 该电路板是根据 C6748 LCDK 定制的、CS0直接连接到 DSP。
/**
*\file spi.c
*
*\brief 这是调用某些 API 的示例应用文件
* 从 SPI 器件抽象层执行配置、
* 传输和接收操作。
*
/*
*版权所有(C) 2012德州仪器(TI)公司- http://www.ti.com/
*
* 以源代码和二进制形式重新分发和使用、有无
* 如果满足以下条件、则允许进行修改
符合*:
*
* 源代码的重新分发必须保留上述版权
* 注意、此条件列表和以下免责声明。
*
* 二进制形式的再发行必须复制上述版权
* 请注意、中的此条件列表和以下免责声明
* 随提供的文档和/或其他材料
*分发。
*
* 德州仪器公司的名称和名称均不相同
* 其贡献者可用于认可或推广衍生产品
* 未经特定的事先书面许可。
*
* 本软件由版权所有者和贡献者提供
* "按原样"以及任何明示或暗示的保证、包括但不包括
* 仅限于对适销性和适用性的暗示保证
* 一项特定目的不予承认。 在任何情况下、版权均不得
* 所有者或贡献者应对任何直接、间接、偶然或
* 特殊、惩戒性或后果性损害(包括但不包括)
* 仅限于采购替代货物或服务;丧失使用、
* 数据或利润;或业务中断)
* 责任理论、无论是合同责任、严格责任还是侵权行为
* (包括疏忽或其他)因使用而以任何方式产生
* 、即使被告知可能会发生此类损坏。
*
#include
#include "SoC_C6748.h"
#include "HW_PSC_C6748.h"
#include "lcdkC6748.h"
#include "UART.h"
#include "spi.h"
#include "psc.h"
#include "interrupt.h"
#include "uartStdio.h"
/*********
** 内部宏定义
秘书长的报告 /
/*将 SMIO、SOMI、CLK 和 CS 引脚配置为功能引脚的值*/
#define SIMO_SOMI_CLK_CS 0x00000E01
#define char_length 0x10
/*********
** 内部函数原型
秘书长的报告 /
静态空 SPIConfigDataFmtReg (unsigned int dataFormat);
//静态空 SpiTransfer (void);
静态空 SetUpInt(void);
静态空 SetUpSPI (空);
静态空 GetStatusCommand (空);
静态空 ResetCommand (空);
void SPIIsr (void);
void delay (volatile unsigned int delay);
静态空 TX_Command (空);
/*********
** 内部变量定义
秘书长的报告 /
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;
unsigned short *p16_TX;
unsigned short *p16_rx;
无符号 short tx16_data[260];
unsigned short rx16_data[260];
volatile unsigned char StatusResponseMessage[16];
/*********
** 内部函数定义
秘书长的报告 /
int main (空)
{
/*唤醒 SPI1实例。 *
PSCModuleControl (SOC_PSC_0_regs、HW_PSC_SPI0、PSC_POWERDOMAIN_AYS_ON、
PSC_MDCTL_NEW_ENABLE);
/*为串行通信初始化 UART 实例。 *
UARTStdioInit();
UARTPuts ("欢迎使用 StarterWare SPI 应用程序。\r\n\r\n、-1);
UARTPuts ("在此情况下、SoC 上的 SPI 控制器与之通信"、-1);
UARTPuts (" LCDK 上存在指纹传感器。\r\n\r\n、-1);
/*执行 SPI1的引脚复用。 *
SPIPinMuxSetup (1);
/*
**使用 SPI1的芯片选择(CS) 0引脚与指纹传感器通信。
*
SPI1CSPinMuxSetup (0);//选择 CS0
/*启用 SPI1中断的使用。 *
SetUpInt();
/*配置和启用 SPI1实例。 *
SetUpSPI();
/*对指纹传感器发出重置*/
// ResetCommand();
TX_Command();
// UARTPuts ("正在尝试重置指纹传感器。\r\n\r\n"、-1);
SPITransmitData1 (SOC_SPI_0_regs、tx16_DATA[0]);
printf ("发送的数据[0]为%x\n"、tx16_data[0]);
// 延迟(10000000);
SPITransmitData1 (SOC_SPI_0_regs、tx16_DATA[1]);
printf ("发送的数据[1]为%x\n"、tx16_data[1]);
// 延迟(10000000);
SPITransmitData1 (SOC_SPI_0_regs、tx16_DATA[0]);
printf ("发送的数据[0]为%x\n"、tx16_data[0]);
// 延迟(10000000);
SPITransmitData1 (SOC_SPI_0_regs、tx16_DATA[2]);
printf ("发送的数据[2]为%x\n"、tx16_data[2]);
// 延迟(10000000);
while (1)
{
SPITransmitData1 (SOC_SPI_0_regs、tx16_DATA[0]);
printf ("发送的数据[0]为%x\n"、tx16_data[0]);
// 延迟(10000000);
SPITransmitData1 (SOC_SPI_0_regs、tx16_DATA[3]);
printf ("发送的数据[3]为%x\n"、tx16_data[3]);
// 延迟(10000000);
}
/*读取指纹传感器的状态*/
/*
GetStatusCommand();
if (StatusResponse Message[11]=0x48)
{
UARTPuts ("指纹传感器已成功重置。\r\n\r\n、-1);
}
其他
{
UARTPuts ("错误:指纹传感器重置尝试失败。\r\n\r\n、-1);
}
*
}
静态空 TX_Command (空)
{
//命令列表
TX16_DATA[0]= 0x8001;//选择 REG01
TX16_DATA[1]= 0x0001;//设置软件复位
TX16_DATA[2]= 0x0000;//复位软件复位
TX16_DATA[3]= 0x0080;//将显示设置为打开
}
静态空 GetStatusCommand (空)
{
unsigned int i;
//发出获取状态命令和读取状态消息响应
TX_DATA[0]= 0x80;
TX_DATA[1]= 0x10;
TX_DATA[2]= 0xBA;
TX_DATA[3]= 0x07;
TX_DATA[4]= 0x00;
TX_DATA[5]= 0x00;
TX_DATA[6]= 0x00;
TX_DATA[7]= 0xFF;
TX_DATA[8]= 0xFF;
TX_DATA[9]= 0xFF;
TX_DATA[10]= 0xFF;
TX_DATA[11]= 0xFF;
TX_DATA[12]= 0xFF;
TX_DATA[13]= 0xFF;
TX_DATA[14]= 0xFF;
TX_DATA[15]= 0xFF;
TX_DATA[16]= 0xFF;
TX_DATA[17]= 0xFF;
TX_DATA[18]= 0xFF;
TX_DATA[19]= 0xFF;
TX_DATA[20]= 0xFF;
TX_DATA[21]= 0xFF;
TX_DATA[22]= 0xFF;
TX_LEN = 23;
RX_LEN = 23;
SPIDat1Config (SOC_SPI_0_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、0x1);
SpiTransfer();
for (i=0;i<16;i++)
{
StatusResponse Message[i]= RX_DATA[i+7];
}
}
静态空 ResetCommand (空)
{
//发出重置命令
TX_DATA[0]= 0x80;
TX_DATA[1]= 0x14;
TX_DATA[2]= 0xBA;
TX_DATA[3]= 0x07;
TX_DATA[4]= 0x00;
TX_DATA[5]= 0x00;
TX_DATA[6]= 0x00;
TX_LEN = 7;
RX_LEN = 7;
SPIDat1Config (SOC_SPI_0_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、0x1);
SpiTransfer();
}
/*
**将 ARM 中断控制器配置为生成 SPI 中断
**
*
静态空 SetUpInt (空)
{
//设置 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();
其他
/*初始化 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 控制器
**
*
静态空 SetUpSPI (空)
{
unsigned char cs = 0x01;
unsigned char dcs = 0x01;
unsigned int val = SIMO_SOMI_CLK_CS;
SPIReset (SOC_SPI_0_regs);
SPIOutOfReset (SOC_SPI_0_regs);
SPIModeConfigure (SOC_SPI_0_regs、SPI_MASTER_MODE);
//SPIClkConfigure (SOC_SPI_0_regs、150000000、20000000、SPI_DATA_FORMAT0);
SPIClkConfigure (SOC_SPI_0_regs、150000000、1000000、SPI_DATA_FORMAT0);
SPIPinControl (SOC_SPI_0_regs、0、0、&val);
SPIDefaultCSSet (SOC_SPI_0_regs、dcs);
/*配置 SPI 数据格式寄存器*/
SPIConfigDataFmtReg (SPI_DATA_FORMAT0);
/*选择要使用的 SPI 数据格式寄存器并设置 CSHOLD
*将 CS 引脚置为有效(LINE)
*
SPIDat1Config (SOC_SPI_0_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、cs);
/*将中断映射到中断线路 INT1 */
SPIIntLevelSet (SOC_SPI_0_regs、SPI_RECV_INTLVL | SPI_Transmit _INTLVL);
/*启用 SPI 通信*/
SPIEnable (SOC_SPI_0_regs);
}
/*
**配置 SPI 的数据格式寄存器
**
*
静态空 SPIConfigDataFmtReg (无符号整型数据格式)
{
/*配置 SPI 时钟的极性和相位*/
SPIConfigClkFormat (SOC_SPI_0_regs、
(SPI_CLK_POL_HIGH | SPI_CLK_INPHASE)、
数据格式);
/*
SPIConfigClkFormat (SOC_SPI_0_regs、
(SPI_CLK_POL_LOW | SPI_CLK_INPHASE)、
数据格式);
*
/*将 SPI 配置为在数据传输期间首先发送 MSB 位*/
SPIShiftMsbFirst (SOC_SPI_0_regs、dataFormat);
/*设置字符长度*/
SPICharLengthSet (SOC_SPI_0_regs、char_length、dataFormat);
}
/*
**启用 SPI 发送和接收中断。
**断言芯片选择线路。
*
静态空 SpiTransfer (空)
{
P_TX =&TX_DATA[0];
P_Rx =&Rx_DATA[0];
SPIIntEnable (SOC_SPI_0_regs、(SPI_RECV_INT | SPI_Transmit _INT);
while (flag);
FLAG = 1;
/*断言 CS 引脚(LINE)*/
SPIDat1Config (SOC_SPI_0_regs、SPI_DATA_FORMAT0、0x1);
}
/*
**数据传输和接收 SPIIsr
**
*
空 SPIIsr (空)
{
unsigned int 代码= 0;
#ifdef _TMS320C6x
IntEventClear (SYS_INT_SPI1_INT);
其他
IntSystemStatusClear (56);
#endif
intCode = SPIInterruptVectorGet (SOC_SPI_0_regs);
while (intCode)
{
if (intCode = SPI_TX_BUF_EMPTY)
{
TX_LEN --;
SPITransmitData1 (SOC_SPI_0_regs、* p_tx);
P_TX++;
如果(!TX_Len)
{
SPIIntDisable (SOC_SPI_0_regs、SPI_Transmit _INT);
}
}
if (intCode = SPI_RECV_FULL)
{
RX_LEN --;
*p_rx =(char) SPIDataReceive (SOC_SPI_0_regs);
P_RX++;
如果(!rx_len)
{
标志= 0;
SPIIntDisable (SOC_SPI_0_regs、SPI_RECV_INT);
}
}
intCode = SPIInterruptVectorGet (SOC_SPI_0_regs);
}
}
/*延迟功能*/
空延迟(volatile unsigned int delay)
{
while (delay--);
}
/********* 文件结尾 /