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

alex_hyp

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

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

  • Посещение

Репутация

0 Обычный

Информация о alex_hyp

  • Звание
    Участник
    Участник
  1. Кофигурация Clock

    Добрый вечер! Имею в наличии отладочную плату UC3-L0 Xplained с контроллером 32UC3L064. Беру простейший пример с мигающей лампочкой, немного модифицирую 2 файла, в итоге: основная программа: #include <compiler.h> #include <sysclk.h> #include <board.h> #include <gpio.h> #include <delay.h> int main(void) { sysclk_init(); board_init(); while (1) { gpio_toggle_pin(LED0_GPIO); //delay_us(1); } } conf_clock.h #ifndef CONF_CLOCK_H_INCLUDED #define CONF_CLOCK_H_INCLUDED // ===== System Clock Source Options //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RCSYS //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_OSC0 //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_DFLL #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC120M //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL0 //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL1 // ===== PLL Options //#define CONFIG_PLL0_SOURCE PLL_SRC_OSC0 //#define CONFIG_PLL0_MUL 4 /* Fpll = (Fclk * PLL_mul) / PLL_div */ //#define CONFIG_PLL0_DIV 1 /* Fpll = (Fclk * PLL_mul) / PLL_div */ // ===== DFLL Options #define CONFIG_DFLL0_SOURCE GENCLK_SRC_RC120M /* Fdfll = (Fclk * DFLL_mul) / DFLL_div */ #define CONFIG_DFLL0_MUL 1 #define CONFIG_DFLL0_DIV 1 /* Fdfll = (Fclk * DFLL_mul) / DFLL_div */ // ===== System Clock Bus Division Options #define CONFIG_SYSCLK_CPU_DIV 1 /* Fcpu = Fsys/(2 ^ CPU_div) */ #define CONFIG_SYSCLK_PBA_DIV 1 /* Fpba = Fsys/(2 ^ PBA_div) */ #define CONFIG_SYSCLK_PBB_DIV 1 /* Fpbb = Fsys/(2 ^ PBB_div) */ // ===== Peripheral Clock Management Options //#define CONFIG_SYSCLK_INIT_CPUMASK (1 << SYSCLK_SYSTIMER) //#define CONFIG_SYSCLK_INIT_PBAMASK (1 << SYSCLK_USART0) //#define CONFIG_SYSCLK_INIT_PBBMASK (1 << SYSCLK_HMATRIX) //#define CONFIG_SYSCLK_INIT_HSBMASK (1 << SYSCLK_MDMA_HSB) #endif /* CONF_CLOCK_H_INCLUDED */ на выходе осциллографом измеряю 1,5 МГц. каким образом? подскажите, пожалуйста, как нормально сконфигурировать Clock на нужную частоту ? заранее благодарен
  2. не надо клещами :) написал коротко - думал будет понятно. пробую развернуть! от некого Мастера передаю на свой слэйв 3 байта подряд, зная чётко их значения, видя их на осциллографе. в приведенной выше программе слэйва отлавливаю эти 3 байта, заношу в массив ind[]. и на моё удивление, значение второго реального байта нигде не отслеживается. то есть в массиве ind 2 и 3 ячейки содержат одинаковое значение 3-го реально переданного байта. мне кажется, достаточно подробно
  3. 1. IOReg был как раз из одного из примеров, там было volatile. 2. ___ 3. массив 3 или 4 - не имеет смысла. просто индексы не с нуля начинаются. 4. обнулял принудительно второй элемент массива ind[2], потому что именно с ним проблемы - первый и третий приходят корректно. 5. Да, пока один проход программы, чтобы понять куда теряется второй байт 6. в основном цикле, я думаю, эта строка никому не мешает да, вы правы, претензий от вас много :) и ни одного предположения в чем ошибка
  4. Добрый день, не создаю новую тему, так как проблема похожа. Ловлю SPI-Slave-устройством 3 байта. каждый по прерыванию сохраняю. и, каким-то образом, 2 и 3 байт оказываются одинаковыми, хотя при передаче их на осциллографе вижу, что данные поступают разные. подскажите в чем может быть проблема? куда думать #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile char IOReg; unsigned char command, f_m, f_l; // три байта комманды char count = 0; // счётчик байтов комманды unsigned char ind[4]; // массив под входящие данные long f; int main(void) { ind[2] = 0; volatile char IOReg; DDRB = (1 << PB6)|(1 << PB3 ); // MISO & LED PORTB = 255; // тут у меня светодиод висит // Enable SPI Interrupt and SPI in Slave Mode with SCK = CK/4 SPCR = (1<<SPIE)|(1<<SPE); IOReg = SPSR; // Clear SPIF bit in SPSR IOReg = SPDR; SPDR = 0b01010101; // произвольный байт для отправки sei(); while(1) { if (count == 3) // после того, как прошли 3 байта { if (ind[2] == ind[3]){PORTB = 0;} // выключаю светодиод, когда регистры равны }; IOReg = SPDR; } return 0; } ISR(SPISTC_vect) { count++; ind[count] = SPDR; return; }
  5. :) ну так и делаю. и на печати сплошная заливка слоя TOP. несмотря на приоритет другого слоя.
  6. Добрый день! В последней версии AD столкнулся со следующей проблемой. Есть контактная площадка в слое TOP, добавляю переходное отверстие (Mulilayer, соответственно). в настройках печати задаю приоритет Multilayer'а выше, чем TOР, но отверстия не выводятся... Кто-нибудь подскажет, как вывести всё-таки переходные отверстия? Заранее благодарен
  7. Палыч, спасибо! Cовершенно верно! Уже сам нашел этот косяк. Скопировал блок инициализации UARTA c какого-то сайта. При посылке символа программа слетала. Убрал 1 бит TXIE и всё стало отлично. ещё раз спасибо! :beer:
  8. Добрый вечер всем! Суть проблемы: Происходит многократный вход в функцию main - контроллер на терминал выдает символ многократно, хотя по идее должен лишь единожды при пуске. Сторожевой таймер выключен. Питание и reset - стабильны. При каких ещё условиях может происходить сброс? #include <avr/io.h> #include <avr/interrupt.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <util/delay.h> #include <avr/iotn2313.h> // 19200, 8 бит, 2 стоповых #define USART_BAUDRATE 19200 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) char ReceivedByte; char s[] = "Hello"; int main(void) { DDRD = 255; PORTD =255; DDRB = 255; PORTB = 255; sei(); UCSRB |= (1 << RXEN) | (1 << TXEN) | (1 << RXCIE) | (1 << TXCIE); UCSRC |= (1 << USBS) | (1 << UCSZ0) | (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); while ((UCSRA & (1 << UDRE)) == 0) {}; UDR = s[1]; while(1) { _delay_ms(300); }; return 0; }; ISR(USART_RX_vect) { ReceivedByte = UDR; switch (ReceivedByte) { case ('1'): while ((UCSRA & (1 << UDRE)) == 0) {}; UDR = s[2]; break; } UDR = ReceivedByte; // Echo back the received byte back to the computer return; }; Буду рад любым подсказкам!
  9. кажется разобрался. в моем дистрибутиве отсутствовали все плагины. видимо разработчики вынесли печать, экспорт и прочее в дополнительные плагины. сейчас установил версию, в которую включены плагины некоторые. печать заработала! всем спасибо
  10. Добрый день! Установил один из последних релизов AD10. С лекарствами, естественно. В меню "Файл" - пункт "Печать" не активен! Почему такое может быть, кто сталкивался? Заранее благодарен
  11. не буду создавать новую тему, вопрос тоже по импедансу... в правилах ставлю, чтобы проводник определялся не шириной а сопротивлением... но он продолжает разводить своими 0,254 мм.... как сделать так, чтобы он взял толщину и диэлектрическую проницаемость из проекта и пересчитал ширину проводника? заранее благодарен
  12. Спасибо, уже разобрались :) а кто-нибудь подскажет про экспорт ODB++, что это за зверь? я так понял,что экспорт происходит тех же гербер-файлов, сверловки...и добавляются файлы с контактными площадками. в чём прелесть данного формата?
  13. в Алтиуме нашёл опцию экспорт NC drill files... в итоге он сохраняет отверстия в файле txt. но производитель требует сверловку в формате Excellon... подскажите, что это такое и как получить файл в данном формате? заранее благодарен
  14. IAR+AVR

    да, хотел константы разместить в памяти программы... баловался с объявлением констант. и в одной из вариаций, линковщик выдал кроме секций CODE, DATA ещё и XDATA. и тут я вспомнил, что именно XDATA и есть содержимое eep. что же тогда находится в секции DATA?
×
×
  • Создать...