|
Проблема с VMLAB.Помогите..., Прерывания. |
|
|
|
Jan 28 2008, 07:57
|
Группа: Новичок
Сообщений: 14
Регистрация: 28-01-08
Пользователь №: 34 483

|
Уважаемый форум! Изучал прерывания на мегах и столкнулся с проблемой, а пока не решу дальше не иду. Задал свой вопрос на forum.roboclub.ru, но видно сильно подробно описал или вопрос сильно до- школьный, но в ответ -- тишина. Надеюсь, что вы будете более снисходительны. При пошаговой отладке прерывания Таймер0 обратил внимание: 1.Предделитель таймера-биты CS03-CS00 регистра ТССR0B не устанавливаются. 2.При ручном вводе этого значения в поле TCCRn окна ‘Peripherals’ и при пошаговом выполнении программы, происходит затирание предварительно введенного значения в поле TCCRn окна ‘Peripherals’ инструкцией “TCCR0A=0х00;”. Если же остановить запущенную программу и вручную ввести значение в поле TCCRn окна ‘Peripherals’, то после запуска программы прерывание происходит, но при этом флаг прерываня в регистре TIFR0 устанавливается не TOV0(бit0), а OCF0A(bit1). При рассмотрение файла m48def.inc, из папки include VMLABa, имена битов и адр. регистров соответствуют Д.Ш. Но если просматривать побитно поле TCCRn окна ‘Peripherals’ то получаешь ахинею из имен битов, которых в ДШ нет. Вопрос, что означают имена битов в окне TCCRn окна ‘Peripherals’? В ДШ. есть TCCR0А и ТCCR0В и имена битов совсем другие.
Далее про PCINT. Выводы PORTB.1-3 сделал входами с подтяжкой. В VMLAB повешал на них кнопки ‘control panel’. При нажатии на любую кнопку флаг прерывания устанавливается (бит0 в регистре PCIFR), но сам обработчик не выполняется и флаг не обнуляется. Листинги для обоих пакетов привожу. Проверял работу прерывания таймер0 на 90S2313 все работает. Кто сталкивался с этим - пожалуйста объясните и если можно то подробней. Если проверки делаю в цикле While то все работает.
""МЫ ВСЕ КОГДА-ТО УЧИЛИСЬ ХОДИТЬ.""
Chip type : ATmega48 Clock frequency : 0,015625 MHz Memory model : Small External SRAM size : 0 Data Stack size : 128 *****************************************************/
#include <mega48.h>
// Pin change 0-7 interrupt service routine interrupt [PCINT0] void pin_change_isr0(void) { // Place your code here PORTD.2=~PIND.2;//если произошло прерывание, то сигнал на выходе порта инверти-я. }
// Timer 0 overflow interrupt service routine /*interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0xF0;//предварительная загрузка числа в счетный регистр таймера // Place your code here #asm("cli"); TIFR0=0x01;//стираю принудительно флаг, хотя по даташиту не нужно. PORTD.3=~PIND.3;//по прерыванию сигнал на выходе порта инвертируется. #asm("sei"); } */
// Declare your global variables here
void main(void) {
// Crystal Oscillator division factor: 256 #pragma optsize- CLKPR=0x80; CLKPR=0x08; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif
// Port B initialization PORTB=0x0Е; DDRB=0x00;
// Port D initialization PORTD=0x1Е; DDRD=0x1E;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 15,625 kHz // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00; TCCR0B=0x05; TCNT0=0xF0;//предварительная загрузка таймера0 OCR0A=0x00; OCR0B=0x00;
// Interrupt on any change on pins PCINT0-7: On
EICRA=0x00; EIMSK=0x00; PCICR=0x01;//включение прерывания на выводы порта РВ PCMSK0=0x0E;//разрешение прерывания на линиях РВ3-1 PCIFR=0x00;
// Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x01;
// Global enable interrupts #asm("sei")
while (1) {
} }
Для VMLAB: .MICRO "ATmega48" .TOOLCHAIN "GENERIC" .TARGET "1.hex" ; Proshivka na MK .COFF "1.cof" ; .SOURCE "1__.c" .CLOCK 4meg .POWER VDD = 5 VSS = 0 .STORE 2000m
; SW2-SW0 === K2-K0 on ControlPanal
K1 PB1 VSS ; кнопки с выхода порта на gnd. K2 PB2 VSS ; K3 PB3 VSS ;
; =================================================== ; Signals that will be ploted in SCOPE window
.plot V(PB1) V(PB2) V(PB3) V(PD2) V(PD3)
|
|
|
|
|
 |
