我有一个用于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);