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.

[参考译文] CCS/EK-TM4C123GXL:TM4C123GH6PM 上两个 SPI 端口的同时使用问题、仅用于发送

Guru**** 1796780 points
Other Parts Discussed in Thread: TM4C123GH6PM, EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/573833/ccs-ek-tm4c123gxl-simultaneous-use-problem-of-two-spi-ports-on-the-tm4c123gh6pm-for-transmit-only

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123GH6PM

工具/软件:Code Composer Studio

大家好、  

我一直在尝试配置 TM4C123GH6PM (Stellaris Launchpad)的 SSI 端口、但我现在遇到了三个问题。 详情如下:

我有两个电子纸显示屏(http://cdn-reichelt.de/documents/datenblatt/A400/EA_EPA20-A.pdf)(控制器:http://www.lcd-module.de/eng/pdf/zubehoer/ssd1606_1_1.pdf)连接到 uC 的第二个和第三个 SSI 端口。 这些连接是一对一的、没有串联或上拉/下拉电阻器等 但这种情况非常奇怪、我似乎不能同时使用两个 SSI 端口。  

连接详细信息:  

LCD 1:
Pb7 -> MOSI (2)-> LCD1_MOSI
Pb5 -> CS (2)-> LCD1_CS
PB4 -> SCK (2)-> LCD1_SCK

LCD 2:
PD3 -> MOSI (3)-> LCD2_MOSI
PD1 -> CS (3)-> LCD2_CS
PD0 -> SCK (3)-> LCD2_SCK

测试1:SSI2已配置并启用(SSI3尚未配置)。 然后将数据发送到第一个 LCD、它可以正常工作。 但是,我看到 SSI3的 CS 线路在切换,当 SSI2的 MOSI 线路切换时? 有什么想法,为什么会发生这种情况? (请参阅下面的 Screenshot_one)

屏幕截图_one:

测试2:现在我配置 SSI3端口并启用它(已配置并启用 SSI2)。 我还在 SSI3上发出数据0x80、但它不会出现在 MOSI 线路上、尽管我看到了时钟脉冲。 再说一次,我有什么问题? 另外,当 SSI3的 CS 线路切换时,SSI2端口的 MOSI 线路也会切换? (请参阅下面的 Screenshot_two)  

屏幕截图_2:

测试3:现在 SSI3和 SSI2都已配置和启用。 我现在再次尝试在 SSI2端口上发送数据(0x24)、但我再次看到时钟脉冲、但逻辑分析仪上的 MOSI 上没有任何数据。 查看示波器上的信号后、似乎正在传输数据、但线路未正确切换。 为什么在启用两个 SSI 端口后而不是仅启用一个端口后,现在会发生这种情况?

最初、我尝试将显示器连接到 LaunchPad、但后来甚至只使用 LaunchPad 而没有任何组件连接到 LaunchPad、结果是相同的。  

(请参阅下面的 Screenshot_three)

屏幕截图_three:

一些帮助/指示会更好。 我不能完全确定为什么会发生这种情况? 我正在使用以下代码(无中断、仅轮询、CCS 编译器:5.1.14、Tivaware:2.1.3.156)

-

指示器。

//用于启用和配置 SSI2和3

void LCD1_SPI_Init (void)
的代码片段{
// SSI2配置
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
GPIOPinConfigure (GPIO_PB4_SSI2CLK);
GPIOConfigure (GPIO_PB5_SSI2PH_GPIO7
);GPIOPinType7

(GPIOP_SSIP_SSIPTX_P7);GPIOPINSS GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7);

SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);

SSIIntDisable (SSI2_base、SSI_TXFF | SSI_RXFF | SSI_RXFF | SSI_RXTO | SSI_RXOR);
SSIConfigSetExpClk (SSI2_base、80000TO_MODE、SSI_MODE、SSI_0_MOFRF 2000000、8);

SSIEnable (SSI2_base);
}

void LCD2_SPI_Init (void)
{
//SSI3配置
SysCtlPeripheralEnable (sysctl_Periph_GPIOD);
GPIOPinConfigure (GPIO_PD0_SSI3CLK);
GPIOPinConfigure (GPIO_PD1_SSIP_P3CLK


);GPIOPinTX_SSIPTX_P3SSIFSS (GPIOP3_BASE);GPIOP3SD_GPIOP3SD_GPIOFSS (GPIOPENSS) GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3);

SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);

SSIIntDisable (SSI3_base、SSI_TXFF | SSI_RXFF | SSI_RXFRF | SSI_RXOR);
SSIConfigSetExpClk (SSI3_base、SSI_TXFF | SSI_RXFF | SSI_RXFRF | SSI0_MODE、SSI0、SSI_MO_MO_MODE、SSI_0_MODLE_0 2000000、8);

SSIEnable (SSI3_base);
}

//delay

void delay (unsigned long usecs){//以100us 为单位的延迟
unsigned long count;
while (usecs > 0)
{
计数= 666;//将此值设置为6666 1ms (对于80MHz 时钟)
while (计数> 0)
{
count--;
} //此 while 循环大约需要3个周期
usecs--;
}
//


用于将命令和数据发送到显示

的代码 void writecmd_LCD1 (char data)
{
//GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_1、0);//拉至低电平、因为这是命令
SSIDataPut (SSI2_base、data);
while (gpio1_base

)/sspio1 (sspio1)

;

//从 sspio1 (sspio1)/sspin 1 (*** 1)/sspin 1);// *** (ssn_date_delay (sspin 1);


delay (1);
}

void writecmd_LCD2 (char data)
{
//GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_5、0);//拉至低电平、因为这是命令
SSIDataPut (SSI3_base、data);
while (SSIBusy (SSI3_base);




//










从 GPIO3 (sspit 2)/sspit 2);/pinat_data (gpin (gpin 1);//

SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);

LCD1_SPI_Init ();

writecmd_LCD1 (0x10);
延迟(20000);

LCD2_SPI_Init();
延迟(20000);

while (1)
{

writecmd_LCD2 (0x80);
延迟(20000);

writecmd_LCD1 (0x24);
延迟(20000);
}

返回0;
} 


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 EK-TM4C123GXL Launchpad 上、PB7通过零欧姆电阻器 R10连接到 PD1 (的第20页: www.ti.com/.../spmu296.pdf)。 您需要移除该电阻器才能独立于 SSI3使用 SSI2。 PD0也通过 R9连接到 PB6。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    就是这样,非常感谢!
    -
    BR
    指示器