Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с МК Silabs C8051F352
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Мария Е
Здравствуйте!
Возникла проблема с МК Silabs C8051F352. Есть задача связать по I2C (SMbus) этот контроллер и mega88, причем F352 должен быть мастером. Дело в том, что просто не выставляется старт при выпролнении STA=1. Хотя линия свободна (на SCL и SDA высокий уровень). Конфигурирую всю периферию с помощью Configuration Wizard 2. Если кто-то с такой проблемой сталкивался или есть идеи, как решить, напишите, плз
Код
void SMBus_Init()
{
    SMB0CF    = 0xDC;
}
    void Write_mega(unsigned char adress, unsigned char dat )
    {
        unsigned char i;
        unsigned char time = 0x10;


        STA = 1;                        // Start transfer
    
        while (!MASTER);
        while (!SI);                     // ждём появления прерывания по завершению операции (SI = 1)
        for ( i = 0; i < time; i++ );
        SI = 0;                            // Clear interrupt flag
        led_1_on();
        SMB0DAT = adress;                    // посылаем адрес
        STA = 0;                        // end Start transfer
        if(ACK)
        {
            while (!SI);                     // ждём появления прерывания по завершению операции (SI = 1)
            SI = 0;                             // Clear interrupt flag
            for ( i = 0; i < time; i++ );    //
            led_2_on();
            SMB0DAT = dat;                    // посылаем значение регистра
            if(ACK)
            {
                while (!SI);                     // ждём появления прерывания по завершению операции (SI = 1)
                SI = 0;                             // Clear interrupt flag
                for ( i = 0; i < time; i++ );    //
                STO = 1;
                led_3_on();
            }
        }
    }
barabek
Цитата(Мария Е @ Mar 20 2009, 02:44) *
Здравствуйте!
Возникла проблема с МК Silabs C8051F352. Есть задача связать по I2C (SMbus) этот контроллер и mega88, причем F352 должен быть мастером. Дело в том, что просто не выставляется старт при выпролнении STA=1. Хотя линия свободна (на SCL и SDA высокий уровень). Конфигурирую всю периферию с помощью Configuration Wizard 2. Если кто-то с такой проблемой сталкивался или есть идеи, как решить, напишите, плз

А таймер нулевой запускаете? У Вас по коду этого не видно. Дальше пока не разбирался. И еще совет, что-бы было проще разобраться. Заведите отдельную глобальную переменную и в различных местах кода присваивайте ей различные значения. Тогда при остановке можно в WatchWindow посмотреть до какого участка доходит выполнение.
Мария Е
Цитата(barabek @ Mar 24 2009, 16:55) *
А таймер нулевой запускаете? У Вас по коду этого не видно. Дальше пока не разбирался. И еще совет, что-бы было проще разобраться. Заведите отдельную глобальную переменную и в различных местах кода присваивайте ей различные значения. Тогда при остановке можно в WatchWindow посмотреть до какого участка доходит выполнение.


Да, проблема была как раз в таймерах. Выяснила это путем сравнения примера (из IDE) со своим кодом. (Вам тоже спасибо a14.gif ) Т.к. первый раз работаю с МК Silabs, не знала, что нельзя доверять автоматической конфигурации периферии и надо самой включать таймеры.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.