Перейти к содержанию
    

nvhleb

Участник
  • Постов

    10
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Здравствуйте. Можно ли подключить в Proteus'е расшаренную библиотеку, чтобы несколько сред могли иметь к ней одновременный доступ (чтобы добавленные кастомные компоненты были видны всем). К сожалению, документация этот вопрос не освещает, может кто-нибудь сталкивался с аналогичной задачей? С уважением, Николай.
  2. Библиотека I2C.h из C18

    Разыскивается библиотека I2C.h и p18f248.h из C18. Если не затруднит, киньте сюда или на nvhleb~ГАВ~km.ru. Заранее спасибо :)
  3. Вопрос уже обсуждался в http://electronix.ru/forum/lofiversion/index.php/t19767.html От себя могу добавить, что вначале стоит прочитать "AVR034 Mixing C and Assembly Code with.pdf". Далее нужно создать модуль с расширением *.asm и подключить его у проекту. Пример модуля обработчика прерываний: NAME UART_int ; имя #include "ioavr.h" ; главное не подключать модули, в которых определены C-шные объекты COMMON INTVEC(1) ; размещаем код в Interrupt Vector Segment ORG USART_RXC_vect ; по адресу обработчика прерывания rjmp USART_RXC ; переход на сам обработчик extern uartRxError, uartESCReceived ; введение переменных, объявленных в другом модуле RSEG CODE ; размешение программы в сегменте основного кода (RSEG) USART_RXC: call SAVE_DATA ; не забываем сохранить используемые регистры ; ; собственно исполняемый код ; jmp EXIT_INT ; восстанавливаем значения регистров и выходим из прерывания EXIT_INT: call RESTORE_DATA reti SAVE_DATA: st -Y, R16 in R16, SREG ; обязательно сохраняем флаги st -Y, R16 st -Y, R17 ret RESTORE_DATA: ld R17, Y+ ld R16, Y+ out SREG, R16 ; восстанавливаем флаги ld R16, Y+ ret END В C-модулях ничего делать не надо. Если нужно из C-кода вызывать ASM-функции, то после перечитывания топиков "Passing Variables Between C and Assembly Code Functions" и "Calling Assembly Code Functions from a C Program". В C-модулях через extern объявляем вызываемую функцию и вызываем как обычно, а в AMS-модуле ее шарим через PUBLIC: NAME get_port #include "ioavr.h" PUBLIC get_port ; Declare symbols to be exported to C function RSEG CODE ; This code is relocatable, RSEG get_port; ; Label, start execution here in R16,PIND ; Read in the pind value swap R16 ; Swap the upper and lower nibble out PORTB,R16 ; Output the data to the port register ret ; Return to the main function END
  4. Подскажите, плиз, чем можно и нужно компилировать C код для DSP56824. В DSP я новичек так что не судите строго :) Нашел вот такое вот счастье: CodeWarrior Development Studio for Freescale 56800/E Hybrid v8, но оно жестоко много весит :(( Киньте ссылочку на что-нибудь покомпактнее, если такое есть, конечно...
  5. bodja74, спасибо огромное за консультацию! :) Абсолютно согласен :) Давненько занимаюсь embedded-программированием (по большей части под видом хобби) и использую Proteus (4.73) :-)) для рисования схем и плат. Вот решил проапгрейдиться и заодно разобраться и с симулятором... Пока впечатления на 4+ (все шикарно за исключением траблов с прерываниями). Главное, очень сильно экономится время, а то по 20 - 40 раз в день перетыкивать камешек в программатор и обратно уже не в цвет... Внутрисхемное программирование решает большинство таких проблем, но как всегда хочется большего. ;-) Кстати, по этому вопросу на kazus.ru и labcenter.co.uk пока молчат :))
  6. Читал, но там описано очень мало багов/ограничений :) Хотя может это и к лучшему: внушает оптимизм... ;) Посмотрю что ответят на сайте производителя.
  7. Прикольно :)) Действительно, интересная фича... Хоть бы в хелпе описали :(( Нет ли где-нибудь ветки про такие ограничения ISIS'а? Был бы очень признателен. :-)
  8. Есои не трудно, киньте pls. avr.dll от proteus 6.7 сюда или мне на мыло (nvhleb'ГАВ-ГАВ'km.ru).
  9. Совсем забыл, версия Proteus 6.9 SP5 от kazus.ru.
  10. Может кто-нибудь сталкивался: есть тестовая программка написанная на C (IAR) для ATmega8, которая включает прерывание INT0, генерирует его программно и обрабатывает. В AVR Studio симуляция проходит успешно: ручное изменения значения PIND PD2 приводит к прерыванию, также нормально работает программная генерация прерывания. При симуляции в Proteus ни один из вариантов не работает (даже не становится на бряке в обработчике прерывания). Все настройки контроллера установлены по дефолту, копание в них ни к чему не привело. :-( В чем может быть проблема? Исходный код: #include <ioavr.h> #include <inavr.h> #include <avr_macros.h> int main() { int a; CLEARBIT(DDRD, PD2); // INT0 as input MCUCR = 0x01; // INT0 at any change of signal level SETBIT(GICR, INT0); // INT0 enabled SETBIT(SREG, 7); // interrupts are enabled __enable_interrupt(); SETBIT(DDRD, PD7); // PD7 as output CLEARBIT(PORTD, PD7); if (!TESTBIT(PORTD, PD7)) SETBIT(PORTD, PD7); while(true) { a++; if (a == 0) { SETBIT(DDRD, PD2); // PD2 (INT0) as output SETBIT(PORTD, PD2); CLEARBIT(PORTD, PD2); CLEARBIT(DDRD, PD2); // PD2 (INT0) as input } } return 0; } #pragma vector = INT0_vect __interrupt void Int0(void) { CLEARBIT(GIFR, INTF0); PORTD ^= (0x01 << PD7); }
×
×
  • Создать...