本帖最后由 qq583678156 于 2017-6-29 23:07 编辑
我用stm8s105作为spi从机,初始化spi参数如下
void SPI_IO_Init()
{
//SCK initial
PC_DDR_bit.DDR5 =0;
PC_CR1_bit.C15 =0;
PC_CR2_bit.C25 =0;
//MOSI initial
PC_DDR_bit.DDR6 =0;
PC_CR1_bit.C16 =0;
PC_CR2_bit.C26 =0;
//MISO initial
PC_DDR_bit.DDR7 =1;
PC_CR1_bit.C17 =1;
PC_CR2_bit.C27 =1;
}
void SPI_initial()
{
SPI_CR1_bit.SPE = 1; //禁止SPI设备
// SPI_CR1_bit.BR = 1; //设置SPI速率 /4;
SPI_CR1_bit.CPOL = 0;
SPI_CR1_bit.CPHA = 0;
SPI_CR1_bit.LSBFIRST = 0; //先发送MSB
SPI_CR2_bit.SSM = 1;
SPI_CR2_bit.SSI = 0; //主设备 SSI引脚不用
SPI_CR1_bit.MSTR = 0;
SPI_CR1_bit.SPE = 1;
}
我在main函数里能够查询到spi接收的数据,但是用SPI中断,就是不能触发,还请帮忙看下,程序如下
void main()
{
data=0;
CLKInit();
UART_IO_Init();
UART_Init(9600);
SPI_IO_Init();
SPI_ICR_bit.RXIE = 1;
SPI_initial();
asm ("sim");
while(1)
{
;
}
}
/** SPI 中断服务函数 */
#pragma vector = 10
__interrupt void SPI_IRQHandler(void)
{
Uart_SendData(0x08);
if(SPI_SR_bit.RXNE==1)
{
Uart_SendData(99);
data = SPI_DR;
Uart_SendData(data);
SPI_SR_bit.RXNE=0;;
}
}
请问大侠们帮忙看看如何才能进行中断,另外有个问题就是,在main函数里查询的话,如果没有收到主机的数据,一样能够置位RXNE,查询到的SPI-DR都是00.
重点是中断不能进入,请问这个怎么回事??? |