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

 
 
> LPC1114 + Keil, вопросы
swisst
сообщение Nov 24 2010, 13:46
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Доброго времени суток !

1. Подскажите как разместить переменную в памяти программы ? [разобрался]

под С51 было так...
Код
const uint8_t code var_name;


сейчас достаточно так...
Код
const uint8_t var_name;

____________________________________________________________________
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
swisst
сообщение Dec 1 2010, 15:25
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(rezident @ Nov 30 2010, 22:08) *
Функцией Bus clear свой алгоритм дополнили?


нет...можно подробнее ?

Цитата(GetSmart @ Nov 30 2010, 22:09) *
В 1114 есть уникальный номер у каждого проца.


таки да...
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 2 2010, 04:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(swisst @ Dec 1 2010, 20:25) *
нет...можно подробнее ?
Подробнее в спецификации I2C. Раздел 3.16 Bus clear. Функцию Bus clear нужно выполнять после подачи питания до начала обращения мастера к слейвам и/или при большом таймауте занятости шины каким-либо слейвом.
Go to the top of the page
 
+Quote Post
swisst
сообщение Dec 2 2010, 13:51
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(rezident @ Dec 2 2010, 06:37) *
Подробнее в спецификации I2C. Раздел 3.16 Bus clear. Функцию Bus clear нужно выполнять после подачи питания до начала обращения мастера к слейвам и/или при большом таймауте занятости шины каким-либо слейвом.


добавил функцию bus clear...без изменений...

Цитата
In the unlikely event where the clock (SCL) is stuck LOW, the preferential procedure is to
reset the bus using the HW reset signal if your I2C devices have HW reset inputs. If the
I2C devices do not have HW reset inputs, cycle power to the devices to activate the
mandatory internal Power-On Reset (POR) circuit.
If the data line (SDA) is stuck LOW, the master should send 9 clock pulses. The device
that held the bus LOW should release it sometime within those 9 clocks. If not, then use
the HW reset or cycle power to clear the bus.


функция bus clear применяется в случаях, если залипает линия SDA в ноль. в моем случае - после резета обе линии в единице.

не с того я начал.
Дано: LPC1114+AT24C01A (больше на I2C ничего не висит). SDA и SCL не перепутаны и обе подтянуты к питанию через 3K3.
Задача: используя аппаратный I2C добиться записи/чтения от AT24

Проблема:
после ресета делаю Bus Clear (обычным дрыганием ног). START CONDITION отправляю по нажатию кнопки (так проще синхронизироваться). после отправки START CONDITION попадаю в прерывание, где анализирую STAT (он равен 8 - тут все хорошо) switch'eм. загружаю SLA+W (0xA0), сбрасываю STA и SIC - вываливаюсь из прерывания и все...в прерывание я больше не попадаю...

Код
//================================================================================
====

void Init_I2C (){
    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<5);            //Enables clock for I2C
    LPC_SYSCON->PRESETCTRL |= (1<<1);                //de-asserts I2C reset

    LPC_IOCON->PIO0_4 = 1;                            //Selects I2C function SCL (open-drain pin)
    LPC_IOCON->PIO0_5 = 1;                            //Selects I2C function SDA (open-drain pin)

    LPC_I2C->SCLH = 64000;
    LPC_I2C->SCLL = 64000;

    LPC_I2C->CONCLR = ((1<<2) | (1<<3) | (1<<5) | (1<<6));        //CON clear;
    NVIC_EnableIRQ(I2C_IRQn);                                    //I2C IRQ enable
    LPC_I2C->CONSET |= (1<<6);                                    //I2C enable

    test_i2c = LPC_I2C->STAT;

    I2C_State = CLEAR_BUS;
}

//================================================================================
====

