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.

[参考译文] TM4C123GH6PM:SSI 问题

Guru**** 2439560 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/625401/tm4c123gh6pm-problem-with-ssi

器件型号:TM4C123GH6PM

我有一个用于5110 LCD 的库、但它是使用寄存器写入的、有时它会阻止一些其他外设。 现在、我想使用 driverlib 来驱动5110 LCD、我在论坛中找到了库。 但定制 PCB LCD 上的东西连接到 ssi0底座、而 PA4用于背光。 我看到 PA4是 SSI 的 Rx 引脚、不需要驱动 LCD。 如果没有修改库、则会正常工作、但当我在下面添加行时、它会进入 FAULT_ISR。

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_4);//在该行上转到 Fault_ISR

我尝试将这2条线放置在不同的位置、但结果是它进入 FAULT_ISR 或没有影响。

顺便说一下、在 LCD_init 调用后、我在 main.c 中使用下面的行、

GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、16);

初始化代码的其余部分:

void all_tasks_manager (void)
{
uint32_t ready_count;


/* cs 最初为高*/
SysCtlGPIOAHBEnable (CE_Periph);
SysCtlPeripheralEnable (CE_Periph);

READY_COUNT = 2000U;
while ((!(SysCtlPeripheralReady (CE_Periph)))&(-READY_COUNT));
if (0U = ready_count)/*如果 periph 未就绪、则采取措施*/
{
}
GPIOPinTypeGPIOOutput (CE_BASE、CE_PIN);
CE_HIGH ();

/*初始复位为低电平*/
SysCtlGPIOAHBEnable (RESET_PERIPh);
SysCtlPeripheralEnable (RESET_Periph);

READY_COUNT = 2000U;
while ((!(SysCtlPeripheralReady (RESET_Periph)))&(-READY_COUNT));
if (0U = ready_count)/*如果 periph 未就绪、则采取措施*/
{
}

GPIOPinTypeGPIOOutput (RESET_BASE、RESET_PIN);
RESET_LOW ();

/*直流低电平初始值*/
SysCtlGPIOAHBEnable (DC_Periph);
SysCtlPeripheralEnable (DC_Periph);

READY_COUNT = 2000U;
while ((!(SysCtlPeripheralReady (DC_Periph)))&(-READY_COUNT));
if (0U = ready_count)/*如果 periph 未就绪、则采取措施*/
{
}

GPIOPinTypeGPIOOutput (DC_BASE、DC_PIN);
DC_LOW ();



/*启用 SSI0模块*/
SysCtlPeripheralDisable (SYSCTL_Periph_SSI0);
SysCtlPeripheralReset (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
while ((!(SysCtlPeripheralReady (SYSCTL_Periph_SSI0)))&(-READY_COUNT));
if (0U = ready_count)/*如果 periph 未就绪、则采取措施*/
{
}

/*启用 clk */
SysCtlGPIOAHBEnable (SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
while ((!(SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)))&(-READY_COUNT));
if (0U = ready_count)/*如果 periph 未就绪、则采取措施*/
{
}
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinTypeSSI (GPIO_PORta_AHB_BASE、GPIO_PIN_2);

// SysCtlGPIOAHBEnable
(SYSCTL_PERIPH_GPIOA);
// SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOA);
// while (!(SysCtl_Periph_GPIOA)));&&(-ipCtl_GPIO4_)


;
//配置 GPIO4_(pin_eUS_GPIO4_);// GPIO4_(= GPIO4_)


/*启用 TX */
SysCtlGPIOAHBEnable (SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
while ((!(SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)))&(-READY_COUNT));
if (0U = ready_count)/*如果 periph 未就绪、则采取措施*/
{
}
GPIOPinConfigure (GPIO_PA5_SSI0TX);
GPIOPinTypeSSI (GPIO_PORta_AHB_BASE、GPIO_PIN_5);

/*先禁用 SPI */
SSIDisable (SSI0_BASE);
SSIDMADisable (SSI0_BASE、SSI_DMA_RX | SSI_DMA_TX);
SSIIntDisable (SSI0_BASE、SSI_TXFF | SSI_RXFF | SSI_RXTO | SSI_RXOR);
SSIIntClear (SSI0_BASE、SSI_RXTO | SSI_RXOR);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_4);

/* SPI 时钟和 congig */
SSIClockSourceSet (SSI0_BASE、SSI_Cock_SYSTEM);
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、3000000U、 8u);
SSIEnable (SSI0_BASE); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Furkan、

    我认为我们的常见开发问题帖子中的问题2与您的应用相关、请查看此处的信息、并尝试按照建议操作、查看您的问题是否得到解决: e2e.ti.com/.../374640
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、

    我逐行检查了库行、并注意到"SysCtlGPIOAHBEnable (CE_Periph);"允许使用宏在 Porta 上进行更改(我不确定调用是否为宏)。 我添加了这些更改;

    GPIOPinTypeGPIOOutput (GPIO_Porta_AHB_BASE、GPIO_PIN_4);
    执行{ \
    HWREG (GPIO_PORta_AHB_BASE +(GPIO_O_DATA +(GPIO_PIN_4 << 2)))= GPIO_PIN_4; \
    } while (0);

    稍后我调用了该函数、

    GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、16);

    它工作正常、现在我有工作背光。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请注意、您已经(之前)选择了"AHB"端口总线-但"写入"到"非 AHB"端口。 这是不一致的-我不确定这是否会(始终)起作用-并且很难与"最佳实践"保持一致。

    难道"GPIOPinWrite()"不应该以"GPIO_PORta_AHB_BASE"为目标(相同)、而不是"GPIO_PORta_base"为目标?   (正如您当前的代码所揭示的)