Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: работа с at91sam7x256
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
qwerty
доброго времени суток уважаемые, занялся написанием софта для тестирования основных функций at91sam7x256 (ввод вывод, встроенный АЦП) для соединения с компом использую RS232. Программу использующуюся со стороны компа написал сейчас пишу прошивку для камня. прошивку пишу на Keil v3.12. собственно проблема в том что никогда не приходилось работать ни с кейлом ни с подобными камнями. собственно возникли несколько вопросов. кому не сложно помогите пожалуйсто исходниками.

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

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

заранее спасибо откликнувшимся.
KAlex
>>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
aaarrr
Цитата(KAlex @ May 18 2009, 12:53) *
while (!(((AT91F_ADC_GetStatus (AT91C_BASE_ADC)) & 0x80) == 0x80) );

Ужос! Вызов идиотской обертки для чтения одного регистра, константа вместо имени бита и невообразимая логика.
Код
while(!(*AT91C_ADC_SR & AT91C_ADC_EOC7));
KAlex
Цитата(aaarrr @ May 18 2009, 13:28) *
Ужос!

Да, согласен.
Писалось все это сто лет назад, на заре освоения ARM. Да так и тянется по проекту, руки не доходят.
Устыдился. Щас перепишу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.