Ответов
|
Feb 5 2008, 09:27
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Цитата Думаю, что она пока сырая. Берите не глядя, другой все равно нет, да и 4я какая у вас? Последняя вроде была 4.13, вообще 4е версии студии выходят уже года четыре, я, признаться, других версий(3х, 2х) и не видел  Цитата да и осваивать с нуля вижин оказалось проще Сам начинал с кодевижона... ИАР посложнее, но и код он генерит более плотный и оптимальный. Цитата А WinAvr можно брать любой? Любой, но лучше последний, конечно. WinAvr - это известный линуксовый компилятор GCC портированный на виндовс и заточенный под АВР - и соответствующие ему "проблемы" - make файлы, которые с ходу не понятны после вижона и ИАРа, но зато если с ним разобраться, то можно вообще перейти на разработку в линуксе  Цитата Конечно хорошо бы иметь что-нибудь из Aтмеловских аппаратных отладок, но пока они прийдут на периферию обрастут тройной ценой. На счет "обрастут" вам виднее, но отладочные платы у атмела не дороги, к тому же простейшую плату можно собрать самому, да и на форуме тут кто то предлагал уже платы собственной разработки. Из атмеловских плат мне нравится AVR Butterfly - в питерском ЭФО стоит около 600р, но к ней желателен программатор.
--------------------
|
|
|
|
|
Feb 5 2008, 13:01
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 24-06-05
Пользователь №: 6 281

|
Симулятор VMLab не поддерживает режим PWM по регистру ICR1. Также что-то непонятное творится с таймерами в некоторых режимах PWM для контроллеров mega48/88/168. И к сожалению VMLab давно уже не развивается. ИМХО - из симуляторов - лучший! (Не сравниваю с Proteus - разные подходы).
|
|
|
|
|
Feb 6 2008, 06:14
|
Группа: Новичок
Сообщений: 14
Регистрация: 28-01-08
Пользователь №: 34 483

|
Цитата(Vix @ Feb 5 2008, 16:01)  Симулятор VMLab не поддерживает режим PWM по регистру ICR1. Также что-то непонятное творится с таймерами в некоторых режимах PWM для контроллеров mega48/88/168. И к сожалению VMLab давно уже не развивается. ИМХО - из симуляторов - лучший! (Не сравниваю с Proteus - разные подходы). Я думаю, что вся проблема в неправильных dll-ках. Когда я заморачивался с таймерами, то обратил внимание на то, что биты в регистрах не соответствуют ДШ(см выше). Я думаю, что они взяли шаблоны с прошлых версий и воткнули не глядя, т.к. заранее планировалася бесплатная версия. А инклуды я проверял -- они соответствуют ДШ. Нашел в сети перевод фирменного руководства по созданию dll-ки для симуляции собственного элемента. Но я пока в Си дуб и поэтому эта описаловка для меня темный лес. Но я думаю, что если освоить это, то получится мощный инструмент в руках, ведь что ни говори, а vmlab при его маленьких размерах обладает большими возможностями. Сегодня скачал WinAvr и буду щупать его со студией. Может быть действительно студия богаче для отладки.
|
|
|
|
Сообщений в этой теме
j_serg Проблема с VMLAB.Помогите... Jan 28 2008, 07:57 =GM= Цитата(j_serg @ Jan 28 2008, 07:57) ... п... Jan 28 2008, 11:25 j_serg Спасибо, что хоть кто-то решил пообщаться. Но я не... Jan 29 2008, 06:54 =GM= Цитата(j_serg @ Jan 29 2008, 06:54) Но я ... Jan 29 2008, 10:12 mdmitry Проверьте функции прерывания по таймеру. Зачем фла... Jan 29 2008, 07:08 j_serg Цитата(mdmitry @ Jan 29 2008, 10:08) Пров... Jan 29 2008, 10:08 j_serg Цитата(=GM= @ Jan 29 2008, 13:12) Пишите ... Jan 30 2008, 10:32 =GM= Цитата(j_serg @ Jan 30 2008, 10:32) Далее... Jan 30 2008, 16:44  j_serg Цитата(=GM= @ Jan 30 2008, 19:44) Ну и гд... Jan 31 2008, 04:05   =GM= Цитата(j_serg @ Jan 31 2008, 04:05) По ва... Feb 1 2008, 10:56    j_serg Цитата(=GM= @ Feb 1 2008, 13:56) Какие-то... Feb 4 2008, 09:27 GDI ЦитатаНе знаю почему, но дизасм отправляешь в норм... Jan 31 2008, 08:26 j_serg Цитата(GDI @ Jan 31 2008, 11:26) Потому ч... Jan 31 2008, 08:50 GDI Я больше скажу - баги даже в железе есть что уж т... Jan 31 2008, 10:05 j_serg Цитата(GDI @ Jan 31 2008, 13:05) Я больше... Jan 31 2008, 10:33 aleksey_g Да бросьте Вы этот VMLAB! Он только добавит не... Feb 4 2008, 17:15 GDI Цитатане знаю, умеет ли студия "ходить" ... Feb 5 2008, 07:40 j_serg Чем прельщает VMLAB, так это виртуальным оциллогра... Feb 5 2008, 08:08 GDI Она заточена под разработку на асме, но дебажит но... Feb 5 2008, 08:25 j_serg Полностью согласен на счет железа. Конечно хорошо ... Feb 5 2008, 09:05   Vix Вчера ковырял (раз в полгода просматриваю прогресс... Feb 6 2008, 06:33    j_serg Цитата(Vix @ Feb 6 2008, 09:33) Вчера ков... Feb 6 2008, 07:45
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|