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

 
 
 
Reply to this topicStart new topic
> работа с at91sam7x256, требуется помощь в программировании
qwerty
сообщение May 16 2009, 04:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 22-07-07
Из: нск
Пользователь №: 29 291



доброго времени суток уважаемые, занялся написанием софта для тестирования основных функций at91sam7x256 (ввод вывод, встроенный АЦП) для соединения с компом использую RS232. Программу использующуюся со стороны компа написал сейчас пишу прошивку для камня. прошивку пишу на Keil v3.12. собственно проблема в том что никогда не приходилось работать ни с кейлом ни с подобными камнями. собственно возникли несколько вопросов. кому не сложно помогите пожалуйсто исходниками.

собственно вопросы.

1. инициализация UART (чтение запись) (асинхронный режим. 8 бит. без паритета . 1 стоповый бит)
2. установка линии в третье состояние
3. чтение линии
4. запись в линию
5 чтение входа АЦП

заранее спасибо откликнувшимся.

Сообщение отредактировал qwerty - May 16 2009, 04:46
Go to the top of the page
 
+Quote Post
KAlex
сообщение May 18 2009, 08:53
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



>>1. инициализация UART (чтение запись) (асинхронный режим. 8 бит. без паритета . 1 стоповый бит)
У меня IAR, но думаю не принципиально.
делаю так:

AT91PS_USART COM1 = AT91C_BASE_US1;
//* Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, ((unsigned int) AT91C_PA21_RXD1 )|((unsigned int) AT91C_PA22_TXD1 ) , 0);
// First, enable the clock of the PIOB
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US1 ) ;
// Usart Configure
AT91F_US_Configure (COM1, MCK, AT91C_US_ASYNC_MODE, AT91_BAUD_RATE, 0);
// Enable usart
COM1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
//* Enable USART IT error and RXRDY
AT91F_US_EnableIt(COM1,AT91C_US_TIMEOUT | AT91C_US_FRAME | AT91C_US_OVRE |AT91C_US_RXRDY);
//* open Usart 1 interrupt
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, Usart_c_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);

>>5 чтение входа АЦП
Для CH7:
while (!(((AT91F_ADC_GetStatus (AT91C_BASE_ADC)) & 0x80) == 0x80) );
ch = AT91F_ADC_GetConvertedDataCH7 (AT91C_BASE_ADC)<16);

А на счет 2 3 и 4 советую для начала почитать
http://www.gaw.ru/html.cgi/txt/doc/micros/...sam7s/index.htm
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 18 2009, 09:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(KAlex @ May 18 2009, 12:53) *
while (!(((AT91F_ADC_GetStatus (AT91C_BASE_ADC)) & 0x80) == 0x80) );

Ужос! Вызов идиотской обертки для чтения одного регистра, константа вместо имени бита и невообразимая логика.
Код
while(!(*AT91C_ADC_SR & AT91C_ADC_EOC7));
Go to the top of the page
 
+Quote Post
KAlex
сообщение May 18 2009, 10:11
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(aaarrr @ May 18 2009, 13:28) *
Ужос!

Да, согласен.
Писалось все это сто лет назад, на заре освоения ARM. Да так и тянется по проекту, руки не доходят.
Устыдился. Щас перепишу.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th July 2025 - 09:37
Рейтинг@Mail.ru


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