|
AVR32 Studio на AT32UC3B0256 |
|
|
|
Apr 8 2011, 03:51
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Помогите пожалуйста создать проект на AVR32 Studio на AT32UC3B0256. По возможности обучить/объяснить, желательно в живую при встрече.Есть схема проекта и идея работы. С С++ сталкиваться не приходилось. Сам я в башкирии, могу добраться до любого города в Республике Башкортостан и Татарстан. Как смогу отблагодарю.
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Apr 8 2011, 05:09
|

Народный чинитель
  
Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811

|
Дело нехитрое.  Запускаем AVR32 Studio. Идем File->New->Other...,
там выбираем AVR C ProjectОбзываем проект, как надо, допустим "my_project".
Нажимаем кнопочку с тремя точками в Target Device, там выбираем AT32UC3B0256.
Нажимаем OK и Finish.
Все. Пустой проект создан!  Потом можно пойти во Framework->Select Drivers/Components/Services добавить нужные компоненты из Фрэйворка. ЗЫ: Еще бывает полезно в начале, вместо AVR C Project, выбрать AVR Example Project. Потом выбрать наиболее близкий к вашей задаче пример для данного процессора. Тогда нужные компоненты из Фрэймворка добавятся автоматически и код сразу билдится будет без ошибок. А потом, отталкиваясь от примера уже добавлять свое.
|
|
|
|
|
Apr 8 2011, 05:19
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Ну это понятно,мне надо вот именно то что дальше сделать помочь. Контроллер тактируется от внешнего кварца 12 МГц , как сделать чтоб он работал на 60 МГц?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 8 2011, 05:41
|

Народный чинитель
  
Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811

|
Вот так всегда, спрашивает человек одно, а надо ему совсем другое. Изучаем пример: "EVK1101 - DRIVERS - Power Manager (PM) example 2" Там есть функция local_start_highfreq_clock. Она запускает PLL и включает тактирование на 48МГц. Ее чуток подправить в соответствии с даташитом, чтобы было 60.
|
|
|
|
|
Apr 8 2011, 05:51
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
У меня был один большой вопрос, точнее просьба помочь или же куча мелких.
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 8 2011, 07:01
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Как вывести на одну из ножек тактовый сигнал 8 МГц для работы с АЦП при всех тех же остальных условиях (т.е. внеш.кварц 12 МГц и внутреннее тактирование 60МГц) ?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 11 2011, 02:36
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
почему у меня выскакивает предупреждение The user program and the bootloader overlap! Я загружаю программу через встроенный в конроллер Bootloader начиная с 0x080002000? В чем причина?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 11 2011, 08:22
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Т.е часть моей программы не записывается,которая перекрывается с bootloader'ом? Причем эта ошибка иногда выскакивает,а иногда нет.
В примере pm поменял частоту синхронизации. После заливки где можно осциллографом посмотреть,что он действительно стал 60 МГц?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 12 2011, 02:15
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Подскажите пожалуйста что конкретно надо поменять в примере PM, чтобы CPU тактировался 60 МГц и выдавал на одну ношку 8 МГц и где можно увидеть результат???
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 12 2011, 09:57
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Спасибо, уже сам сделал и вывел на PA30 7,5 МГц (8 МГц не получилосьделит на 2 в степени),сейчас скачаю и сверю для большего понимания, С пока еще далек для меня. Теперь хочу то же самое на PWM сделать. Каким образом это осуществить не подскажете?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 12 2011, 10:50
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Что осуществляет функция flashc_set_wait_state(1) в примере PM ?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 12 2011, 11:17
|

Народный чинитель
  
Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811

|
В даташите написано: Цитата Internal High-Speed Flash -Single Cycle Access up to 30 MHz Т.е. если процессор работает на частоте свыше 30МГц для работы с флэш-памятью необходимо вставлять цикл ожидания.
|
|
|
|
|
Apr 12 2011, 11:36
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Понятно теперь. Спасибо
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 13 2011, 02:24
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
У меня в проекте программа ставит "?" знак напротив строки #include <avr32/io.h> ,говоря что это не разрешенное включение. Как включить в Includes путь на io.h ?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 13 2011, 05:04
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
То что надо!
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 13 2011, 07:45
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Никто не может подсказать нельзя ли реализовать тактирование PWM =60 МГц, а USART=12 МГц?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 14 2011, 10:24
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Подскажите пожалуйста как сделать параллельные порт из ножек с PB1 по PB9 ?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 14 2011, 11:34
|
Частый гость
 
