您好!
我目前正在尝试设置 SSI 模块的 SPI 功能、以便一次从外部闪存中抓取8个位。 我还以所需的66.66MHz 时钟运行以实现计时器功能。 我在下面的代码中包含了一个片段、这些片段是我迄今为止为 SSI 初始化的代码:
//启用使用的外设
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
//////////////////////////////////////////////////////////////////// 引脚配置////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//计时器3A
ROM_GPIOPinConfigure (GPIO_PB2_T3CCP0);//配置 GPIO 引脚的函数(_P#_fucnion)
ROM_GPIOPinTypeTimer (GPIO_PORTB_BASE、GPIO_PIN_2);//配置引脚以供计时器使用
//音频放大器
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、GPIO_PIN_3);//使用板载 AMP CTL*
ROM_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_3、0);//必须移动电阻器才能使用 AMP CTL (PA4)
//SSI
ROM_GPIOPinTypeSSI (GPIO_PORTB_BASE、SSI_CLK | SSI_CS | SSI_RX | SSI_TX);//配置 SSI 引脚
ROM_GPIOPinConfigure (GPIO_PB4_SSI2CLK);
ROM_GPIOPinConfigure (GPIO_PB5_SSI2FSS);
ROM_GPIOPinConfigure (GPIO_PB6_SSI2RX);
ROM_GPIOPinConfigure (GPIO_PB7_SSI2TX);
//ROM_GPIODirModeSet (GPIO_PORTB_BASE、SSI_CLK、GPIO_DIR_MODE_OUT);//PB4为输出
//ROM_GPIODirModeSet (GPIO_PORTB_BASE、SSI_CS、GPIO_DIR_MODE_OUT);//PB5为输出
//ROM_GPIODirModeSet (GPIO_PORTB_BASE、SSI_TX、GPIO_DIR_MODE_OUT);//PB7为输出(发送)
//ROM_GPIODirModeSet (GPIO_PORTB_BASE、SSI_RX、GPIO_DIR_MODE_IN);//PB6为输入(接收)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////// SSI 配置//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sysClock = ROM_SysCtlClockGet ();
SSIConfigSetExpClk (SSI2_base、sysClock、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、3333、 8);
SSIAdvModeSet (SSI2_base、SSI_ADV_MODE_READ_WRITE);//从从器件写入/读取数据的模式
SSIAdvFrameHoldEnable (SSI2);//启用帧保持功能
SSIEnable (SSI2_base);//启用 SPI 模块
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
我主要关注的是"SSIConfigSetExpClk() 函数、因为我觉得它的功能不是完全理解的。 尤其是位速率和时钟输入。
我希望我能够了解到我是否在 SSI 模块的初始化过程中遗漏了任何东西。 我还希望在如何为该函数确定输入时钟和位速率值方面获得一定的指导。 系统时钟是否会自动将时钟馈送到 SSI 模块? 它是否有任何划分? 如何确定所需的比特率?
谢谢、
Garrett