leonid 发表于 2024-4-17 10:18:57

SPI 中断查询方式问题请教

STC8H8K64U 使用硬件SPI用查询中断标志的方式发送数据,遇到问题 每次发送都要设置主机模式 ,不设置,发送一次就不能产生中断标志。void SPIinit(void)
{

    P_SW1 = 0x00;                               //SS/P1.2, MOSI/P1.3, MISO/P1.4, SCLK/P1.5
    SPDAT = 0;
    SPCTL = 0x50;                               //使能SPI主机模式
    SPSTAT = 0xc0;                              //清中断标志
    IE2 = ESPI;                                 //使能SPI中断   
    EA = 1;
}
void SPTest(void )
{
                                        SPCTL = 0x50;                     //使能SPI主机模式
         SS = 0;                           //拉低从机SS管脚
                                        SPDAT = 0x00;;                     //发送测试数据
                                        while(!(SPSTAT& SPIF ));
                                        SPSTAT = 0xc0;                              //清中断标志
                                        SS = 1;
          LED =0;

}
void main()
{
                P0M0 = 0xe4; // P0.0 P0.1air ADC 输入P0.2运行指示灯输出
    P0M1 = 0x1b; //P0.3 P0.4 Temp ADCs输入
                  //P0.5P0.6 P0.7 SPI1 SPI2 485EN 输出
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    LED = 1;
    KEY = 1;
    SS = 1;

                SPIinit();
   
    while (1)
    {
      
                                        //SS = 0;
                                        SPTest();
                                SS = 1;
      
    }
}
这是可以正常运行的代码


void SPIinit(void)
{

    P_SW1 = 0x00;                               //SS/P1.2, MOSI/P1.3, MISO/P1.4, SCLK/P1.5
    SPDAT = 0;
    SPCTL = 0x50;                               //使能SPI主机模式
    SPSTAT = 0xc0;                              //清中断标志
    IE2 = ESPI;                                 //使能SPI中断   
    EA = 1;
}
void SPTest(void )
{
                          SS = 0;                           //拉低从机SS管脚
                                        SPDAT = 0x00;;                     //发送测试数据
                                        while(!(SPSTAT& SPIF ));
                                        SPSTAT = 0xc0;                              //清中断标志
                                        SS = 1;
          LED =0;

}
void main()
{
                P0M0 = 0xe4; // P0.0 P0.1air ADC 输入P0.2运行指示灯输出
    P0M1 = 0x1b; //P0.3 P0.4 Temp ADCs输入
                  //P0.5P0.6 P0.7 SPI1 SPI2 485EN 输出
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    LED = 1;
    KEY = 1;
    SS = 1;

                SPIinit();
   
    while (1)
    {
      
                                        //SS = 0;
                                        SPTest();
                                SS = 1;
      
    }
}这是只能运行一次的代码   


leonid 发表于 2024-4-17 10:39:52

找到问题了,根据例程改的,例程是主从模式,单一使用主机模式最好还是 直接设置SSIG,解决问题
页: [1]
查看完整版本: SPI 中断查询方式问题请教