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

 
 
> c8051f120 прерывания SMBus в Keil, Не вызывается обработчик прерывания
zalg
сообщение Feb 29 2012, 12:38
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 15-09-10
Пользователь №: 59 507



МК c8051f120, среда разработки Keil
Обмен по SMBus ( i2c ) работает при опросе флага SI:
Код
while(1){
        if( (SMB0CN & 0x08) == 0x08 ){
            if( SMB0STA == 0x80 ){
                i2c = SMB0DAT;
                printf( " i2c data = %X\n", i2c );
            }
            if( SMB0STA == 0xA8 ){
                SMB0DAT = 0xA5;
            }
        SMB0CN &= ~(0x08);    
        }
}


При попытке перенести эти действия в прерывания, программа перестает работать, вернее просто не попадает в обработчик прерываний, что я определяю по косвенным признакам: например переменная temp не меняет своего значения

Вот текст обработчика:
Код
void I2C_ISR( void ) interrupt 7 using 1 {
            if( SMB0STA == 0xA8 ){
                SMB0DAT = 0xA5;
            }
                        temp = 0x06;
}


И инициализация прерываний, которую я произвожу прямо перед основным циклом программы
Код
void Interrupts_Init()
{
    IE        = 0x88; //разрешить глоабльные прерывания и прерывания по Timer1
    EIE1      = 0x02;//разрешить прерывания SMBus
  
}


Хочу заметить, что так же произвожу обмен по UART с помощью функции printf, может быть это как нибудь влияет
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 08:52
Рейтинг@Mail.ru


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