реклама на сайте
подробности

 
 
> spi dspic33fj256mc710, не работает прерывание
mery
сообщение Mar 14 2013, 11:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 14-06-07
Пользователь №: 28 432



Добрый день!
У меня следующая проблема: не срабатывает прерывание по spi dspic33fj256mc710.
Программирую его в режиме мастер.
Код
[/code]
void SPI_Init(void)
{
  // Set SPI pins (SCLK, MOSI, and SS#) as outputs
   PORTF=0;
   LATF=0;
   TRISF=0;                     //1 - in, 0 - out
  // Set SPI pins MISO as inputs
   TRISF|=(1<<7); //_RF7;
// INT as input
    TRISA=0;
    TRISA|=(1<<14); //_RA14;

    
// fastest SPI clock--div by 2
// mode(0,0), 8 bit data
// Set SPI controller as master
// Enable the SPI controller

/* конфигурацию регистра SPI для работы в режиме ведущего */
IEC0bits.SPI1IE = 0; //отключаем прерывание
IFS0bits.SPI1IF = 0; //Очищаем флаг прерывания
// настройка регистра SPI1CON1
SPI1CON1bits.DISSCK = 0; //Разрешаем внутренние тактовые импульсы SCK.
SPI1CON1bits.DISSDO = 0; //вывод SDOx управляется модулем SPI.
SPI1CON1bits.MODE16 = 0; //Коммуникация осуществляется с помощью байт (8-ми битная).
SPI1CON1bits.SMP = 0; //Входные данные выбираются в середине вывода данных.
SPI1CON1bits.CKE = 0; // Последовательные выходные данные изменяются по
// переднему фронту тактового сигнала
SPI1CON1bits.SPRE = 0b111; //Настраиваем вторичный предделитель. 1:1
SPI1CON1bits.PPRE = 0b10;//64:1//0b11; // Настраиваем первичный предделитель. 1:1
SPI1CON1bits.CKP = 0;
SPI1CON1bits.MSTEN = 1; //Включаем режим ведущего
SPI1STATbits.SPIEN = 1; //Включить модуль SPI

_SPI1IF = 0; // Clear the Interrupt Flag
_SPI1IE = 1; // Enable the Interrupt
_SPI1IP = 3;

}
void WriteSPI1(uint8_t data_out)
{   interrupt_spi=0;
    _LATB13=1;
   _SPI1IE = 1;
    while (SPI1STATbits.SPITBF); //SPITBF==1
    SPI1BUF = data_out & 0xff;   /*  записываем байт  */
        
     while(interrupt_spi==0);
    _SPI1IE = 0; // Disable the Interrupt
  

}

void __attribute__((__interrupt__, no_auto_psv)) _SPI1Interrupt(void)
{
_SPI1IF = 0;
  interrupt_spi=1;
  SPI1BUF = 0;

}
[code]


По таймеру запускаю функцию WriteSPI1(uint8_t data_out). Данные без прерывания по spi выдаются. А когда программирую прерывание, программа зависает.
Спасибо
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 01:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016