工具/软件:Starterware
各位专家、您好!
在我的板上、我将 SPI0连接到 SPI 闪存、我在 CCS 中创建一个项目、它可能会正常运行。 我的 SPI1接口与 LCD 连接、LCD 也是 SPI 接口、因此我想创建另一个基于 SPI 闪存1的项目来控制 LCD、以便验证我的 LCD 电路。
问题是我找不到 CS0和 SPI_CLK 切换、我复制了下面的代码、
/*对 SPI1实例执行引脚复用*/
RetVal = McSPIPinMuxSetup (1);
/*启用 McSPI0模块的时钟。*/
McSPI1ModuleClkConfig();
/*对 SPI0实例的 CS0执行引脚多路复用*/
RetVal = McSPI1CSPinMuxSetup (chNum);
/*为 McSPI 进行必要的设置配置。*/
McSPISetUp();
ReadSPIDevice();
/////////////////////////////////// 函数//////////////////////////////////////////////////
int McSPIPinMuxSetup (unsigned int instanceNum)
{
INT STATUS = E_INST_NOT_SUPPT;
HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_ACLKX)= (CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_PUTYPESEL |
CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_RXACTIVE |
CONTRAL_CONF_MUXMODE (3));// mode3用于 SPI1
HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_FSX)= (CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_PUTYPESEL |
CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_RXACTIVE |
CONTRAL_CONF_MUXMODE (3));// mode3用于 SPI1
HWREG (SOC_CONTROL_REGS + CONTROL_CONF_McASP0_AXR0)= (CONTROL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_PUTYPESEL |
CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_RXACTIVE |
CONTRAL_CONF_MUXMODE (3));// mode3用于 SPI1
STATUS = S_PASS;
退货状态;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void McSPI1模块化配置(void)
{
HWREG (SOC_CM_PER_REGS + CM_PER_L3S_CLKSTCTRL)=
CM_PER_L3S_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L3S_CLKSTCTRL)&
CM_PER_L3S_CLKSTCTRL_CLKTRCTRL)!= CM_PER_L3S_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKSTCTRL)=
CM_PER_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKSTCTRL)&
CM_PER_L3_CLKSTCTRL_CLKTRCTRL)!= CM_PER_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_REGS + CM_PER_L3_INSTR_CLKCTRL)=
CM_PER_L3_INSTR_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_Regs + CM_PER_L3_INSTR_CLKCTRL)&
CM_PER_L3_INSTR_CLKCTRL_MODULEMODE)!=
CM_PER_L3_INSTR_CLKCTRL_MODULEMODE_ENABLE);
HWREG (SOC_CM_PER_Regs + CM_PER_L3_CLKCTRL)=
CM_PER_L3_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKCTRL)&
CM_PER_L3_CLKCTRL_MODULEMODE)!= CM_PER_L3_CLKCTRL_MODULEMODE_ENABLE);
HWREG (SOC_CM_PER_REGS + CM_PER_OCPWP_L3_CLKSTCTRL)=
CM_PER_OCPWP_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_OCPWP_L3_CLKSTCTRL)和
CM_PER_OCPWP_L3_CLKSTCTRL_CLKTRCTRL)!=
CM_PER_OCPWP_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_REGS + CM_PER_L4LS_CLKSTCTRL)=
CM_PER_L4LS_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L4LS_CLKSTCTRL)&
CM_PER_L4LS_CLKSTCTRL_CLKTRCTRL)!=
CM_PER_L4LS_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_REGS + CM_PER_L4LS_CLKCTRL)=
CM_PER_L4LS_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L4LS_CLKCTRL)&
CM_PER_L4LS_CLKCTRL_MODULEMODE)!= CM_PER_L4LS_CLKCTRL_MODULEMODE_ENABLE);
HWREG (SOC_CM_PER_REGS + CM_PER_SPI1_CLKCTRL)&&=~CM_PER_SPI1_CLKCTRL_MODULEMODE;
HWREG (SOC_CM_PER_REGS + CM_PER_SPI1_CLKCTRL)|=
CM_PER_SPI1_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_regs + CM_PER_SPI1_CLKCTRL)&
CM_PER_SPI1_CLKCTRL_MODULEMODE)!= CM_PER_SPI1_CLKCTRL_MODULEMODE_ENABLE);
while (!(HWREG (SOC_CM_PER_regs + CM_PER_L3S_CLKSTCTRL)&
CM_PER_L3S_CLKSTCTRL_CLKACTIVITY_L3S_GCLK);
while (!(HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKSTCTRL)&
CM_PER_L3_CLKSTCTRL_CLKACTIVITY_L3_GCLK);
while (!(HWREG (SOC_CM_PER_Regs + CM_PER_OCPWP_L3_CLKSTCTRL)&
(CM_PER_OCPWP_L3_CLKSTCTRL_CLKACTIVITY_OCPWP_L3_GCLK |
CM_PER_OCPWP_L3_CLKSTCTRL_CLKACTIVITY_OCPWP_L4_GCLK)));
while (!(HWREG (SOC_CM_PER_regs + CM_PER_L4LS_CLKSTCTRL)&
(cm_per_L4LS_CLKSTCTRL_CLKACTIVITY_L4LS_GCLK |
CM_PER_L4LS_CLKSTCTRL_CLKACTIVITY_SPI_GCLK));
}
////////////////////////////////////////////////////////////////////////////////////////////
int McSPI1CSPinMuxSetup (unsigned int csPinNum)
{
int status = E_INVALID_CHIP_SEL;
HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_AHCLKR)= (CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_PUTYPESEL |
CONTRAL_CONF_SPI1_SCLK_CONF_SPI1_SCLK_RXACTIVE |
CONTRAL_CONF_MUXMODE (3));// mode3用于 SPI1
STATUS = S_PASS;
退货状态;
}
////////////////////////////////////////////////////////////////////////////
//要支持 LCD 的 SPI1,请将_SPI_0_替换为_SPI_1_
静态空 McSPISetUp (空)
{
/*重置 McSPI 实例。*/
McSPIReset (SOC_SPI_1_regs);
/*启用芯片选择引脚。*/
McSPICSEnable (SOC_SPI_1_regs);
/*启用主操作模式。*/
McSPIMasterModeEnable (SOC_SPI_1_regs);
/*对主控模式执行必要的配置。*/
McSPIMasterModeConfig (SOC_SPI_1_regs、MCSPI_SINGLE_CH、
MCSPI_TX_RX_MODE、MCSPI_DATA_LINE_COMM_MODE_1、
chNum);
/*根据时钟模式配置 McSPI 总线时钟。 *
McSPIClkConfig (SOC_SPI_1_regs、MCSPI_IN_CLK、MCSPI_OUT_FREQ、chNum、
MCSPI_CLK_MODE_0);
/*配置字长。*/
McSPIWordLengthSet (SOC_SPI_1_regs、MCSPI_WORD_LENGTH (8)、chNum);
/*将 SPIEN 的极性设置为低。*/
McSPICSPPolarityConfig (SOC_SPI_1_regs、MCSPI_CS_POL_LOW、chNum);
/*启用 McSPI 外设的发送器 FIFO。*/
McSPITxFIFOConfig (SOC_SPI_1_regs、MCSPI_TX_FIFO_ENABLE、chNum);
/*启用 McSPI 外设的接收器 FIFO。*/
McSPIRxFIFOConfig (SOC_SPI_1_regs、MCSPI_RX_FIFO_ENABLE、chNum);
}
//////////////////////////////////////////////////////////////////////////////////////
我比较了 SPI0和 SPI1之间"McSPISetUp()"的寄存器状态、它们是相同的、而 SPI1接口不能工作、我没有支付任何其他方面的衰减?
谢谢
Chris