找回密码
 立即注册
查看: 30|回复: 1

SPI 中断查询方式问题请教

[复制链接]

该用户从未签到

4

主题

5

回帖

46

积分

新手上路

积分
46
发表于 2024-4-17 10:18:57 | 显示全部楼层 |阅读模式
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.1  air ADC 输入  P0.2运行指示灯输出
    P0M1 = 0x1b; //P0.3 P0.4 Temp ADC  s输入
                    //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.1  air ADC 输入  P0.2运行指示灯输出
    P0M1 = 0x1b; //P0.3 P0.4 Temp ADC  s输入
                    //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;
      
    }
}这是只能运行一次的代码   


回复 送花

使用道具 举报

该用户从未签到

4

主题

5

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2024-4-17 10:39:52 | 显示全部楼层
找到问题了,根据例程改的,例程是主从模式,单一使用主机模式最好还是 直接设置SSIG,解决问题
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-1 13:32 , Processed in 0.053066 second(s), 33 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表