主题中讨论的其他器件: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; }