Привожу кусок кода программы:
Код
void Start_ADC(void) //инициализация SPI1, прерывания от SPI1, и в конце - разрешение тактирования АЦП
{
sampling_flag = 1;
TRISF6_bit = 1; //SCK1
TRISF7_bit = 1; //SDO1
TRISF8_bit = 1; //SDI1
TRISB2_bit = 1; //SS1
SPI1STATbits.SPIEN = 0;
SPI1CON2bits.FRMDLY = 1;
SPI1CON2bits.FRMPOL = 1;
SPI1CON2bits.SPIFSD = 1;
SPI1CON2bits.FRMEN = 1;
SPI1CON1bits.PPRE = 4;
SPI1CON1bits.SPRE = 3;
SPI1CON1bits.MSTEN = 0;
SPI1CON1bits.CKP = 0;
SPI1CON1bits.SSEN = 0;
SPI1CON1bits.CKE = 1;
SPI1CON1bits.SMP = 0;
SPI1CON1bits.MODE16 = 1;
SPI1CON1bits.DISSDO = 1;
SPI1CON1bits.DISSCK = 0;
SPI1STATbits.SPISIDL = 1;
IFS0bits.SPI1EIF = 0;
IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 4;
SPI1STATbits.SPIEN = 1;
oe_6903 = 1; //start of SPI master
}
void SPI1Interrupt() iv IVT_ADDR_SPI1INTERRUPT ics ICS_AUTO //Обработчик прерывания, сюда не входит
{
unsigned int aSample, tmp;
aSample = SPI1BUF;
IFS0bits.SPI1IF = 0; //Clear Interrupt status of SPI1
SPI1STATbits.SPIROV = 0;
IEC0bits.SPI1IE =1;
}
void main() {
Start_ADC();
while (1) {
//////////////////////// ничего больше не делаем
}
}
{
sampling_flag = 1;
TRISF6_bit = 1; //SCK1
TRISF7_bit = 1; //SDO1
TRISF8_bit = 1; //SDI1
TRISB2_bit = 1; //SS1
SPI1STATbits.SPIEN = 0;
SPI1CON2bits.FRMDLY = 1;
SPI1CON2bits.FRMPOL = 1;
SPI1CON2bits.SPIFSD = 1;
SPI1CON2bits.FRMEN = 1;
SPI1CON1bits.PPRE = 4;
SPI1CON1bits.SPRE = 3;
SPI1CON1bits.MSTEN = 0;
SPI1CON1bits.CKP = 0;
SPI1CON1bits.SSEN = 0;
SPI1CON1bits.CKE = 1;
SPI1CON1bits.SMP = 0;
SPI1CON1bits.MODE16 = 1;
SPI1CON1bits.DISSDO = 1;
SPI1CON1bits.DISSCK = 0;
SPI1STATbits.SPISIDL = 1;
IFS0bits.SPI1EIF = 0;
IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 4;
SPI1STATbits.SPIEN = 1;
oe_6903 = 1; //start of SPI master
}
void SPI1Interrupt() iv IVT_ADDR_SPI1INTERRUPT ics ICS_AUTO //Обработчик прерывания, сюда не входит
{
unsigned int aSample, tmp;
aSample = SPI1BUF;
IFS0bits.SPI1IF = 0; //Clear Interrupt status of SPI1
SPI1STATbits.SPIROV = 0;
IEC0bits.SPI1IE =1;
}
void main() {
Start_ADC();
while (1) {
//////////////////////// ничего больше не делаем
}
}
Ниже приведены осциллограммы на SS1, SCLK1 и SDI1 соответственно (все ноги сконфигурированы на вход)
Нажмите для просмотра прикрепленного файла