请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LS0432 您好!
我正在尝试在 Launchpad TMS57004上设置 SPI2与硬件驱动的 CS 通信的工作示例。 我正在使用逻辑分析仪来验证输出以及 CLK 和 MOSI 信号是否正常工作、唯一的问题是 CS0信号。 当信号应该为低电平时、信号在传输期间也保持高电平。 但是、如果清零 SPI2DEF 寄存 器中的 CSDEF0位(实际上使 CS 信号反相)、CS 开始工作(当然是反相的)。 我犯了什么错误?
感谢 Črt 的帮助
CSDEF0 = 1、CS 不工作(始终为高电平)
CSDEF0 = 0、CS 反相工作(正如预期的那样、总线对我无用)
与 SPI2相关的源代码为:
void spiInit (void) { spiREG2->GCR0 = 0U; spiREG2->GCR0 = 1U; spiREG2->GCR1 =(spiREG2->GCR1 & 0xFFFFFFFCU)|((uint32)((uint32) 1U << 1U)/* CLOKMOD */ | 1U);/*主设备*/ /** SPI2使能引脚配置*/ spiREG2->INT0 =(spiREG2->INT0 & 0xFEFFFFFFU)|(uint32)((uint32) 0U << 24U);//启用 HICHZ */ spiREG2->delay =(uint32)((uint32) 0U <<24U)/* C2TDELAY */ |(UINT32)((UINT32) 0U <<16U)/* T2CDELAY */ |(UINT32)((UINT32) 0U <<8U)/* T2EDELAY */ |(uint32)((uint32) 0U << 0U);// C2EDELAY * /**-数据格式0 */ spiREG2->FMT0 =(uint32)((uint32) 0U <<24U)/* wdelay */ |(uint32)((uint32) 0U << 23U)/*奇偶校验极性*/ |(uint32)((uint32) 0U << 22U)/*奇偶校验使能*/ |(uint32)((uint32) 0U << 21U)//等待启用 |(uint32)((uint32) 0U << 20U)/*移位方向*/ |(uint32)((uint32) 0U << 17U)/*时钟极性*/ |(uint32)((uint32) 0U << 16U)/*时钟相位*/ |(uint32)((uint32) 79U << 8U)/*波特率预分频* |(uint32)((uint32) 16U << 0U);/*数据字长度*/ /**-设置中断级别*/ spiREG2->LVL =(uint32)((uint32) 0U <<9U)/* TXINT */ |(UINT32)((UINT32) 0U <<8U)/* RXINT */ |(UINT32)((UINT32) 0U << 6U)/* OVRNINT */ |(uint32)((uint32) 0U << 4U)/* BIERR */ |(uint32)((uint32) 0U << 3U)/* DESYNC */ |(uint32)((uint32) 0U << 2U)/* PARERR */ |(uint32)((uint32) 0U << 1U)/*超时*/ |(UINT32)((UINT32) 0U << 0U);/* DLENERR */ /**-清除所有挂起的中断*/ spiREG2->FLG |= 0xFFFFFFU; /**-启用中断*/ spiREG2->INT0 =(spiREG2->INT0 & 0xFFFF0000U) |(UINT32)((UINT32) 0U <<9U)/* TXINT */ |(UINT32)((UINT32) 0U <<8U)/* RXINT */ |(UINT32)((UINT32) 0U << 6U)/* OVRNINT */ |(uint32)((uint32) 0U << 4U)/* BIERR */ |(uint32)((uint32) 0U << 3U)/* DESYNC */ |(uint32)((uint32) 0U << 2U)/* PARERR */ |(uint32)((uint32) 0U << 1U)/*超时*/ |(UINT32)((UINT32) 0U << 0U);/* DLENERR */ /**- SPI2端口输出值*/ spiREG2->PC3 =(uint32)((uint32) 1U <<0U)/* SCS[0]*/ |(uint32)((uint32) 1U << 1U)/* scs[1]*/ |(uint32)((uint32) 1U << 2U)/* scs[2]*/ |(UINT32)((UINT32) 1U << 3U)/* SCS[3]*/ |(UINT32)((UINT32) 0U <<9U)/* CLK */ |(uint32)((uint32) 0U <<10U)/* SIMO */ |(uint32)((uint32) 0U << 11U);/* SOMI * /**- SPI2端口方向*/ spiREG2->PC1 =(uint32)((uint32) 1U <<0U)/* SCS[0]*/ |(uint32)((uint32) 1U << 1U)/* scs[1]*/ |(uint32)((uint32) 1U << 2U)/* scs[2]*/ |(UINT32)((UINT32) 1U << 3U)/* SCS[3]*/ |(uint32)((uint32) 1U <<9U)/* CLK */ |(uint32)((uint32) 1U <<10U)/* SIMO */ |(uint32)((uint32) 0U << 11U);/* SOMI * /**- SPI2端口开漏使能*/ spiREG2->PC6 =(uint32)((uint32) 0U <<0U)/* scs[0]*/ |(uint32)((uint32) 0U << 1U)/* scs[1]*/ |(uint32)((uint32) 0U << 2U)/* scs[2]*/ |(UINT32)((UINT32) 0U << 3U)/* SCS[3]*/ |(UINT32)((UINT32) 0U <<9U)/* CLK */ |(uint32)((uint32) 0U <<10U)/* SIMO */ |(uint32)((uint32) 0U << 11U);/* SOMI * /**- SPI2端口上拉/下拉选择*/ spiREG2->PC8 =(uint32)((uint32) 1U <<0U)/* SCS[0]*/ |(uint32)((uint32) 1U << 1U)/* scs[1]*/ |(uint32)((uint32) 1U << 2U)/* scs[2]*/ |(UINT32)((UINT32) 1U << 3U)/* SCS[3]*/ |(uint32)((uint32) 1U <<9U)/* CLK */ |(uint32)((uint32) 1U <<10U)/* SIMO */ |(uint32)((uint32) 1U <<11U);/* SOMI */ /**- SPI2端口上拉/下拉使能*/ spiREG2->PC7 =(uint32)((uint32) 0U <<0U)/* scs[0]*/ |(uint32)((uint32) 0U << 1U)/* scs[1]*/ |(uint32)((uint32) 0U << 2U)/* scs[2]*/ |(UINT32)((UINT32) 0U << 3U)/* SCS[3]*/ |(UINT32)((UINT32) 0U <<9U)/* CLK */ |(uint32)((uint32) 0U <<10U)/* SIMO */ |(uint32)((uint32) 0U << 11U);/* SOMI * /* SPI2将所有引脚设置为功能*/ spiREG2->PC0 =(uint32)((uint32) 1U <<0U)/* SCS[0]*/ |(uint32)((uint32) 1U << 1U)/* scs[1]*/ |(uint32)((uint32) 1U << 2U)/* scs[2]*/ |(UINT32)((UINT32) 1U << 3U)/* SCS[3]*/ |(uint32)((uint32) 1U <<9U)/* CLK */ |(uint32)((uint32) 1U <<10U)/* SIMO */ |(uint32)((uint32) 1U <<11U);/* SOMI */ /**-最后启动 SPI2 */ spiREG2->GCR1 =(spiREG2->GCR1 & 0xFEFFFFFFU)| 0x01000000U; }
发送功能
spiDAT1_t 数据通信图; dataconfconfig.DFSEL = SPI_FMT_0; dataconfig CSNR = 1U; dataconfig CS_HOLD = 1U; dataconfig WDEL = 0U; TransmitAndReceiveData (spiREG2、&dataconfig、10U、TX_buffer、RX_buffer);