реклама на сайте
подробности

 
 
> AVR32 Studio на AT32UC3B0256
dinar21
сообщение Apr 8 2011, 03:51
Сообщение #1


Участник
*

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



Помогите пожалуйста создать проект на AVR32 Studio на AT32UC3B0256. По возможности обучить/объяснить, желательно в живую при встрече.Есть схема проекта и идея работы. С С++ сталкиваться не приходилось. Сам я в башкирии, могу добраться до любого города в Республике Башкортостан и Татарстан. Как смогу отблагодарю.


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dinar21
сообщение May 16 2011, 10:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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);
};
}



--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dinar21   AVR32 Studio на AT32UC3B0256   Apr 8 2011, 03:51
- - jasper   Дело нехитрое. Запускаем AVR32 Studio. Идем File...   Apr 8 2011, 05:09
- - dinar21   Ну это понятно,мне надо вот именно то что дальше с...   Apr 8 2011, 05:19
- - jasper   Вот так всегда, спрашивает человек одно, а надо ем...   Apr 8 2011, 05:41
- - dinar21   У меня был один большой вопрос, точнее просьба пом...   Apr 8 2011, 05:51
- - dinar21   Как вывести на одну из ножек тактовый сигнал 8 МГц...   Apr 8 2011, 07:01
- - jasper   Для этой задачи существует специальный Generic clo...   Apr 8 2011, 08:35
- - dinar21   почему у меня выскакивает предупреждение The user ...   Apr 11 2011, 02:36
- - jasper   Это нормально, так должно быть. Там в начале кода ...   Apr 11 2011, 08:09
- - dinar21   Т.е часть моей программы не записывается,которая п...   Apr 11 2011, 08:22
- - dinar21   Подскажите пожалуйста что конкретно надо поменять ...   Apr 12 2011, 02:15
- - jasper   Исправленный пример PM 2 для 60МГц. Выход 60МГц см...   Apr 12 2011, 09:39
- - dinar21   Спасибо, уже сам сделал и вывел на PA30 7,5 МГц (8...   Apr 12 2011, 09:57
- - jasper   Здесь не подскажу, смотрите пример на PWM. Можно е...   Apr 12 2011, 10:17
- - dinar21   Что осуществляет функция flashc_set_wait_state(1) ...   Apr 12 2011, 10:50
- - jasper   В даташите написано: ЦитатаInternal High-Speed Fla...   Apr 12 2011, 11:17
- - dinar21   Понятно теперь. Спасибо   Apr 12 2011, 11:36
- - dinar21   У меня в проекте программа ставит "?" зн...   Apr 13 2011, 02:24
- - jasper   В AVR32 Studio в свойствах проекта: Project->Pr...   Apr 13 2011, 04:54
- - dinar21   То что надо!   Apr 13 2011, 05:04
- - dinar21   Никто не может подсказать нельзя ли реализовать та...   Apr 13 2011, 07:45
- - dinar21   Подскажите пожалуйста как сделать параллельные пор...   Apr 14 2011, 10:24
|- - Maximm   Цитата(dinar21 @ Apr 14 2011, 14:24) Подс...   Apr 14 2011, 11:34
- - dinar21   Мне нужно эти ножки на вывод. Они будут подключать...   Apr 15 2011, 02:32
|- - Maximm   Цитата(dinar21 @ Apr 15 2011, 06:32) Мне ...   Apr 15 2011, 05:47
|- - dinar21   Цитата(Maximm @ Apr 15 2011, 09:47) Ну на...   Apr 15 2011, 09:13
- - dinar21   Не подскажете как сделать прерывание от PWM ?   Apr 18 2011, 04:39
- - dinar21   И что за регистр irq? найти не могу нигде   Apr 18 2011, 05:44
- - jasper   irq - общее обозначение запроса на прерывание. Так...   Apr 19 2011, 04:25
- - dinar21   Объясните пожалуйста как пользоваться режимом отл...   May 6 2011, 04:23


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 02:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016