Группа: Свой
Сообщений: 157
Регистрация: 7-10-07
Из: Санкт-Петербург
Пользователь №: 31 137

|
Цитата(dinar21 @ Apr 14 2011, 14:24)  Подскажите пожалуйста как сделать параллельные порт из ножек с PB1 по PB9 ? Вам порт ввода или вывода нужен или ввода/вывода? И именно 9-битный?
--------------------
Если работает через раз - значит не работает!
|
|
|
|
|
Apr 15 2011, 02:32
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Мне нужно эти ножки на вывод. Они будут подключаться к 12 разрядному ЦАП к старшим 9 разрядам. Младшие 3 будут всегда повешены на 1.
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 15 2011, 05:47
|
Частый гость
 
Группа: Свой
Сообщений: 157
Регистрация: 7-10-07
Из: Санкт-Петербург
Пользователь №: 31 137

|
Цитата(dinar21 @ Apr 15 2011, 06:32)  Мне нужно эти ножки на вывод. Они будут подключаться к 12 разрядному ЦАП к старшим 9 разрядам. Младшие 3 будут всегда повешены на 1. Ну например так: Код AVR32_GPIO.port[1].oders = 0x000003FE; \\ Конфигурируем соответствующие ножки на выход AVR32_GPIO.port[1].gpers = 0x000003FE; \\ Включаем эти ножки порта
AVR32_GPIO.port[1].ovr = 0x0000.... \\ Устанавливает состояние на этих выводах
--------------------
Если работает через раз - значит не работает!
|
|
|
|
|
Apr 15 2011, 09:13
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Цитата(Maximm @ Apr 15 2011, 09:47)  Ну например так: Код AVR32_GPIO.port[1].oders = 0x000003FE; \\ Конфигурируем соответствующие ножки на выход AVR32_GPIO.port[1].gpers = 0x000003FE; \\ Включаем эти ножки порта
AVR32_GPIO.port[1].ovr = 0x0000.... \\ Устанавливает состояние на этих выводах О,точно!!! Совсем уже голова не работает. Осталось разобраться с прерываниями.
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 18 2011, 04:39
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Не подскажете как сделать прерывание от PWM ?
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
Apr 18 2011, 05:44
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
И что за регистр irq? найти не могу нигде
Сообщение отредактировал dinar21 - Apr 18 2011, 05:44
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
May 6 2011, 04:23
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Объясните пожалуйста как пользоваться режимом отладки через JTAG II .
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
|
May 16 2011, 10:53
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788

