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

 
 
 
Reply to this topicStart new topic
> Проблема с МК Silabs C8051F352
Мария Е
сообщение Mar 19 2009, 16:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424



Здравствуйте!
Возникла проблема с МК 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();
            }
        }
    }
Go to the top of the page
 
+Quote Post
barabek
сообщение Mar 24 2009, 13:55
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Мария Е @ Mar 20 2009, 02:44) *
Здравствуйте!
Возникла проблема с МК Silabs C8051F352. Есть задача связать по I2C (SMbus) этот контроллер и mega88, причем F352 должен быть мастером. Дело в том, что просто не выставляется старт при выпролнении STA=1. Хотя линия свободна (на SCL и SDA высокий уровень). Конфигурирую всю периферию с помощью Configuration Wizard 2. Если кто-то с такой проблемой сталкивался или есть идеи, как решить, напишите, плз

А таймер нулевой запускаете? У Вас по коду этого не видно. Дальше пока не разбирался. И еще совет, что-бы было проще разобраться. Заведите отдельную глобальную переменную и в различных местах кода присваивайте ей различные значения. Тогда при остановке можно в WatchWindow посмотреть до какого участка доходит выполнение.
Go to the top of the page
 
+Quote Post
Мария Е
сообщение Mar 25 2009, 19:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424



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


Да, проблема была как раз в таймерах. Выяснила это путем сравнения примера (из IDE) со своим кодом. (Вам тоже спасибо a14.gif ) Т.к. первый раз работаю с МК Silabs, не знала, что нельзя доверять автоматической конфигурации периферии и надо самой включать таймеры.
Go to the top of the page
 
+Quote Post

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

 


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


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