单片机/MCU论坛
直播中

小麦地

11年用户 1614经验值
私信 关注
[问答]

在KEIL下调试ADuCM360的SPI接口,为什么SPITX寄存器里写不进去任何东西啊?

在KEIL下调试ADuCM360的SPI接口,自检测试。为什么SPITX寄存器里写不进去任何东西啊??代码如下:
[size=10.5000pt]#include
[size=10.5000pt]#include
[size=10.5000pt]#include
[size=10.5000pt]#include <..commonAdcLib.h>
[size=10.5000pt]#include <..commonIexcLib.h>
[size=10.5000pt]#include <..commonUrtLib.h>
[size=10.5000pt]#include <..commonClkLib.h>
[size=10.5000pt]#include <..commonWdtLib.h>
[size=10.5000pt]#include <..commonIntLib.h>
[size=10.5000pt]#include <..commonDioLib.h>
[size=10.5000pt]#include <..commonSpiLib.h>
[size=10.5000pt]void SPI1INIT(void);
[size=10.5000pt]unsigned char uxSPI1WrData[]={0x1,0x2,0x3,0x4,0x5,0x6,0x7,
[size=10.5000pt]           0x8,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};
[size=10.5000pt]unsigned char uxSPI1RdData[]="";
[size=10.5000pt]int main (void)
[size=10.5000pt]{
[size=10.5000pt]   WdtCfg(T3CON_PRE_DIV1,T3CON_IRQ_EN,T3CON_PD_DIS);
[size=10.5000pt] ClkDis(CLKDIS_DISI2CCLK|CLKDIS_DISPWMCLK|CLKDIS_DIST0CLK|CLKDIS_DIST1CLK|CLKDIS_DISDACCLK);
[size=10.5000pt] ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG);
[size=10.5000pt]   ClkSel(CLK_CD0,CLK_CD0,CLK_CD0,CLK_CD7);
[size=10.5000pt]   SPI1INIT();
[size=10.5000pt] SpiCfg(pADI_SPI1,SPICON_MOD_TX1RX1,SPICON_MASEN_EN ,SPI1CON_TFLUSH_DIS| SPI1CON_RFLUSH_EN| SPI1CON_CON_EN| SPI1CON_LOOPBACK_EN| SPI1CON_SOEN_DIS| SPI1CON_RXOF_EN
[size=10.5000pt]     | SPI1CON_ZEN_DIS| SPI1CON_tiM_TXWR| SPI1CON_LSB_DIS| SPI1CON_WOM_DIS| SPI1CON_CPOL_HIGH| SPI1CON_CPHA_SAMPLETRAILING| SPI1CON_ENABLE_EN);
[size=10.5000pt] pADI_GP0->GPCLR = GP0CLR_CLR3_CLR;
[size=10.5000pt]while (1)
[size=10.5000pt]   {
[size=10.5000pt] int i=0;
[size=10.5000pt] for(i=0;i<15;i++)
[size=10.5000pt] {pADI_SPI1->SPITX= uxSPI1WrData;
[size=10.5000pt]pADI_SPI1->SPIRX=pADI_SPI1->SPITX;
[size=10.5000pt]uxSPI1RdData=pADI_SPI1->SPIRX;
[size=10.5000pt]   }
[size=10.5000pt] }
[size=10.5000pt]}
[size=10.5000pt]void SPI1INIT(void)
[size=10.5000pt]{                    
[size=10.5000pt]   DioCfgPin(pADI_GP0, PIN0, 1);                                
[size=10.5000pt]   DioCfgPin(pADI_GP0, PIN1, 1);
[size=10.5000pt]   DioCfgPin(pADI_GP0, PIN2, 1);
[size=10.5000pt]   DioCfgPin(pADI_GP0, PIN3, 1);
[size=10.5000pt] SpiBaud(pADI_SPI1,0x3F,SPIDIV_BCRST_DIS);
[size=10.5000pt]}
[size=10.5000pt]我认为即使SPI不配置,SPITX寄存器也能写进去东西啊,只是不能传输而已。现在SPITX里面的数一直是0。望朋友们解答!

回帖(1)

刘敏

2024-1-12 15:35:29
1. SPI接口未正确初始化:在使用SPI之前,需要对SPI接口进行正确的初始化。确定已经正确配置了SPI控制寄存器和通信时序参数。

2. SPI模块未使能:确保已经使能了SPI模块。可以通过SPI控制寄存器中的相应位来使能SPI模块。

3. 发送缓冲区满:如果发送缓冲区已经满了,新的数据就无法写入SPITX寄存器。可以通过查询SPI状态寄存器的发送缓冲区寄存器满位来判断。

4. 中断使能问题:如果使用中断方式进行数据传输,确保已经使能了相关中断,并编写了中断服务函数。

5. SPI时钟配置问题:SPI的时钟频率和通信时序需要正确配置。如果SPI时钟过快或者通信时序参数不正确,通信可能无法正常进行。

请检查以上可能导致无法向SPITX寄存器写入数据的问题,
举报

更多回帖

×
20
完善资料,
赚取积分