|
Уважаемые форумчане подкажите пожалуйста,что не так в программе. Почему не работает USART ? Без части программы прерывания от PWM работает. А так GCLK0, PWM работает,а USART -нет CODE #include <avr32/io.h> #include "compiler.h" #include "board.h" #include "power_clocks_lib.h" #include "gpio.h" #include "usart.h" #include "pm.h" #include "pwm.h" #include "intc.h"
/* задается какой из универсальных генераторов синхросигналов будет использоваться * в данном случае 0 .т.е. порт PA3 */ # define EXAMPLE_GCLK_ID 0 # define EXAMPLE_GCLK_PIN AVR32_PM_GCLK_0_PIN # define EXAMPLE_GCLK_FUNCTION AVR32_PM_GCLK_0_FUNCTION
# define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz # define EXAMPLE_USART (&AVR32_USART1) # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION # define EXAMPLE_USART_CLOCK_MASK AVR32_USART1_CLK_PBA # define EXAMPLE_PDCA_CLOCK_HSB AVR32_PDCA_CLK_HSB # define EXAMPLE_PDCA_CLOCK_PB AVR32_PDCA_CLK_PBA
//# define EXAMPLE_PWM_PIN AVR32_PWM_0_0_PIN //# define EXAMPLE_PWM_FUNCTION AVR32_PWM_0_0_FUNCTION # define EXAMPLE_PWM_CHANNEL_ID 0
# define EXAMPLE_PWM (&AVR32_PWM) # define EXAMPLE_PWM_IRQ AVR32_PWM_IRQ
bool front; int shet;
/*! \ краткое USART обработчик прерывания. * * \ к сведению `__attribute__ ((__interrupt__)) '(под GNU GCC для AVR32) и * `__interrupt" (под IAR Embedded Workbench для Atmel AVR32) с функцией * атрибуты используются для управления `Rete 'инструкции. */ #if defined (__GNUC__) __attribute__((__interrupt__)) #elif defined(__ICCAVR32__) __interrupt #endif
static void pwm_int_handler(void) // п/п формирования пилы { if (front==true) // признак спадающего фронта {if (shet!=0x00000000) AVR32_GPIO.port[1].ovr = shet-- ; // уменьшаем с на 1 до тех пор пока оно не 0 else {front=false; AVR32_GPIO.port[1].ovr = shet; } } else // иначе признак возрастающего фронта {if (shet!=0x00000200) AVR32_GPIO.port[1].ovr = shet++ ; // увеличиваем с на 1 до тех пор пока оно не 512 else {front=true; AVR32_GPIO.port[1].ovr = shet; } }
}
static void local_start_highfreq_clock(void) { volatile avr32_pm_t* pm = &AVR32_PM; /* \Примечание во всех расчетах предположить, что Osc0 частота 12 МГц. */
pm_switch_to_osc0(pm, FOSC0, OSC0_STARTUP); // переключение тактирования на Osc0.
/* Установка ФАПЧ0 на Osc0, Mul = 9, делитель на 1, lockcount = , то есть. 12Mhzx10 = 120MHz/2=60МГц выходной */
pm_pll_setup(pm, 0, // разрешение использования ФАПЧ0 9, // MUL=10 умножение частоты кварца на 10 1, // DIV=1 деление частоты на 1 0, // Выбираем Osc0/PLL0 или Osc1/PLL1 16); // lockcount in main clock for the PLL wait lock
/* Эта функция устанавливает опции ФАПЧ. *pm Base address of the Power Manager (i.e. &AVR32_PM) pll PLL number 0 pll_freq Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. */ /* Выходная VCO частта ФАПЧ 120 MHz. Мы делим ее на 2 с pll_div2=1. Это позволяет разрешить дальше тактировать CPU на 60 MHz */ pm_pll_set_option(pm, 0, 1, 1, 0);
/* Разрешение ФАПЧ0 */ /* void pm_pll_enable(volatile avr32_pm_t* pm, unsigned int pll) { */ pm_pll_enable(pm,0);
pm_switch_to_clock(pm, AVR32_PM_MCSEL_PLL0); /* Переключение тактовой частоты процессора на 60 MHz */
} static void local_enable_gclk_on_gpio(volatile avr32_pm_t* pm) { int gc = EXAMPLE_GCLK_ID; /* установка на gc (вданном случае PA03) на прием от ФАПЧ и деление на 2^3=8 */ pm_gc_setup(pm, gc, 1, 0, 1, 3);
/* разрешение gc */ pm_gc_enable(pm,gc); /* Назначение gc на выход GPIO PA3 */ gpio_enable_module_pin(EXAMPLE_GCLK_PIN, EXAMPLE_GCLK_FUNCTION); }
int main(void) { static const gpio_map_t USART_GPIO_MAP = { {EXAMPLE_USART_RX_PIN, EXAMPLE_USART_RX_FUNCTION}, {EXAMPLE_USART_TX_PIN, EXAMPLE_USART_TX_FUNCTION} };
// USART options. static const usart_options_t USART_OPTIONS = { .baudrate = 172800, .charlength = 8, .paritytype = USART_NO_PARITY, .stopbits = USART_1_STOPBIT, .channelmode = USART_NORMAL_CHMODE };
volatile avr32_pm_t* pm = &AVR32_PM;
// Настройка Osc0 в кристалле режиме (т.е. использование внешнего источника кристалла, с // частота FOSC0) с соответствующим время запуска затем переключиться Главные часы // источник Osc0. pcl_switch_to_osc(PCL_OSC0, FOSC0, OSC0_STARTUP);
// Отключить все прерывания Disable_global_interrupt();
pwm_opt_t pwm_opt; // PWM option config. avr32_pwm_channel_t pwm_channel = { .ccnt = 0 }; // к. // номер канала и, например, используется в ряде функций. // Это определяется как локальная переменная для простоты использования. unsigned int channel_id;
channel_id = EXAMPLE_PWM_CHANNEL_ID; //gpio_enable_module_pin(EXAMPLE_PWM_PIN, EXAMPLE_PWM_FUNCTION);
// Назначение GPIO для USART. gpio_enable_module(USART_GPIO_MAP, sizeof(USART_GPIO_MAP) / sizeof(USART_GPIO_MAP[0])); // Инициализация USART в режиме RS232. usart_init_rs232(EXAMPLE_USART, &USART_OPTIONS, EXAMPLE_TARGET_PBACLK_FREQ_HZ);
// конфигурация PWM controller . pwm_opt.diva = AVR32_PWM_DIVA_CLK_OFF; pwm_opt.divb = AVR32_PWM_DIVB_CLK_OFF; pwm_opt.prea = AVR32_PWM_PREA_MCK; pwm_opt.preb = AVR32_PWM_PREB_MCK;
pwm_init(&pwm_opt);
pwm_channel.CMR.calg = PWM_MODE_LEFT_ALIGNED; // режим канала. pwm_channel.CMR.cpol = PWM_POLARITY_LOW; // полярность канала. pwm_channel.CMR.cpd = PWM_UPDATE_DUTY; // не используется в начальное время. pwm_channel.CMR.cpre = AVR32_PWM_CPRE_MCK_DIV_32; // канальный предделитель. pwm_channel.cdty = 6; // рабочий цикл канала, должен быть < CPRD. pwm_channel.cprd = 12; // период канала. pwm_channel.cupd = 0; // обновление канала здесь не используется. // С такими настройками, период выходного сигнала будет : // (12000000/32)/12 == 31250 Hz ==32 мкс // prescaler == 32, period == 12.
// Инициализация векторов прерываний. INTC_init_interrupts(); // Регистрация USART обработчик прерывания на контроллер прерываний. // usart_int_handler является обработчик прерывания для регистров // EXAMPLE_USART_IRQ является IRQ из обработчика прерывания для регистров // AVR32_INTC_INT0 является прерывание уровень приоритета назначить группу // это IRQ. // недействительными INTC_register_interrupt (__int_handler обработчик, неподписанные IRQ Int, неподписанные int_level Int); INTC_register_interrupt(&pwm_int_handler, EXAMPLE_PWM_IRQ, AVR32_INTC_INT0);
// Включить PWM прерывания. EXAMPLE_PWM->ier = 1;
AVR32_GPIO.port[1].oders =0x000003FE; // Конфигурируем соответствующие ножки на выход AVR32_GPIO.port[1].gpers =0x000003FE; // Включаем эти ножки порта
/* Начало высокой тактовой частоте и переключаться Main Clock с этой высокой тактовой частоты */ local_start_highfreq_clock(); /* Настройка общих часы с высокой тактовой частотой и выхода его на GPIO PIN */ //local_start_gc(); local_enable_gclk_on_gpio(pm);// включение внешнего тактирования 7,5 МГц на ножку
Enable_global_interrupt(); //разрешение прерываний
pwm_channel_init(channel_id, &pwm_channel); // Установить конфигурацию каналов 0.
pwm_start_channels(1 << channel_id); // стартовать канал 0.
// **AT32UC3B_USART** while(1){ int c=0; usart_read_char(EXAMPLE_USART, &c); // Опрос канала 1 if( c == 0x30 ) usart_write_char(EXAMPLE_USART, 0x2B); if( c == 0x31 ) usart_write_char(EXAMPLE_USART, 0x02); // Опрос канала 2 if( c == 0x32 ) usart_write_char(EXAMPLE_USART, 0x09); if( c == 0x33 ) usart_write_char(EXAMPLE_USART, 0x03); }; }
--------------------
Глупых вопросов не бывает, бывают глупые ответы!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|