Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR atmel studio 6.0
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Valentin_U
На ассемблере написан пример для работы по интерфейсу TWI.
В atmel Studio 6.0, при выполнении кода в симуляторе, данные в регистры TWI загружаются, как указано в описании. После записи команды “старт” в регистр TWI,
состояние на выходах порта D не меняется, и прерывание не выполняется.
Подозрение, что в atmel studio 6.0 (6.2) не работает симуляция данного протокола.
В чем причина данной ситуации. Как решить данную проблему?

CODE
/*
* i2c_new.asm
*
* Created: 18.01.2015 17:08:02
* Author: Admin
*/
.DEVICE ATMEGA2560

.CSEG
.ORG 0000
JMP start

.CSEG
.ORG 0x004e
rjmp Int_TWI

nop
.CSEG
.ORG 0x0100
start:
cli ; запретить прерывания
ldi r16, high(RAMEND) ; конечный адр ОЗУ
out SPH, r16 ; загрузить регистр H стека
ldi r16, low(RAMEND) ; конечный адр ОЗУ
out SPL, r16 ; загрузить регистр L стека
;========================== ========================
startt_1:
rcall TWI_init_100 //Инициализируем интерфейс TWI на 100 000

rcall TWI_start // разреш прерыв и посылаем стоп
ttt: nop
sei ; разрешить все прерывания
nop
nop
nop
rjmp ttt
;----------------------------------------
; ======== обработка прерывания от TWI ==============
Int_TWI: ; Прерыв_39, 0x04E, прерывание от TWI
.def temp17 = r17
.def temp16 = r16
cli ; запретить прерывания
Int_twi_1:
lds temp17, TWSR ; регистр статуса TWI
nop
rjmp Int_twi_1
;----------------------------
; ПРОЦЕДУРЫ РАБОТЫ С TWI

TWI_init_100: //Инициализация TWI на скорости 100 000 б/сек
; TWBR =((Fcpu/Fi2c)-16)/(2*4^twps)
; TWBR =((16000000/100000)-16)/(2*4^0)=72 (0x48) (0b0100 1000)
cli
ldi temp16, 0x12 ; 2 мл бита в TWSR 0b01 0010,2бита в рег TWSR
sts TWBR, temp16 ;адр 0xB8 рег скорости
ldi temp16,(0<<TWPS1)|(0<<TWPS0)
sts TWSR,temp16 ;адр 0xB9, 2 бита рег скорости
ret
; ------------------------------------------------
TWI_start: //Передача стартовой посылки
ldi temp16,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE)
; сброс | уст стоп | раз.раб | раз прерыв
sts TWCR, temp16 ; рег управл адр 0хBC
ret
;----------------------------------------------------
TWI_stop: //Отправляет стоповую посылку
ldi temp16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)|(1<<TWIE)
sts TWCR, temp16 ;адр 0xBC
ret
V_G
Пардон, не стал вдаваться в ваш пример, но у меня сложилось впечатление, что Astudio в версиях 5 и выше ориентируется на программирующих на Си, а не на ассемблере.
Я как-то давно сообщал в их техподдержку про какой-то баг с отображением то ли регистров, то ли памяти при отладке, внятного ответа не получил, кроме совета переходить на Си. В результате откатился на версию 4.19.
Valentin_U
Цитата(V_G @ Jan 24 2015, 19:15) *
Пардон, не стал вдаваться в ваш пример, но у меня сложилось впечатление, что Astudio в версиях 5 и выше ориентируется на программирующих на Си, а не на ассемблере.
Я как-то давно сообщал в их техподдержку про какой-то баг с отображением то ли регистров, то ли памяти при отладке, внятного ответа не получил, кроме совета переходить на Си. В результате откатился на версию 4.19.


Спасибо.
Поставил 4.19 но проблема в том, что 4.19 не поддерживает atmega 2560
demiurg1978
Цитата(Valentin_U @ Jan 25 2015, 14:21) *
Спасибо.
Поставил 4.19 но проблема в том, что 4.19 не поддерживает atmega 2560

Кто вам такое сказал? У студии 2 симулятора. Симулятор и симулятор 2. Если вы при создании проекта укажете симулятор 2, то будет вам поддержка недостающих кристаллов симулятора 1. В том числе ATMEGA2560.
Тип симулятора можно изменить и у текущего проекта. Вкладка Debug-Select Platform And Device-AVR Simulator 2
Valentin_U
Спасибо. попробывал симулятор 2, там есть 2560. Но, это не решило проблему.
Не идет симуляция twi. регистры загружаются, а на выходе порта D сигнал не устанавливается,
и прерывания от twi не срабатывает.
Палыч
Достаточно заглянуть в документацию на AVR Studio, чтобы понять, что в симуляторе:
Цитата
TWI is not supported
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.