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

 
 
> Как оптимизация влияет на работу портов ВВ?
Sirko
сообщение Dec 4 2010, 21:03
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Чип - mega128.
Для связи с внешним миром на PORTB нацеплены несколько регистров-защелок.
С других пинов других портов идут стробы для каждой из защелок.
Инициализацию портов делаю единожды, при старте. Но, оказывается, регистр DDR где-то сбрасывается.
Перекопал весь код, закоментировал все лишнее.
После того, как разбил лоб в поисках проблемы, выявил, что ее можно победить двумя способами:
1. непосредственно перед использованием пина записывать "1" в его DDR;
2. отключить оптимизацию (чито случайно попробовал, никогда ни подумал бы).

Использую scmRTOS, копилятор GCC, make из операционки.

Инициализация вот такая:
Код
SMH_InputsOutputs::
SMH_InputsOutputs(OS::TMutex* pMutex) : mutex(pMutex){
    DRIVER(PIN_STNDBY,  OUT);
    DRIVER(PIN_TSTRD,  OUT);
    DRIVER(PIN_KBDRD,  OUT);
    DRIVER(PIN_RKRD,  OUT);
    DRIVER(PIN_RKWR,  OUT);
    DRIVER(PIN_DRS,  OUT);
    DRIVER(PIN_DEN,  OUT);
    OFF(PIN_STNDBY);
    ON(PIN_TSTRD);
    ON(PIN_KBDRD);
    ON(PIN_RKRD);
    ON(PIN_RKWR);
    ON(PIN_DRS);
    ON(PIN_DEN);
    outputs = 0;

}

проблема вот здесь:
Код
void SMH_InputsOutputs::
handler(void){

    mutex->Lock();

    // Опрос внешних входов DIN0 - DIN7
    SET_DATA_BUS_READ_MODE;
    OFF(PIN_RKRD);
//DRIVER(PIN_RKRD,    OUT);    //?????????? Не знаю, где сбрасывается DDRE5
    inputs0_7 = GET_DATA_BUS;    //    Сохранить результат с защелки
    ON(PIN_RKRD);


    // Установка внешних выходов
    SET_DATA_BUS_WRITE_MODE;        //    Перевести порт данных в режим "передача"
    SET_DATA_BUS = outputs;
    OFF(PIN_RKWR);
    ON(PIN_RKWR);
    SET_DATA_BUS_READ_MODE;



    mutex->Unlock();
}


Если раскоментировать строку
//DRIVER(PIN_RKRD, OUT); //??????????
проблема решается, а если ее же передвинуть выше на одну строку, то нифига не работает.
Ну или отключить оптимизацию, то эта строка вовсе не нужна.

Если есть мысли, поделитесь, пожалуйста.


Go to the top of the page
 
+Quote Post



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

 


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


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