Thread 中讨论的其他部件:SYSBIOS、TMDSLCDK6748
工具/软件:Starterware
你好
我想通过 TMS320C6748(TMDSLCDK6748)的 SPI0与 MAX4896进行通信
但 SPI0_CLK、SPI0_MOSI 中没有输出 (cs 为 SPI0_SCSn_4)
我修改文档 C:\Program Files\Texas Instruments\pdk_C6748_2_0_0\C6748_StarterWare_1_20_03_03\examples\lcdkC6748\spi\spi.c,并将其发送如下
请告诉我哪里出错了。
#define SIMO_SOMI_CLK_CS 0x00000E10
#define char_length 0x8
静态空 SPIConfigDataFmtReg (unsigned int dataFormat);
静态空 SpiTransfer (void);
静态空 SetUpInt(void);
静态空 SetUpSPI (空);
void SPIIsr (UArg arg);
MAIN ()
{
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);
//此函数选择要使用的 SPI0引脚。 SPI0引脚
// 与中其它外设的引脚复用
// 片上系统(SoC)。
SPIPinMuxSetup (0);
//此函数选择的指定芯片选择(CS)引脚
// 使用 SPI0。
SPI0CSPinMuxSetup (4);
//启用 SPI1中断的使用。 //
SetUpSPI();
Hwi_Params_init (params);
Params.EventID = 37;
params.enableInt = false;
ERROR_INIT (&EB);
Hwi3 = Hwi_create (4、&SPIIsr、¶ms、&EB);
if (Hwi3 ==空)
{
System_printf ("hwi_create()对于 SPI 失败!\n");
BIOS_exit (0);
}
Hwi_enable();
Hwi_enableInterrupt (4);
while (1)
SendCommand();
}
静态空 SendCommand (空)
{
//发出重置命令
TX_DATA[0]= 0x10;
TX_DATA[1]= 0x10;
TX_DATA[2]= 0x10;
TX_DATA[3]= 0x10;
TX_DATA[4]= 0x10;
TX_DATA[5]= 0x10;
TX_DATA[6]= 0x10;
TX_LEN = 7;
RX_LEN = 7;
SPIDat1Config (SOC_SPI_0_regs、SPI_DATA_FORMAT0、0x10); //选择 dataformat0、 0x10是否为 SPIx_SCS[4]???????? 什么是 dataformat0和 csdef 字段
//csdef 字段定义了不执行传输时 SPIx_SCS[n]引脚的状态。
//CSNR 域定义了主器件数据传输期间 SPIx_SCS[n]引脚的状态。
SpiTransfer();
}
静态空 SetUpSPI (空)
{
unsigned char cs = 0x10;
unsigned char dcs = 0x10;
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、1000000、SPI_DATA_FORMAT0);//? 设置时钟的预分频= 150000000/1000000 - 1
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_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_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、0x10);
}
/*
**数据传输和接收 SPIIsr
**
*
空 SPIIsr (UARg 参数)
{
unsigned int 代码= 0;
#ifdef _TMS320C6x
IntEventClear (SYS_INT_SPI0_INT);
其他
IntSystemStatusClear (56);
#endif
intCode = SPIInterruptVectorGet (SOC_SPI_0_regs);
while (intCode)
{
if (intCode = SPI_TX_BUF_EMPTY)
{
TX_LEN --;
//SPITransmitData1 (SOC_SPI_1_regs、* p_tx);
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);
}
}