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

 
 
> SAM7 + Mega8 и I2C
beer_warrior
сообщение Mar 10 2007, 17:35
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Работаю со связкой - SAM7 + Mega8. SAM7 пишет управляющий байт и читает байт статуса.
И вот интересная картина получается. Поставил как возврат статуса константу 0x55.
1. После включения питания первое чтение 0x55, второе 0xFF, все последующие - 0x55.
2. После записи первое чтение 0xFF, все последующие - 0x55.

На код грешить боюсь - для связки мега-мега обкатан многократно. SAM7 без особых проблем работает с 24с02 на той же шине.

Мне кажется допускаю какую-то логическую неувязку в работе с шиной.(Не закрываю обмен или что-то подобное)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Mar 10 2007, 19:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



SAM работает поллингом, проще некуда:
Код
bool ReadByteI2C(BYTE addr, BYTE* data)
{
//set device adr
AT91C_BASE_TWI->TWI_MMR = (addr << 16)| AT91C_TWI_MREAD;    
//start
TWI_START();//macros
//write data
while(!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_RXRDY));            
*data = AT91C_BASE_TWI->TWI_RHR;
//stop
TWI_STOP();//macros    
while(!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP));
return true;
}

bool WriteByteI2C(BYTE addr, BYTE data)
{
//set device adr
AT91C_BASE_TWI->TWI_MMR = (addr << 16);
AT91C_BASE_TWI->TWI_THR = data;
//start
TWI_START();//macros
//write data
while(!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXRDY));            
//stop
TWI_STOP();//macros
while(!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP));
return true;
}


bool - потому что предполагается добавить обработку статуса транзакции.


Мега живет на прерывании
привожу только имеющее отношение к делу:

Код
SIGNAL(SIG_2WIRE_SERIAL)
{
//TEST0_ON();
TWCB.sta = TWSR & 0xf8;
switch(TWCB.sta)
    {
//SLAVE    RECEIVE

        case TWS_SLAW_ACK:
            //SLAVE device has been addressed by SLAW
            {
            TWCR = TW_EXE_ACK;    //generate ACK
            break;
            }
        case TWS_DATAR_ACK_SLAW:
            //SLAVE has been got a byte, ACK will generated
            {
            //TEST1_ON();
            data = TWDR;
            TWCR = TW_EXE_ACK;    //switch to adressed mode
            break;
            }
        case TWS_STOP:
            //stop condition has been detected
            {
            TWCR = TW_EXE_ACK;    //& generate ACK
            break;
            }
//SLAVE TRANSMIT
        case TWS_SLAR_ACK:
            //SLAVE device has been addressed by SLAR
            {
            TWDR = 0x55;
            TWCR = TW_EXE_NACK;    //generate NACK
            break;
            }
        case TWS_DATAW_ACK:
            //SLAVE has been transmit a byte and got ACK
            //SLAVE transmit next byte
            {
            break;
            }
        case TWS_DATAW_NACK:
            //SLAVE has been transmit a byte and got NACK
            //end of transmision
            {
            TWCR = TW_EXE_ACK;    //switch to adressed mode
            break;
            }
        }
    }//switch
}
//
//
//
//TW commands
#define    TW_EXE_STA    (1<<TWINT)|(1<<TWIE)|(1<<TWEN)|(1<<TWSTA)    //make start condition
#define    TW_EXE_STO    (1<<TWINT)|(1<<TWIE)|(1<<TWEN)|(1<<TWSTO)    //make stop condition
#define    TW_EXE_ACK    (1<<TWINT)|(1<<TWIE)|(1<<TWEN)|(1<<TWEA)    //transmit byte and wait ACK
#define    TW_EXE_NACK    (1<<TWINT)|(1<<TWIE)|(1<<TWEN)                //transmit byte and wait NACK




//SLAVE RECEIVER
#define TWS_SLAW_ACK        0x60
#define TWS_ARB_LOST_SLAW    0x68
#define TWS_GEN_CALL        0x70
#define TWS_ARB_LOST_GC        0x78
#define TWS_DATAR_ACK_SLAW    0x80
#define TWS_DATAR_NACK_SLAW    0x88
#define TWS_DATAR_ACK_GC    0x90
#define TWS_DATAR_NACK_GC    0x98
#define TWS_STOP            0xa0

//SLAVE TRANSMITTER
#define TWS_SLAR_ACK        0xa8
#define TWS_ARB_LOST_SLAR    0xb0
#define TWS_DATAW_ACK        0xb8
#define TWS_DATAW_NACK        0xc0
#define TWS_DATA_LAST        0xc8


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- beer_warrior   SAM7 + Mega8 и I2C   Mar 10 2007, 17:35
- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 17:35)...   Mar 10 2007, 18:07
- - beer_warrior   Еще интересный эффект всплыл. Попробовал в промежу...   Mar 10 2007, 19:40
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 19:40)...   Mar 10 2007, 20:02
- - beer_warrior   Код//---------------------------------------------...   Mar 10 2007, 20:14
|- - singlskv   для начала попробуйте вот так: Цитата(beer_warrior...   Mar 10 2007, 20:28
- - beer_warrior   ЦитатаTWI_RHR; // !!!!!!...   Mar 10 2007, 20:35
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 20:35)...   Mar 10 2007, 21:26
- - beer_warrior   ЦитатаТак что искать логику в TWI на SAM7 нет смыс...   Mar 10 2007, 21:47
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 21:47)...   Mar 10 2007, 22:06
- - beer_warrior   Значит так, проблема решена следующим образом: Код...   Mar 10 2007, 22:13
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 22:13)...   Mar 10 2007, 22:49
- - beer_warrior   ЦитатаЯ думаю что переносить пока рано С мегой там...   Mar 10 2007, 22:37
- - beer_warrior   ЦитатаЯ бы в Вашем коде тоже кое-что поменял. Согл...   Mar 10 2007, 23:34
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 23:34)...   Mar 11 2007, 02:23
- - singlskv   ЦитатаЦитата основная проблема TWI на SAM7 это то,...   Mar 11 2007, 01:42
- - beer_warrior   Цитата"Модуль TWI прекрасно подходит для обме...   Mar 11 2007, 11:18
|- - singlskv   Цитата(beer_warrior @ Mar 11 2007, 11:18)...   Mar 15 2007, 03:08
- - _dem   Кстати, решение по остановке TWI у SAM есть - про...   Aug 3 2007, 15:12
- - SasaVitebsk   Забавно иногда смотреть. Разные программисты в раз...   Aug 3 2007, 19:04
|- - singlskv   Цитата(SasaVitebsk @ Aug 3 2007, 23:04) К...   Aug 3 2007, 22:14
- - SasaVitebsk   Мужчина!   Aug 4 2007, 18:52
|- - singlskv   Цитата(SasaVitebsk @ Aug 4 2007, 22:52) М...   Aug 4 2007, 19:26
- - Kirill Frolov   Цитата(beer_warrior @ Mar 10 2007, 21:35)...   Aug 6 2007, 23:33


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

 


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


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