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;
}
}这是只能运行一次的代码
找到问题了,根据例程改的,例程是主从模式,单一使用主机模式最好还是 直接设置SSIG,解决问题
页:
[1]