主题中讨论的其他器件: TMS320C6748、 OMAP-L138
我使用 的是 TMDSLCDK6748 评估板。 我想使用 SPI0通信配置电路板中的 SPI 通信。 但是、J15中只有 SPI0_SIMO、SPI0_SOMI 和 SPI0_SCLK 引脚可用、任何输出跳线都没有芯片选择引脚输出。 它们似乎连接到 LAN IC、 U23、LAN8710A-EZK。 SPI1通信可用、似乎已连接到摄像头接头。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我使用 的是 TMDSLCDK6748 评估板。 我想使用 SPI0通信配置电路板中的 SPI 通信。 但是、J15中只有 SPI0_SIMO、SPI0_SOMI 和 SPI0_SCLK 引脚可用、任何输出跳线都没有芯片选择引脚输出。 它们似乎连接到 LAN IC、 U23、LAN8710A-EZK。 SPI1通信可用、似乎已连接到摄像头接头。
您好!
SPI0_ENSn/EPWM0_B/MII_RXDV;SPI0_SCSn_5/UART0_RXD/MII_RXD3和 SPI0_SCSn_4/UART0_TXD/MII_RXD2在扩展头上可用。
您需要正确地引脚排列 TMS320C6748器件的 C17、C19和 D18焊球:
您需要组装 R214至 R219以将器件焊球物理连接到扩展接头。 之后、您可以使用 J15.P21、J15.P23、J15.P25、J15.P27、J15.P29、 用于 SPI 通信的 J15.P31。
此致、
Yordan
Yordan Kovachev 您好、
感谢您的帮助、
编码是使用 TI 提供的 Starterware 完成的。 针对我的应用修改了代码"SPI_C674x_C6748_lcdkC6748"。
如何使用程序完全禁用 PHY?
#include
#include "SoC_C6748.h"
#include "HW_PSC_C6748.h"
#include "lcdkC6748.h"
#include "UART.h"
#include "SPI.h"
#include "interrupt.h"
#include "uartStdio.h"
/*********
** 内部宏定义
//*
将 SMIO、SOMI、CLK 和 CS 引脚配置为功能引脚的值*/
#define SIMO_SOMI_CLK 0x00000E00
#define char_length 0x08
/*********
** 内部函数原型
/
static void SPIConfigDataFmtReg (unsigned int dataFormat);
static void SpiTransfer (void);
static void SetUpInt (void);
static void SetUpSPI (void);
static void testCommand (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)
{
/*峰化 SPI0实例。 *
PSCModuleControl (SOC_PSC_0_regs、HW_PSC_SPI0、PSC_POWERDOMAIN_AYST_ON、PSC_MDCTL_NEW_ENABLE);
/*执行 SPI0的引脚复用。 *
SPIPinMuxSetup (0);
/*启用 SPI0中断的使用。 *
SetUpInt();
/*配置和启用 SPI0实例。 *
SetUpSPI();
while (1)
{
testCommand();
}
}
static void testCommand (void)
{
int i;
for (i=0;i<7;i++)
TX_DATA[i]=0x55;
TX_len = 7;
RX_len = 7;
SPIDat1SOC (SOC_SPI_0_regs、 (SPI_CSHOLD | SPI_DATA_FORMAT0)、0x4);
SpiTransfer();
}//**
将 ARM 中断控制器配置为生成 SPI 中断
**
*/
static void SetUpInt(void)
{//
设置 ARM 或 DSP 中断控制器
#ifdef _TMS320C6x
//初始化 DSP 中断控制器
IntDSPINTTCInit();
//在矢量表
中注册 ISR IntRegister (C674x_MASK_INT4,SPIIsr);
//将系统中断映射到 DSP 可屏蔽中断
IntEventMap (C674x_MASK_INT4、SYS_INT_SPI0_INT);
//启用 DSP 可屏蔽中断
IntEnable (C674x_MASK_INT4);
//全局
启用 DSP 中断 IntGlobal();
#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 = 0x04;
unsigned char dcs = 0x04;
unsigned int val = SIMO_SOMI_CLK;
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 (unsigned int dataFormat)
{
/*配置 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 发送和接收中断。
**断言芯片选择线路。
*/
静态 void SpiTransfer (void)
{
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、0x4);
}
/*
**数据传输和接收 SPIIsr
**
*/
void SPIIsr (void)
{
unsigned int 代码= 0;
#ifdef _TMS320C6x
IntEventClear (SYS_INT_SPI1_INT);
#else
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);
}
}
/********* 文件结尾 /
#include "gpio.h"
#include "psc.h"
#include "SoC_C6748.h"
#include "lcdkC6748.h"
#include "hw_types.h"
#include "HW_syscfg0_C6748.h"
#define PINMUX3_GPIO8_5_ENABLE (SYSCFG_PINX3_8)<_MUX3_12_PINX3_INMU12_PINX3_GPIO5_PINX3_0_GPIO5_INMUX3_GPIO12_PINX3_GPIO5_INMUX3_PINX
SYSCFG_PINMUX3_PINMUX3_15_12_SHIFT)
void simopinsetup ();
int main (void)
{
somipinsetup();
GPIODirModeSet (SOC_GPIO_0_regs、134、GPIO_DIR_OUTPUT);
while (1)
{
GPIOPinWrite (SOC_GPIO_0_regs、134、GPIO_PIN_HIGH);
Delay (100000);
GPIOPinWrite (SOC_GPIO_0_regs、 134、GPIO_PIN_LOW);
延迟(100000);
}
}
void somipinsetup()
{
unsigned int savePinmux = 0;
savePinmux =(HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (3))和
~(SYSCFG_PINMUX3_PINMUX3_11_8));
HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (3)=
(PINMUX3_GPIO8_6_ENABLE | savePinmux);
}
在此代码中、我将 SIMO 引脚复用到 GPIO 引脚。 我将获得毫伏范围的输出。
我在 SPI0引脚上遇到了相同的问题。 我想使用 SPI0、如果可能、也使用 LAN 芯片。 我需要使用 SPI 仅对 LCD 进行写入(无需对 SPI LCD 进行读取)。
我想知道当我想写入 LCD 时是否可以将 TX_EN 置为低电平? LAN 控制器查看 TX_EN 上升沿以发送数据。 如果我将其保持在低电平、我是否可以将数据发送到 LCD (SPI LCD)而不会与来自 LAN 控制器的数据发生混淆?