void I2C_IRQHandler (){
    uint8_t StatValue = LPC_I2C->STAT;
    test_i2c = StatValue;
    switch(StatValue){
        case 0x08:                                        //START condition has been transmitted
            LPC_I2C->DAT = 0xA0;                        //Load SLA+W
            LPC_I2C->CONCLR |= ((1<<3) | (1<<5));        //Clear SIC, STA
            break;
        case 0x10:                                        //Repeated START condition has been transmitted
            LPC_I2C->DAT = 0xA0;                        //Load SLA+W
            LPC_I2C->CONCLR |= ((1<<3) | (1<<5));        //Clear STA
            break;
        case 0x18:                                        //SLA+W has been transmitted; ACK has been received
            LPC_I2C->DAT = 0xFF;
            LPC_I2C->CONSET |= (1<<4);
            break;
        case 0x20:                                        //SLA+W has been transmitted; NOT ACK has been received
            LPC_I2C->DAT = 0xFF;
            LPC_I2C->CONSET |= (1<<4);
            break;
        case 0x28:                                        //Data byte in DAT has been transmitted; ACK has been received
            break;
        case 0x30:                                        //Data byte in DAT has been transmitted; NOT ACK has been received
            break;
        case 0x38:                                        //Arbitration lost in SLA+R/W or Data bytes
            break;
        default:
            I2C_State = CLEAR_BUS;
            LPC_I2C->CONCLR |= (1<<3);
    }
    SW_1_TOG;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- swisst   LPC1114 + Keil   Nov 24 2010, 13:46
- - ViKo   АКодstatic const uint8_t var_name; работает?   Nov 24 2010, 14:05
- - toweroff   unsigned int const my_variable = 0x55555555; если...   Nov 24 2010, 14:05
- - swisst   ничего из предложенного не работает - переменная в...   Nov 24 2010, 14:17
|- - ViKo   Цитата(swisst @ Nov 24 2010, 16:17) перем...   Nov 24 2010, 14:47
- - swisst   Судя по всему тему создал с горяча... Кодconst ui...   Nov 24 2010, 15:12
|- - ViKo   Цитата(swisst @ Nov 24 2010, 17:12) говор...   Nov 24 2010, 18:31
- - swisst   Вопрос 2: Аппаратный I2C LPC1114 + EEPROM (AT24C01...   Nov 26 2010, 07:23
- - rezident   А чего там бороть-то? Взял пример I2C из папки ...   Nov 26 2010, 09:42
|- - swisst   Цитата(rezident @ Nov 26 2010, 11:42) А ч...   Nov 29 2010, 12:03
|- - rezident   Цитата(swisst @ Nov 29 2010, 17:03) если ...   Nov 29 2010, 22:36
- - swisst   дык...первым делом - мануал, вторым - примеры NXP....   Nov 26 2010, 10:14
- - toweroff   swisst, а резисторы-то к питанию притянуты?   Nov 29 2010, 18:57
- - swisst   Цитата(toweroff @ Nov 29 2010, 20:57) swi...   Nov 30 2010, 06:55
- - esaulenka   Лень создавать тему, спрошу про LPC111x здесь. Что...   Nov 30 2010, 14:26
- - swisst   Код3.5.35 Device ID register This device ID regist...   Nov 30 2010, 15:08
|- - esaulenka   Цитата(swisst @ Nov 30 2010, 18:08) 3.5.3...   Nov 30 2010, 15:32
||- - GetSmart   Цитата(esaulenka @ Nov 30 2010, 20:32) Сп...   Nov 30 2010, 20:09
|- - rezident   Цитата(swisst @ Nov 30 2010, 20:08) поков...   Nov 30 2010, 20:08
- - Andrei0686   Привет всем! Столкнулся с небольшой проблемой ...   Sep 22 2011, 05:23
|- - esaulenka   Цитата(Andrei0686 @ Sep 22 2011, 09:23) i...   Sep 22 2011, 10:05
- - Andrei0686   if (LenData == *(__packed unsigned short*)&mas...   Sep 23 2011, 14:29


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:49
Рейтинг@Mail.ru


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