Dspic30F4011 и CD4094 с прерыванием по SPI
Я использую шпион dspic30f4011 для подсчета от 00 до 99 на 7seg. Дисп через сдвиговый регистр CD4094. Когда я использую флаг прерывания SPI1IF, чтобы знать, что передача завершена, этот метод( /*while(!SPI1IF_bit); SPI1IF_bit=0;*/)
не работал вместо этого, когда я положил delay_us(7);
потом работает. Я хочу использовать прерывание, как я могу решить эту проблему, спасибо за любую помощь
#define STB PORTB.B0
ayarla(){
ADPCFG=0XFFFF;
DISSDO_bit=0;
MODE16_bit=0;
SMP_bit=0;
CKP_bit=1;
CKE_bit=1;
MSTEN_bit=1;
SPI1CON.B0=0;
SPI1CON.B1=1;
SPI1CON.B2=0;
SPI1CON.B3=1;
SPI1CON.B4=1;
enter code here
SPI1IE_bit=1;
IPC2.B0=1;
IPC2.B1=1;
IPC2.B2=1;
SPI1IF_bit=0;
SPIROV_bit=0;
SPIEN_bit=1;
TRISF.B3=0;
TRISF.B6=0;
TRISB.B0=0;
PORTB.B0=0;
delay_ms(100);
}
unsigned short disp[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
unsigned short i,j,temp;
void main() {
ayarla();
temp=SPI1BUF;
while(1){
for(j=0;j<=9;j++){
for(i=0;i<=9;i++){
SPI1BUF=disp[i];
//delay_us(7);
while(!SPI1IF_bit);
SPI1IF_bit=0;
SPI1BUF=disp[j];
//delay_us(7);
while(!SPI1IF_bit);
SPI1IF_bit=0;
STB=1;
delay_us(10);
STB=0;
delay_ms(500);
}
}
}
}